前言
Prometheus 是一個(gè)開放性的監(jiān)控解決方案,通過各種 Exporter 采集當(dāng)前主機(jī)/服務(wù)的數(shù)據(jù),和 Grafana 相結(jié)合可以實(shí)現(xiàn)強(qiáng)大的監(jiān)控和可視化功能
本篇將分享使用 docker compose 構(gòu)建 Prometheus+Grafana,并監(jiān)控之前文章所搭建的主機(jī)&服務(wù),分享日常使用的一些使用經(jīng)驗(yàn)
文章較長,已安裝可略過,推薦先看第三節(jié) 常用服務(wù)的 Prometheus+Grafana 配置
特點(diǎn)
- 成熟穩(wěn)定且強(qiáng)大
- 豐富的插件,大部分情況都能滿足
- 輕量級(jí)部署,資源占用少
使用情況
- 主要用來作為監(jiān)控面板使用
- 使用 Grafana 監(jiān)控:linux ,windows,redis,clickhouse,mongodb,mysql, RabbitMQ,站點(diǎn)情況
- 使用 Grafana 設(shè)置告警當(dāng)服務(wù)出現(xiàn)無法訪問時(shí)通知到企業(yè)微信群
- Grafana 版本問題,可能存在面板失效,需要做一些調(diào)整
使用 docker compose 安裝 Prometheus
配置文件說明
-
prometheus 版本:v2.47.2
-
指定運(yùn)行參數(shù):
- 啟動(dòng)配置文件路徑:
'--config.file=/etc/prometheus/prometheus.yml'
- 數(shù)據(jù)存儲(chǔ)目錄:
'--storage.tsdb.path=/prometheus'
- 數(shù)據(jù)保留時(shí)間:
'--storage.tsdb.retention.time=30d'
- 允許使用
curl -X POST ``http://localhost:9090/-/reload
重載其配置:'--web.enable-lifecycle'
- 指定 web 控制臺(tái)配置,添加了賬號(hào)密碼:
'--web.config.file=/etc/prometheus/web-config.yml'
- 啟動(dòng)配置文件路徑:
-
開放端口:9090
-
指定網(wǎng)絡(luò):devopsnetwork (
docker network create devopsnetwork
) -
掛載配置文件及數(shù)據(jù)目錄,需要對(duì)數(shù)據(jù)目錄進(jìn)行創(chuàng)建及賦予權(quán)限:
mkdir prometheus_data && chown 65534 ./prometheus_data
關(guān)于持久化權(quán)限的討論 -
用到了三個(gè)配置文件:compose.yml prometheus.yml web-config.yml
-
docker compose 文件:compose.yml
version: '3.1'
services:
prometheus:
restart: always
container_name: prometheus
image: prom/prometheus:v2.47.2
command:
# 配置文件
- '--config.file=/etc/prometheus/prometheus.yml'
# 指定web面板賬號(hào)密碼訪問
- '--web.config.file=/etc/prometheus/web-config.yml'
# 數(shù)據(jù)目錄
- '--storage.tsdb.path=/prometheus'
# 數(shù)據(jù)保留時(shí)間
- '--storage.tsdb.retention.time=30d'
# 運(yùn)行使用 curl -X POST http://localhost:9090/-/reload 重載其配置
- '--web.enable-lifecycle'
volumes:
# 需要權(quán)限 mkdir prometheus_data && chown 65534 ./prometheus_data
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus_data:/prometheus
- ./web-config.yml:/etc/prometheus/web-config.yml
ports:
- 9090:9090
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
-
prometheus 配置文件示例:prometheus.yml,
- 指定了 prometheus ,并設(shè)置了訪問密碼 root devops666
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
# 啟用了賬號(hào)密碼 web-config.yml basic_auth_users 需要配置
basic_auth:
username: root
password: devops666
-
web 控制臺(tái)配置:web-config.yml
- 指定賬號(hào)密碼 root devops666
basic_auth_users:
root: $2a$10$c6OOt9f6LuhiabPyW0nkNOprb1ndQ/HHSfqjB/exe7yh5FaYUqvBy
- 啟動(dòng):
docker compose up -d
Prometheus 指定賬號(hào)密碼訪問
- 設(shè)置 https 或基礎(chǔ)密碼驗(yàn)證文檔
- 要啟用 web 面板賬號(hào)密碼訪問,指定 web 訪問配置文件
'--web.config.file=/etc/prometheus/web-config.yml'
- 映射 web-config.yml 指定賬號(hào)密碼 root devops666 ,Prometheus 密碼需要使用 htpasswd 生成 bcrypt 密碼 在線生成工具
basic_auth_users:
root: $2a$10$kmkC.lHR3Kwl19DE9l1KRerMDinEejEbNmJigrJZYAGkgzbVBUpa2
- 如果需要使用 Prometheus 監(jiān)聽 Prometheus ,并且 Prometheus 啟用了身份驗(yàn)證,需要在配置出增加 basic_auth 配置節(jié)
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
# 啟用了賬號(hào)密碼 web-config.yml basic_auth_users 需要配置
basic_auth:
username: root
password: devops666
-
掉坑里去了,如果一開始 basic_auth 沒有配置對(duì),重載配置是無效的,需要重啟
重載配置
修改了配置文件后,可以使用 api 接口重載配置,如果啟用了賬號(hào)密碼可以使用 -u 參數(shù)指定(basic_auth 修改重載配置無效),沒有就不需要加 -u 參數(shù)
curl -X POST http://localhost:9090/-/reload
或
curl -X POST -u root:devops666 http://localhost:9090/-/reload
添加 nginx 配置
還不會(huì)在局域網(wǎng)申請(qǐng) ssl 及配置的可以參考之前的文章 前后端都用得上的 Nginx 日常使用經(jīng)驗(yàn)
server {
listen 80;
listen 443 ssl;
server_name prometheus.devops.test.com; # 自行修改成你的域名
ssl_certificate /certs/prometheus.devops.test.com/server.crt;
ssl_certificate_key /certs/prometheus.devops.test.com/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://prometheus:9090;
proxy_http_version 1.1;
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
安裝成功
根據(jù)上面的配置,完成了 Prometheus 的搭建,監(jiān)聽本身 Prometheus 的情況
通過https://prometheus.devops.test.com/
使用賬號(hào)密碼 root devops666 登陸后即可
使用 docker compose 安裝 Grafana
Grafana 是一個(gè)開源的數(shù)據(jù)可視化和監(jiān)控平臺(tái),它提供了豐富的圖表和面板,用于展示各種指標(biāo)和數(shù)據(jù)。提到 Prometheus,Grafana 自然是不不能落下,基于官方和社區(qū),可以很快的制作出監(jiān)控可視化面板,助力日常運(yùn)維檢測
配置文件說明
- grafana 版本:v10.2.0
- 指定賬號(hào)密碼: root devops666
- 端口映射:3000
- 掛載數(shù)據(jù)目錄 ./grafana_data, 需要賦予權(quán)限:
mkdir -p grafana_data && chown -R 472:472 ./grafana_data
- 指定網(wǎng)絡(luò)為 devopsnetwork(
docker network create devopsnetwork
) - docker compose 文件:compose.yml ,安裝 v10.2.0 替換版本號(hào)即可
version: '3.1'
services:
grafana:
restart: always
container_name: grafana
image: grafana/grafana:10.2.0
ports:
- "3000:3000"
volumes:
- ./grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=root
- GF_SECURITY_ADMIN_PASSWORD=devops666
- GF_USERS_ALLOW_SIGN_UP=false
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
- 啟動(dòng):
docker compose up -d
添加 nginx 配置
server {
listen 80;
listen 443 ssl;
server_name grafana.devops.test.com; # 自行修改成你的域名
ssl_certificate /certs/grafana.devops.test.com/server.crt;
ssl_certificate_key /certs/grafana.devops.test.com/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://grafana:3000;
proxy_http_version 1.1;
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
安裝成功
通過https://grafana.devops.test.com/
使用賬號(hào)密碼 root devops666 登陸后即可
制作監(jiān)控面板步驟:
- 指定一個(gè)數(shù)據(jù)源,數(shù)據(jù)源采集各組件的信息,提供給 Grafana 進(jìn)行顯示
- 可以從官方/社區(qū)/自行制作面板
添加 Prometheus 數(shù)據(jù)源
! ! ! 數(shù)據(jù)源最好是用 IP+端口,避免容器內(nèi)無法解析 test.com 域名
從 Grafana 導(dǎo)入儀表板
- 從官網(wǎng) 獲取一個(gè)監(jiān)控 Prometheus 的面板 Prometheus 2.0 Overview Id:3662
- 選擇數(shù)據(jù)源確認(rèn)導(dǎo)入
- 查看面板,可以看到面板中有許多數(shù)據(jù)已經(jīng)無法正常顯示,這個(gè)在后續(xù)的一些面板中也經(jīng)常會(huì)遇到,之前以為是 Grafana 不對(duì),但我創(chuàng)建了一個(gè)依賴版本 4.5.0-beta1 測試發(fā)現(xiàn)依舊不行,應(yīng)該還是是因?yàn)楸O(jiān)控?cái)?shù)據(jù)的問題
Grafana v10.2.0 常用操作
之前使用的 v6.7.2,當(dāng)前已經(jīng)是 v10.2.0 了,故還是選擇將 grafana 升級(jí)到 v10,升級(jí)需要重新創(chuàng)建數(shù)據(jù)目錄
設(shè)置中文
在寫完文章發(fā)現(xiàn)原來已經(jīng)支持中文了,補(bǔ)上~
導(dǎo)入面板
- 新建面板的入口在右上方
添加數(shù)據(jù)源
- 測試了常用的幾個(gè)數(shù)據(jù)源: Prometheus ClickHouse Redis
- MongoDB 需要企業(yè)版,開源版可以使用 Prometheus 監(jiān)控
- 添加了數(shù)據(jù)源后有推薦的儀表盤可以直接啟用
添加插件
- 之前 v6.7.2 無法在線安裝(墻),v10 可以在線安裝了,方便許多
- 準(zhǔn)備安裝插件時(shí)記得切換 State 到 All
常用服務(wù)的 Prometheus+Grafana 配置
常用的一些組件可以在官方下載頁中去尋找,使用 Docker 可以去 DockerHub 去找對(duì)應(yīng)的鏡像即可
- Grafana 版本:已升級(jí)到 v10.2.0
- Prometheus 版本:v2.47.2
Linux 監(jiān)控配置
-
Prometheus 組件:node_exporter v1.7.0
-
Grafana 面板推薦:
- Node Exporter Dashboard 220417 通用 Job 分組版 ID: 16098
- Linux Hosts Metrics | Base ID: 10180
-
指定映射端口:9100
-
docker 運(yùn)行 node_exporter
docker run -d \
-p 9100:9100 \
-v "/:/host:ro,rslave" \
--name node_exporter \
--restart always \
quay.io/prometheus/node-exporter:v1.7.0 \
--path.rootfs=/host
- 運(yùn)行成功并將其配置到 prometheus.yml
#global:
# xxx
#...
scrape_configs:
- job_name: 'linux'
# 每隔5秒從該作業(yè)中抓取目標(biāo)
scrape_interval: 5s
static_configs:
- targets: ['192.168.123.214:9100','192.168.123.216:9100','192.168.123.219:9100','192.168.123.222:9100']
- 重載配置后配置生效(
curl -X POST -u root:devops666 ``http://localhost:9090/-/reload
)
- 可以使用前面安裝的 JumpServer 工作臺(tái)-作業(yè)中心-快捷命令 直接遠(yuǎn)程在四臺(tái) Linux 主機(jī)運(yùn)行
- v6 導(dǎo)入 Grafana 面板 10180
- v10 導(dǎo)入面板 16098
Windows 監(jiān)控配置
-
Prometheus 組件:windows_exporter v0.24
-
Grafana 面板推薦:
- Windows Exporter Dashboard 20230531-StarsL.cn ID: 10467
- Windows Exporter ID: 12566
-
從 Github Release 下載安裝程序即可:從 release 頁下載 v0.24
-
運(yùn)行使用本機(jī) IP+9182 端口訪問即可:http://192.168.123.201:9182/
- 運(yùn)行成功并將其配置到 prometheus.yml
#global:
# xxx
#...
scrape_configs:
- job_name: 'win-node'
# 每隔5秒從該作業(yè)中抓取目標(biāo)
scrape_interval: 5s
static_configs:
- targets: ['192.168.123.201:9182']
- 重載配置后配置生效(
curl -X POST -u root:devops666 ``http://localhost:9090/-/reload
)
- v10 導(dǎo)入 Grafana 面板 12566
可以修改時(shí)間范圍查看監(jiān)控情況
- 導(dǎo)入 10467
Nginx 監(jiān)控配置
-
Prometheus 組件:nginx-prometheus-exporter v0.11
-
Grafana 面板推薦:
- NGINX exporter ID: 12708
- Nginx 日志支持?jǐn)U展,需要插件 ID:12268
-
首先需要修改 nginx 配置啟用 stub_status ,默認(rèn)是建議新開一個(gè)端口來,我這里是局域網(wǎng)所以直接使用 80 端口配置:通過 192.168.123.214:80/basic_status 即可訪問到 nginx 狀態(tài)
server {
listen 80;
#...其他配置
location = /stub_status {
stub_status;
}
}
- 指定映射端口:9113
- docker 運(yùn)行 nginx-prometheus-exporter
docker run -d -p 9113:9113 \
--name nginx_exporter \
--restart always \
nginx/nginx-prometheus-exporter:0.11 --nginx.scrape-uri=http://192.168.123.214:80/stub_status
- 運(yùn)行使用 IP+9113 端口訪問即可:http://192.168.123.214:9113/
- 將其配置到 prometheus.yml
- job_name: 'nginx'
# 每隔5秒從該作業(yè)中抓取目標(biāo)
scrape_interval: 5s
static_configs:
- targets: ['192.168.123.214:9113']
重載配置后生效: curl -X POST -u root:devops666 ``http://localhost:9090/-/reload
- 導(dǎo)入 Grafana 面板:12708
MySQL 監(jiān)控配置
-
Prometheus 組件:mysqld_exporter v0.15.0
-
Grafana 面板推薦:
- MYSQL 監(jiān)控指標(biāo) ID:11329
- MySQL Overview ID:7362
- MySQL Exporter Quickstart and Dashboard ID: 14057
-
mysql 監(jiān)控賬號(hào)創(chuàng)建
- 監(jiān)控賬號(hào)密碼: exporter devops666
- 限制最大連接數(shù):MAX_USER_CONNECTIONS :3
- 并授權(quán)查詢權(quán)限及外部訪問權(quán)限,允許的 Host 不能用 localhost,容器內(nèi)部訪問時(shí)會(huì)帶上容器 IP 無法連接
CREATE USER 'exporter'@'%' IDENTIFIED BY 'devops666' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
可以使用之前搭建的 JumpServer 進(jìn)行執(zhí)行
-
指定映射端口:9104
-
docker 運(yùn)行 mysqld_exporter
- 建議指定和 mysql 服務(wù)同一網(wǎng)絡(luò),使用 mysql 的服務(wù)名加端口訪問,不在同一網(wǎng)絡(luò)的適合賬號(hào)授權(quán)訪問時(shí)需要將 localhost 修改為%,dockerhub 文檔沒有更新,以 GitHub 文檔為主
- 主機(jī)名和端口:--mysqld.address mysql:3306 (一個(gè)網(wǎng)絡(luò)就用服務(wù)名,或者使用 ip:port)
- 賬號(hào):--mysqld.username exporter
- 密碼:-e MYSQLD_EXPORTER_PASSWORD=devops666
- 指定網(wǎng)絡(luò):--network devopsnetwork(和 mysql 一個(gè)網(wǎng)絡(luò),可以不需要)
docker run -d \
-p 9104:9104 \
-e MYSQLD_EXPORTER_PASSWORD=devops666 \
--name mysql_exporter \
--restart always \
prom/mysqld-exporter:v0.15.0 \
--mysqld.address 192.168.123.214:3306 \
--mysqld.username exporter
- 運(yùn)行使用 IP+9104 端口訪問即可:http://192.168.123.214:9104/
- 將其配置到 prometheus.yml
- job_name: mysql
static_configs:
- targets:
- 192.168.123.214:3306
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
# The mysqld_exporter host:port
replacement: 192.168.123.214:9104
重載配置后生效 curl -X POST -u root:devops666 ``http://localhost:9090/-/reload
- 導(dǎo)入 Grafana 面板 11329
MongoDB 監(jiān)控配置
-
Prometheus 組件:mongodb_exporter v0.20
-
Grafana 面板推薦:
- MongoDB ID:14997 部分圖表無效
- MongoDB 數(shù)據(jù)源插件需要企業(yè)版才能使用
-
docker 運(yùn)行 mongodb_exporter 監(jiān)聽單機(jī)實(shí)例
#docker stop mongodb_exporter && docker rm mongodb_exporter
docker run -d -p 9216:9216 \
--name mongodb_exporter \
--restart always \
percona/mongodb_exporter:0.20 --compatible-mode --mongodb.uri=mongodb://root:devops666@192.168.123.214:27017
- prometheus.yml 配置
- job_name: mongodb
static_configs:
- targets: ['192.168.123.214:9216']
labels:
instance: mongodb
- 導(dǎo)入面板 14997 目前只測試了單實(shí)例的監(jiān)控,一些數(shù)據(jù)可以根據(jù)需要進(jìn)行修改
ClickHouse 監(jiān)控配置
-
Prometheus 配置:clickhouse 9363 端口、9000 端口
-
9363:ClickHouse 的 Prometheus 默認(rèn)指標(biāo)端口
-
9000:Native Protocol 端口, ClickHouse TCP 協(xié)議,用于分布式查詢的服務(wù)器間通信
-
Grafana 面板推薦:
- ClickHouse 儀表盤 ID:14192
使用 Prometheus 數(shù)據(jù)源監(jiān)控
- prometheus.yml 配置
- job_name: clickhouse
static_configs:
- targets: ['192.168.123.214:9363']
labels:
instance: clickhouse
- 參考之前安裝 clickhouse 教程,增加啟用 9000 端口,并在 grafana 中安裝 clickhouse 數(shù)據(jù)源插件
version: '3'
services:
clickhouse-server:
container_name: db_clickhouse_20_6
image: yandex/clickhouse-server:20.6.8.5
restart: always
ulimits:
nofile:
soft: 262144
hard: 262144
environment:
- TZ=Asia/Shanghai
- ports=8123,9363,9000
ports:
- 8123:8123
- 9363:9363
- 9000:9000
volumes:
- ./data:/var/lib/clickhouse
- ./logs:/var/log/clickhouse-server
# 指定配置文件
- ./config:/etc/clickhouse-server
使用數(shù)據(jù)源插件監(jiān)控
- Grafana 啟用數(shù)據(jù)源 clickhouse 插件
- 配置數(shù)據(jù)源 需要開啟 9000 端口
- 啟用默認(rèn)儀表盤
- 預(yù)覽效果
Redis 監(jiān)控配置
-
Prometheus 組件:redis_exporter v1.55.0
-
配置參考
-
端口:單機(jī) 9121:9121,集群 9122:9121
-
Grafana 面板推薦:
- Redis Exporter Quickstart and Dashboard: ID 14091
- Redis Dashboard for Prometheus Redis Exporter: ID 11835
- Redis 數(shù)據(jù)源插件面板:ID 12776
redis_exporter 單機(jī)監(jiān)控
- docker 運(yùn)行 oliver006/redis_exporter 指定端口 9121
- 通過 --redis.addr --redis.password 來指定地址和密碼
#docker stop redis_exporter && docker rm redis_exporter &&
docker run -d -p 9121:9121 \
--name redis_exporter \
--restart always \
oliver006/redis_exporter:v1.55.0 \
--redis.addr redis://192.168.123.214:6379 \
--redis.password devops666
- prometheus.yml 配置
- job_name: redis_exporter
static_configs:
- targets: ['192.168.123.214:9121']
labels:
instance: redis-node
- 導(dǎo)入面板 11835 監(jiān)控單機(jī)
- 導(dǎo)入面板 14091 監(jiān)控單機(jī)
redis_exporter 集群監(jiān)控
- docker 運(yùn)行 oliver006/redis_exporter 指定端口 9122
docker run -d -p 9122:9121 \
--name redis_exporter_targets \
--restart always \
oliver006/redis_exporter:v1.55.0
- prometheus.yml 配置
- job_name: redis_exporter_targets
static_configs:
- targets:
- redis://192.168.123.216:6380
- redis://192.168.123.219:6380
- redis://192.168.123.222:6380
- redis://192.168.123.216:6381
- redis://192.168.123.219:6381
- redis://192.168.123.222:6381
metrics_path: /scrape
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.123.214:9122
- 使用面板 11835 監(jiān)控集群節(jié)點(diǎn)
- 使用面板 14091 監(jiān)控集群節(jié)點(diǎn)
使用數(shù)據(jù)源插件監(jiān)控 Redis 單機(jī)/集群
- 安裝 Redis 數(shù)據(jù)源插件
- 配置 Redis 單機(jī)數(shù)據(jù)源 Redis-Node
- 配置 Redis 集群數(shù)據(jù)源 Redis-Cluster
- 導(dǎo)入面板 12776 指定數(shù)據(jù)源
- 集群監(jiān)控預(yù)覽
RabbitMQ 監(jiān)控配置
-
Grafana 面板推薦:
- rabbitmq-overview ID:10991
-
RabbitMQ 內(nèi)置 Prometheus 支持 文檔
-
需要使用時(shí)映射 15692:15692 端口
-
并確保插件已啟用:
docker exec -it rabbitmq_3_12 /bin/bash -c "rabbitmq-plugins enable rabbitmq_prometheus"
- Prometheus 配置
- job_name: rabbitmq
static_configs:
- targets: ['192.168.123.214:15692']
labels:
instance: rabbitmq
- 導(dǎo)入 Grafana 面板 10991
站點(diǎn)監(jiān)控配置
-
Prometheus 組件:blackbox_exporter v0.24.0
-
Grafana 面板推薦:
- Blackbox Exporter ID: 13659
- Decentralized Blackbox ID: 9719
- Blackbox Exporter Dashboard ID: 9965
-
使用 docker compose up -d 運(yùn)行 blackbox-exporter ,需要映射配置 blackbox.yml
-
掛載了模塊配置文件 blackbox.yml 和局域網(wǎng)的證書 myCA.pem
version: '3.1'
services:
blackbox_exporter:
restart: always
container_name: blackbox_exporter
image: prom/blackbox-exporter:v0.24.0
command:
# 配置文件
- '--config.file=/config/blackbox.yml'
volumes:
# blackbox.yml myCA.pem
- ./config:/config
ports:
- 9115:9115
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
- blackbox.yml 配置,添加了 http_custom_ca_devops 將局域網(wǎng)中的證書映射進(jìn)去了
modules:
http_2xx:
prober: http
http:
preferred_ip_protocol: "ip4"
http_post_2xx:
prober: http
http:
method: POST
tcp_connect:
prober: tcp
pop3s_banner:
prober: tcp
tcp:
query_response:
- expect: "^+OK"
tls: true
tls_config:
insecure_skip_verify: false
ca_file:
grpc:
prober: grpc
grpc:
tls: true
preferred_ip_protocol: "ip4"
grpc_plain:
prober: grpc
grpc:
tls: false
service: "service1"
ssh_banner:
prober: tcp
tcp:
query_response:
- expect: "^SSH-2.0-"
- send: "SSH-2.0-blackbox-ssh-check"
irc_banner:
prober: tcp
tcp:
query_response:
- send: "NICK prober"
- send: "USER prober prober prober :prober"
- expect: "PING :([^ ]+)"
send: "PONG ${1}"
- expect: "^:[^ ]+ 001"
icmp:
prober: icmp
icmp_ttl5:
prober: icmp
timeout: 5s
icmp:
ttl: 5
http_custom_ca_devops:
prober: http
http:
method: GET
tls_config:
ca_file: /config/myCA.pem
- prometheus.yml 配置
- job_name: blackbox_devops
metrics_path: /probe
params:
module: [ http_custom_ca_devops ] # Look for a HTTP 200 response.
dns_sd_configs:
- names:
- nginx.devops.test.com
- apollo.devops.test.com
- rabbitmq.devops.test.com
- dns.devops.test.com
- nexus.devops.test.com
- jumpserver.devops.test.com
- grafana.devops.test.com
- prometheus.devops.test.com
type: A
port: 443
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
replacement: https://192.168.123.214:443/ # Make probe URL be like https://1.2.3.4:443/
- source_labels: [__meta_dns_name]
target_label: instance
- target_label: __address__
replacement: 192.168.123.214:9115 # The blackbox exporter's real hostname:port.
- source_labels: [__meta_dns_name]
target_label: __param_hostname # Make domain name become 'Host' header for probe requests
- source_labels: [__meta_dns_name]
target_label: vhost # and store it in 'vhost' label
#匹配apollo,需要訪問/health檢查狀態(tài)
- source_labels: [__param_hostname]
regex: 'apollo.*'
target_label: __param_target
replacement: https://192.168.123.214:443/health
#匹配prometheus 開啟了basic_auth 所以可以使用下面這種方式進(jìn)行驗(yàn)證,問的gpt,還真行
- source_labels: [__param_hostname]
regex: 'prometheus.*'
target_label: __param_target
replacement: https://root:devops666@192.168.123.214:443
- 重載 prometheus 配置生效
- 導(dǎo)入面板 13659 監(jiān)控效果
- 導(dǎo)入面板 9719 監(jiān)控效果
- 導(dǎo)入面板 9965 監(jiān)控效果
Grafana 監(jiān)控告警設(shè)置
通過設(shè)置 Alert rules(預(yù)警規(guī)則) ,匹配到有指標(biāo)符合規(guī)則時(shí),就會(huì)根據(jù) Notification policies(通知策略) 進(jìn)行消息發(fā)送,發(fā)送的內(nèi)容和模板在 Contact points(通知方式) 設(shè)置
下面完成一個(gè)實(shí)際的使用場景:檢測 RabbitMQ 面板狀態(tài),服務(wù)不可用時(shí)進(jìn)行預(yù)警,通過企業(yè)微信機(jī)器人進(jìn)行群通知
設(shè)置預(yù)警規(guī)則
- 添加規(guī)則名稱:RabbitMQ 監(jiān)控
- 選擇數(shù)據(jù)源:Prometheus
- 設(shè)置指標(biāo)條件:內(nèi)存使用字節(jié) erlang_mnesia_memory_usage_bytes 并指定 job 是 rabbitmq
- 設(shè)置預(yù)警條件:內(nèi)存值小于 1(無效)時(shí)進(jìn)行通知
- 設(shè)置檢查規(guī)則,30s 檢查一次,30s 等待期,立刻通知
- Pending period 等待期:如果警報(bào)條件不再滿足,警報(bào)規(guī)則將會(huì)恢復(fù)到正常狀態(tài),而不會(huì)觸發(fā)警報(bào)
- 這個(gè)和默認(rèn)的通知策略還有關(guān)系,需要結(jié)合使用,默認(rèn)是 30s,5 分鐘等待期,4 小時(shí)內(nèi)不重復(fù)發(fā)送可根據(jù)需要修改
- 設(shè)置提醒信息及服務(wù)地址
設(shè)置通知策略
可以通過修改重復(fù)間隔,重新發(fā)送通知
設(shè)置告警模板
Grafana 使用 Go 模板語言來創(chuàng)建通知消息,可根據(jù)文檔自行編寫,另外一個(gè) aws 的中文文檔可以參考
- 結(jié)合文檔寫的一個(gè)通知模板
{{ define "DevOpsTemplate" -}}
{{- range .Alerts -}}
{{- range .Annotations.SortedPairs -}}
{{if eq .Name "summary" }}
**{{ "預(yù)警消息" }}**:{{ .Value }}
{{- end -}}
{{ end }}
{{- range .Annotations.SortedPairs -}}
{{if eq .Name "runbook_url" }}
**{{ "服務(wù)地址" }}**:{{ .Value }}
{{- end -}}
{{ end }}
**{{"預(yù)警分組"}}**:{{ .Labels.grafana_folder }}
**{{"開始時(shí)間"}}**:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05"}}
**{{"預(yù)警參數(shù)"}}**:
{{ range .Labels.SortedPairs -}}
{{ .Name }}:{{ .Value }}
{{ end }}
{{- range .Annotations.SortedPairs -}}
{{- if and (ne .Name "summary") (ne .Name "runbook_url") -}}
{{ .Name }}:{{ .Value }}
{{ end }}
{{ end }}
{{- end -}}
{{- end -}}
設(shè)置通知方式
支持多種通知,根據(jù)需要配置,這里以企業(yè)微信機(jī)器人為例
需要通過告警快速定位問題,實(shí)際應(yīng)用中肯定是需要將告警實(shí)例及其信息一并通知,所以還需要結(jié)合告警模板和規(guī)則進(jìn)行消息的發(fā)送。使用模板語法指定前面設(shè)置的模板
設(shè)置完成后,當(dāng)預(yù)警規(guī)則設(shè)置頁面出現(xiàn)異常提示時(shí),就會(huì)進(jìn)行提示了
踩坑記錄
-
安裝官方文檔運(yùn)行后,提示無權(quán)限,需要賦予掛載目錄權(quán)限:
chown 65534 ./prometheus_data
-
權(quán)限在之前的使用中使用 777 權(quán)限,能夠解決,但是很明顯不是最佳方案,然后好好找了下,最后發(fā)現(xiàn)這個(gè)問題很久就有人提出 pr,只是一直沒有被合并,大概下個(gè)版本就可以了, 關(guān)于持久化權(quán)限的討論
-
basic_auth 修改后,重載配置是無效的,需要重新啟動(dòng)后才生效
-
redis 使用 redis_exporter,監(jiān)控多個(gè)如果有密碼,沒有密碼,密碼不一樣的實(shí)例需要分開運(yùn)行配置
-
mongodb 的監(jiān)控始終不是很完美
-
站點(diǎn)監(jiān)控的證書驗(yàn)證和密碼驗(yàn)證反反復(fù)復(fù)嘗試了很久,以下為主要踩坑的地方
- prometheus.yml 配置 blackbox job 的 params module 只能有一個(gè),多個(gè)只會(huì)第一個(gè)生效
- blackbox 配置的證書可以是 pem,無效轉(zhuǎn)換成 crt 格式,配置:ca_file: /config/myCA.pem
- basic_auth 配置不需要再配置 job,可以直接使用特殊的 url 格式:
https://root:devops666@192.168.123.214:443
-
Grafana 服務(wù)重啟后,nginx 代理域名訪問一直 502,IP 可以訪問,重啟 nginx 后就可以訪問了
-
Grafana 的通知模板語法,可參考文檔
# 1.定義模板
{{ define "模板名稱" -}}
/**/
{{ end }}
# 2.循環(huán)預(yù)警消息
{{ range .Alerts }}
/**/
{{ end }}
# 3.打印加粗文字
**{{ "預(yù)警消息" }}**
# 4.刪除空格和換行符
{{ range .Alerts -}}
{{ range .Labels.SortedPairs -}}
{{ .Name }} = {{ .Value }}
{{ end }}
{{ end }}
# 5. 循環(huán)附加信息
{{- range .Annotations.SortedPairs -}}
{{ end}}
# 5. if判斷
{{if eq .Name "runbook_url" }}
# 6. 時(shí)區(qū)問題,+8設(shè)置
**{{"開始時(shí)間"}}**:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05"}}
相關(guān)文檔
- Prometheus Github
- Prometheus 官方文檔
- Prometheus Bcrypt 密碼生成
- Prometheus 配置文件參考示例
- Prometheus 數(shù)據(jù)持久化權(quán)限的討論
- Grafana Github
- Grafana 面板檢索
- Grafana 通知模板中文文檔
- Prometheus+Grafana+Alertmanager 實(shí)現(xiàn)告警推送教程
- Grafana 新手教程-實(shí)現(xiàn)儀表盤創(chuàng)建和告警推送****
后語
研究了差不多大半個(gè)月,從常用中間件的監(jiān)控到設(shè)置預(yù)警,花費(fèi)了很大的功夫,也掉了不少的頭發(fā)。
這篇文章寫完,個(gè)人感覺 Prometheus+Grafana 這套方案算是入門了,滿足日常使用肯定是沒問題的。文章來源:http://www.zghlxwxcb.cn/news/detail-749156.html
走過不要錯(cuò)過,歡迎留言交流。文章來源地址http://www.zghlxwxcb.cn/news/detail-749156.html
到了這里,關(guān)于Prometheus+Grafana 監(jiān)控平臺(tái)實(shí)踐-搭建&常用服務(wù)監(jiān)控&告警的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!