目錄
0. 配置思路
1. 開放端口
2. Docker 鏡像下載
3. 新建配置文件
4. 啟動 node-exporter
5. 啟動 prometheus
6. 啟動 alertmanager
7. 啟動 pushgateway
8. EMQ 監控數據推送到 pushgateway
9. 配置 Grafana 顯示
0. 配置思路
- 配置防火牆,開放用到的端口;
- 新建和編輯配置文件;
- 啟動 Prometheus 及其它組件容器(掛載配置文件);
- 瀏覽器打開 Prometheus UI 主頁,觀察監控對象;
- 使用 Grafana 顯示;
1. 開放端口
- Port 9090 : prometheus (Prometheus Server)
- Port 9100 : node-exporter (物理服務器指標,如 CPU、內存、網絡等)
- Port 9091 : pushgateway (接收第三方應用推送的指標數據)
- Port 9093 : alertmanager (接收來自 Prometheus Server 的告警,處理后通知管理員)
- Port 3000 : grafana (使用 Grafana 顯示監控對象指標數據)
2. Docker 鏡像下載
$ docker pull prom/prometheus
$ docker pull prom/node-exporter
$ docker pull prom/pushgateway
$ docker pull prom/alertmanager
$ docker pull grafana/grafana
3. 新建配置文件
/home/prometheus/prometheus.yml ## 用於掛載,覆蓋 prometheus 容器內部文件 /etc/prometheus/prometheus.yml
/home/prometheus/groups/nodegroups/node.json ## 使用 file_sd_configs 方式實現動態配置,對應容器內 /usr/local/prometheus/groups/
/home/prometheus/rules/node-up.rules ## AlertManager 服務地址以及告警規則文件,對應容器內 /usr/local/prometheus/rules/
/home/prometheus/alertmanager.yml ## 用於掛載,覆蓋 alertmanager 容器內部文件 /etc/alertmanager/alertmanager.yml
prometheus.yml
## /home/prometheus/prometheus.yml
1 # my global config
2 global:
3 scrape_interval: 15s ## 默認抓取時間
4 evaluation_interval: 15s ## 每 15s 評估一次 rules
5 # scrape_timeout is set to the global default (10s).
6
7 # Alertmanager configuration ## Alertmanager 配置
8 alerting:
9 alertmanagers:
10 - static_configs:
11 - targets:
12 - <ip>:9093 ## Alertmanager 地址
13
15 rule_files: ## 添加 Alertmanager 告警 rules 規則文件
16 # - "first_rules.yml"
17 # - "second_rules.yml"
18 - "/usr/local/prometheus/rules/*.rules" ## 容器內部 rules 規則文件地址
19
21 scrape_configs: ## 數據拉取配置
22 - job_name: "prometheus" ## 在這個配置內的時間序列,每一條都會自動添加{job_name:"prometheus"}的標簽
23 static_configs:
24 - targets: ["<ip>:9090"]
25 labels:
26 instance: prometheus
27 service: prometheus-service
28
29 - job_name: "node-exporter" ## 服務器物理機監控
scrape_interval: 15s ## 停止/恢復服務 15s 后 Alert 的狀態才會發生變化
30 file_sd_configs: ## file_sd_configs 方式:以 Json 或 Yaml 方式修改配置,Prometheus 會自動加載無需重啟服務
31 - files: ["/usr/local/prometheus/groups/nodegroups/*.json"]
40 - job_name: "pushgateway" ## 監控 EMQ
41 scrape_interval: 5s
42 honor_labels: true
43 static_configs:
44 - targets: ["<ip>:9091"]
46 - job_name: "grafana" ## 監控 Grafana
47 static_configs:
48 - targets: ["<ip>:3000"]
node.json
## /home/prometheus/groups/nodegroups/node.json
1 [
2 {
3 "targets": [
4 "<ip>:9100"
5 ],
6 "labels": {
7 "instance": "vm-<ip>",
8 "service": "node-service"
9 }
10 }
11 ]
node-up.rules
## Prometheus 配置 AlertManager 告警規則
## /home/prometheus/rules/node-up.rules
1 groups:
2 - name: node-up
3 rules:
4 - alert: node-up
5 expr: up{job="node-exporter"} == 0
6 for: 15s ## 等待15s Alert 狀態改變
7 labels:
8 severity: 1
9 team: node
10 annotations:
11 summary: "{{ $labels.instance }} 已停止運行! "
## 該 rule 規則監測 job="node-exporter" Node 是否為活動,人為停止 node-exporter 服務來驗證該規則;
## 可以觀察 Prometheus -> Targets -> Rules 狀態;
## 15s 后查看是否收到告警郵件;
## AlertManager 主頁可以查看 alert 信息和靜默設置;
alertmanager.yml
## /home/prometheus/alertmanager.yml
1 global: ## 全局配置,包括報警解決后的超時時間、SMTP 相關配置、各渠道通知的 API 地址等
2 resolve_timeout: 5m ## 報警觸發后,每隔 5分鍾會自動發送一次告警郵件
3 smtp_from: 'youraddr@163.com' ## 配置 SMTP 方式發送郵件
4 smtp_smarthost: 'smtp.163.com:465'
5 smtp_auth_username: 'youraddr@163.com'
6 smtp_auth_password: 'yourcode' ## 郵箱授權碼
7 smtp_require_tls: false
8 smtp_hello: '163.com'
9 route: ## 設置報警分發策略
10 group_by: ['alertname']
11 group_wait: 5s
12 group_interval: 5s
13 repeat_interval: 5m ## 生產環境 20m ~ 30m
14 receiver: 'email'
15 receivers: ## 配置告警信息接收者信息
16 - name: 'email'
17 email_configs:
18 - to: 'youraddr@qq.com'
19 send_resolved: true
20 inhibit_rules: ## 抑制規則配置
21 - source_match:
22 severity: 'critical'
23 target_match:
24 severity: 'warning'
25 equal: ['alertname', 'dev', 'instance']
4. 啟動 node-exporter
## 映射目標服務器響應的狀態文件,用於收集服務器 CPU、內存、網絡等指標
$ docker run --name node-exporter -d -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" --net="host" prom/node-exporter
## 啟動完成后,瀏覽器訪問:http://<IP>:9100/metrics 打開 Graph 搜索欄輸入 node 會出現提示選項,選中任意一項便可查看該項的數據(列表或圖形)
5. 啟動 prometheus
$ docker run --name prometheus -d -p 9090:9090 \
-v /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ ## 掛載 prometheus.yml 靜態配置文件
-v /home/prometheus/groups/:/usr/local/prometheus/groups/ \ ## 掛載動態配置文件
-v /home/prometheus/rules/:/usr/local/prometheus/rules/ \ ## 掛載 Alertmanager 告警規則文件
prom/prometheus:latest
## 啟動完成后,瀏覽器訪問:http://<ip>:9090 即可打開默認的 UI 頁面;
## 在 Status 下的 Targets 可以看到添加在 prometheus.yml 和 node.json 中的項目;
## 在 Status 下的 Rules 可以看到添加在 node-up.rules 中的規則;
6. 啟動 alertmanager
## 將本地配置文件 /home/prometheus/alertmanager.yml 掛載到容器內指定位置(/etc/alertmanager/alertmanager.yml)
$ docker run -d --name alertmanager -p 9093:9093 -v /home/prometheus/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
7. 啟動 pushgateway
$ docker run --name pushgateway -d -p 9091:9091 prom/pushgateway
8. EMQ 監控數據推送到 pushgateway
## /home/prometheus/prometheus.yml 文件中添加“EMQ X Pushgateway 監控”
## EMQ X Dashboard 中啟動 emqx_statsd 插件
## 在 Prometheus 主頁中查看 EMQ 相關監控數據
9. 配置 Grafana 顯示
$ docker run -d --name grafana -p 3000:3000 grafana/grafana
## 啟動成功后,瀏覽器訪問 http://<ip>:3000 打開 Dashboard 控制台。
(1)添加源:
## Configuration -> DATA SOURCES -> Prometheus
## HTTP -> URL -> http://<ip>:9090
(2)導入自帶模板:
## Data Sources/Prometheus -> Dashboards -> 導入: Prometheus Stats
Prometheus 2.0 Stats
Grafana metrics (需要在 prometheus.yml 中添加相應 job)
(3)導入 Grafana 監控系統指標模板:
## Grafana 官網下載:https://grafana.com/grafana/dashboards (搜索 1 Node Exporter)
## “+” -> import -> Upload JSON file 導入下載到的 JSON 文件即可
參考鏈接-Prometheus 監控報警系統 AlertManager 之郵件告警
參考鏈接-基於 Prometheus、Grafana 的物聯網 MQTT 服務器可視化監控
參考鏈接-Prometheus+Grafana 介紹及使用