Prometheus + InfluxDB + MySQL + Grafna快速構建監控系統

你好我是李白發表於2020-07-26

Prometheus + InfluxDB + MySQL + Grafna

參考連結:

https://blog.rj-bai.com/post/158.html

全域性埠說明:

Prometheus預設埠:9090
Grafana預設埠:3000
node_exporter預設埠:9104
mysqld_exporter預設埠:9100
alertmanager預設埠:9093
InfluxDB預設埠:8086

本文包含以下部分:

1.安裝prometheus
2.安裝node_exporter、mysqld_exporter
3.配置prometheus獲取node_exporter與mysqld_exporter資料
4.安裝Grafana
5.匯入Grafana官網模板,對資料基本呈現
6.將prometheus資料存放到外部儲存influxDB,而非自帶tsdb
7.簡單配置alertmanager

1.安裝配置prometheus

1.1 下載prometheus

tar -zxf prometheus-2.19.2.linux-amd64.tar.gz -C /usr/local
ln -s /usr/local/prometheus-2.19.2.linux-amd64 /usr/local/prometheus


1.2 啟動prometheus,配置開機自啟動

# cat > /usr/lib/systemd/system/prometheus.service <<EOF 
[Unit]
Description=prometheus server daemon
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target
EOF
# systemctl daemon-reload && systemctl start prometheus.service

1.3 配置基於檔案發現

# vi prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s
  
alerting:
  alertmanagers:
  - static_configs:
    - targets:
    
rule_files:
scrape_configs:
  - job_name: 'prometheus'                    # 這個目錄下的所有主機監控,將會歸集到job為prometheus的標籤下,要單獨設定,需要修改此配置檔案單獨設定。
    file_sd_configs:
      - files: ['/usr/local/prometheus/files_sd_configs/*.yml']
        refresh_interval: 5s
  - job_name: 'nodes'
    file_sd_configs:
      - files: ['/usr/local/prometheus/nodes_sd_configs/*.yml']
        refresh_interval: 5s

# 配置本機

# cd files_sd_configs/
# vi localhost.yml 
- targets: ['localhost:9090'] 
  labels:
    name: czh02

# 利用kill -hup 傳送signal hup熱更新程式,使程式熱載入配置檔案

# ps aux | grep prometheus.yml  | grep -v grep  | awk {'print $2'} | xargs kill -hup

2. 安裝grafana

2.1 下載安裝

# grafana主配置檔案在/usr/local/grafana-7.1.0/conf目錄下,default.ini可以配置grafana資料目錄

# http或https以及使用sqllite還是mysql/postgresql,都可以根據實際情況配置。

# wget 
# tar -zxvf grafana-7.1.0.linux-amd64.tar.gz -C /usr/local
# groupadd grafana
# useradd -g grafana grafana
# passwd grafana
# ln -s /usr/local/grafana-7.1.0 /usr/local/grafana-server
# chown -R grafana:grafana /usr/local/grafana*

2.2 配置開機自啟動

# cat > /usr/lib/systemd/system/grafana.service <<EOF 
[Unit]
Description=grafana server
[Service]
User=grafana
Group=grafana
Restart=on-failure
ExecStart=/usr/local/grafana-server/bin/grafana-server -homepath /usr/local/grafana-server web
[Install]
WantedBy=multi-user.target
EOF

# systemctl daemon-reload    # 過載配置檔案
# systemctl start grafana    # 啟動grafana
# systemctl status grafana   # 檢視grafana狀態
# systemctl enable grafana   # 配置開機自啟動

2.2 登陸grafana,匯入官方模板

預設賬號admin/admin登陸,先匯入幾個官網模板。

模板如果基於prometheus,則可以配置資料來源prometheus,

模板如果基於mysql,則需要配置mysql hostname port user password等作為資料來源。

模板如果基於prometheus node_exporter/mysqld_exporter則可以以prometheus作為資料來源。

2.3 新增prometheus資料來源

點選Grafana左側設定,新增prometheus資料來源,輸入prometheus資料來源IP地址跟埠即可。

3. 安裝node_exporter        

# tar -zxvf node_exporter-1.0.1.linux-amd64.tar.gz -C /usr/local
# cd /usr/local
# ln -s node_exporter-1.0.1.linux-amd64/ node_exporter
# cat > /usr/lib/systemd/system/node_exporter.service <<EOF 
[Unit]
Description=node_exporter
[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
EOF

# systemctl daemon-reload
# systemctl start node_exporter.service
# systemctl enable node_exporter

# 將預設收集暴露出去,預設啟動之後即已經暴露,可以不做下面步驟,可以嘗試訪問IP:9100/metrics

# curl -s 127.0.0.1:9100/metrics | head

4. mysql伺服器安裝mysqld_exporter

# 解壓安裝

# tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local/
# ln -s mysqld_exporter-0.12.1.linux-amd64 mysqld_exporter

# 配置mysql_exproter連線資料庫配置資訊

# vi /usr/local/mysqld_exporter/my.cnf
[client]
host=127.0.0.1
user=root
password=111111
port=20000

# 配置開機自啟動

# cat > /usr/lib/systemd/system/mysqld_exporter.service <<EOF 
[Unit]
Description=mysqld_exporter
[Service]
User=mysql
Group=mysql
Restart=on-failure
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/my.cnf
[Install]
WantedBy=multi-user.target
EOF


# systemctl daemon-reload
# systemctl start mysqld_exporter.service
# systemctl enable mysqld_exporter.service
# systemctl status mysqld_exporter.service

5.prometheus新增監控exporter

# 由於prometheus主配置檔案配置了基於檔案發現主機,所以在相應目錄新增exporter主機配置即可


# cd /usr/local/prometheus/nodes_sd_configs
# vi nodes_mysql02.yml
- targets: ['192.168.204.82:9100'] 
  labels:
    name: mysql02
    
# vi mysql_mysql02.yml 
- targets: ['192.168.204.82:9104'] 
  labels:
    name: mysql02_mysql_server
    
- targets: ['192.168.204.81:9104']
  labels:
    name: mysql01_mysql_server

# 可以使用kill命令傳送hup訊號,過載配置檔案,相當於熱載入

# ps aux | grep prometheus.yml  | grep -v grep  | awk {'print $2'} | xargs kill -hup

6. 配置prometheus外部資料來源influxDB

6.1 下載安裝influxDB

# wget 
# yum localinstall influxdb-1.8.1.x86_64.rpm

6.2 配置influxDB引數

# 修改influxDB資料存放目錄以及wal日誌存放目錄,如果想修改預設埠8086,可以修改

# vi /etc/influxdb/influxdb.conf
[data]
  # The directory where the TSM storage engine stores TSM files.
  dir = "/influxdb/data"
  # The directory where the TSM storage engine stores WAL files.
  wal-dir = "/influxdb/wal"
  
[logging]
  level = "warn"    # 修改級別,不輸出info日誌資訊
  
[http]
  # The bind address used by the HTTP service.
  # bind-address = ":8086"
log-enabled = false     # 禁用http請求日誌,防止prometheus不停重新整理對influx讀寫請求日誌
access-log-path = "/influxdb/influxdb.log"     # http請求日誌路徑,防止將預設/var/log/messages重新整理過快

6.3 啟動influxDB

# systemctl stauts influxdb
# systemctl start influxdb
# systemctl enable influxdb

6.4 建立influx資料庫

有以下兩種方法建立influx資料庫:

(1)使用influxDB API建立資料庫

curl -i -XPOST 

(2)使用influx命令列建立資料庫

# influx
Connected to 
InfluxDB shell version: 1.8.1
> CREATE DATABASE "prometheus"
> show databases;
name: databases
name
----
_internal
prometheus

7.  配置prometheus外部資料存放influxDB

# 修改prometheus主配置檔案,配置influx資料庫api

# vi /usr/local/prometheus/prometheus.yml
remote_write:
  - url: "
  
remote_read:
  - url: "

重啟prometheus

# systemctl restart prometheus

8. 配置prometheus alertmanager

Alertmanager 主要用於接收 Prometheus 傳送的告警資訊,它很容易做到告警資訊的去重,降噪,分組,策略路由。

它支援豐富的告警通知渠道,可以將告警資訊轉發到郵箱、企業微信、釘釘等。

8.1 安裝alertmanager

# tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz -C /usr/local/
# ln -s /usr/local/alertmanager-0.21.0.linux-amd64/ /usr/local/alertmanager

8.2 預設配置檔案說明

# alertmanager主配置檔案
# cat alertmanager.yml
# 第一部分,全域性配置,解析超時時間
global:
  resolve_timeout: 5m 
  
# 下面這部分是配置告警,配置告警怎麼傳送,怎麼分配
route:
  group_by: ['alertname']    # alertmanager中的分組,選哪個標籤作為分組的依據                               
  group_wait: 10s            # 分組等待時間,拿到第一條告警後等待10s,如果有其他的一起傳送出去                           
  group_interval: 10s        # 各個分組之前發搜告警的間隔時間                                             
  repeat_interval: 1h        # 重複告警時間,預設1小時                                                
  receiver: 'web.hook'       # 接收者
  
# 下面這部分是配置告警的接收者,我要傳送給誰。                                                        
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: '
  
# 這裡用於配置告警收斂的,主要就是減少傳送告警
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

8.3 配置透過郵件傳送告警

# 講解完預設主配置檔案,下面配置使用郵箱傳送

# cat alertmanager.yml 
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: 'xxx@qq.com'         
  smtp_auth_username: 'xxxx@qq.com'
  smtp_auth_password: 'xxxx'       
  smtp_require_tls: false  
          
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1m
  receiver: 'email'  
                
receivers:                         
- name: 'email'                    
  email_configs:                   
  - to: 'xx@xxx.com'

# 驗證配置檔案

# ./amtool check-config alertmanager.yml 
Checking 'alertmanager.yml'  SUCCESS
Found:
 - global config
 - route
 - 0 inhibit rules
 - 1 receivers
 - 0 templates

8.4 配置開機自啟動

# 預設為9093埠,如果需要修改可以啟動時加 --web.listen-address=":9093"選項。

# cat > /usr/lib/systemd/system/alertmanager.service <<EOF
[Unit]
Description=alertmanager
[Service]
Restart=on-failure
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
EOF

8.5 alertmanager與prometheus融合

# 編輯prometheus主配置檔案,增加下面部分

# vi /usr/local/prometheus/prometheus.yml
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - 127.0.0.1:9093
       
rule_files:
  - "rules/*.yml"

8.6  prometheus配置告警rules,啟動alertmanager

# cd /usr/local/prometheus
# mkdir rules
# cd rules
# vi alert.yml
groups:
- name: exporter.rules           # 定義這組告警的組名,同性質的,都是監控例項exporter是否開啟的模板
  rules:
  - alert: exporter_offline     # 告警名稱
    expr: up == 0               # 告警表示式,監控up指標,如果等於0就進行下面的操作
    for: 1m                     # 持續一分鐘為0進行告警
    labels:                     # 定義告警級別
      severity: ERROR
    annotations:   
      summary: "例項 {{ $labels.instance }} 採集器離線。"
      description: "例項 {{ $labels.instance }} job 名為 {{ $labels.job }} 的採集器離線。"

# 啟動alertmanager

# systemctl start alertmanager
# systemctl status alertmanager
# systemctl enable alertmanager

8.7 停止任意exporter,會收到告警郵件如下

# alertmanager.yml檔案配置告警全域性配置,告警傳送規則,分組規則,告警抑制規則。

# prometheus的rules告警規則檔案,配置告警閾值,告警嚴重程度,告警規則,具體可參考官網。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31439444/viewspace-2706983/,如需轉載,請註明出處,否則將追究法律責任。

相關文章