Prometheus+Grafana 监控平台实践-搭建&常用服务监控&告警
前言
Prometheus 是一个开放性的监控解决方案,通过各种 Exporter 采集当前主机/服务的数据,和 Grafana 相结合可以实现强大的监控和可视化功能
本篇将分享使用 docker compose 构建 Prometheus+Grafana,并监控之前文章所搭建的主机&服务,分享日常使用的一些使用经验
文章较长,已安装可略过,推荐先看第三节 常用服务的 Prometheus+Grafana 配置
特点
- 成熟稳定且强大
- 丰富的插件,大部分情况都能满足
- 轻量级部署,资源占用少
使用情况
- 主要用来作为监控面板使用
- 使用 Grafana 监控:linux ,windows,redis,clickhouse,mongodb,mysql, RabbitMQ,站点情况
- 使用 Grafana 设置告警当服务出现无法访问时通知到企业微信群
- Grafana 版本问题,可能存在面板失效,需要做一些调整
使用 docker compose 安装 Prometheus
配置文件说明
prometheus 版本:v2.47.2
指定运行参数:
- 启动配置文件路径:
'--config.file=/etc/prometheus/prometheus.yml' - 数据存储目录:
'--storage.tsdb.path=/prometheus' - 数据保留时间:
'--storage.tsdb.retention.time=30d' - 允许使用
curl -X POST ``http://localhost:9090/-/reload重载其配置:'--web.enable-lifecycle' - 指定 web 控制台配置,添加了账号密码:
'--web.config.file=/etc/prometheus/web-config.yml'
- 启动配置文件路径:
开放端口:9090
指定网络:devopsnetwork (
docker network create devopsnetwork)挂载配置文件及数据目录,需要对数据目录进行创建及赋予权限:
mkdir prometheus_data && chown 65534 ./prometheus_data关于持久化权限的讨论用到了三个配置文件: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面板账号密码访问
- '--web.config.file=/etc/prometheus/web-config.yml'
# 数据目录
- '--storage.tsdb.path=/prometheus'
# 数据保留时间
- '--storage.tsdb.retention.time=30d'
# 运行使用 curl -X POST http://localhost:9090/-/reload 重载其配置
- '--web.enable-lifecycle'
volumes:
# 需要权限 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 ,并设置了访问密码 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']
# 启用了账号密码 web-config.yml basic_auth_users 需要配置
basic_auth:
username: root
password: devops666
web 控制台配置:web-config.yml
- 指定账号密码 root devops666
basic_auth_users:
root: $2a$10$c6OOt9f6LuhiabPyW0nkNOprb1ndQ/HHSfqjB/exe7yh5FaYUqvBy
- 启动:
docker compose up -d
Prometheus 指定账号密码访问
- 设置 https 或基础密码验证文档
- 要启用 web 面板账号密码访问,指定 web 访问配置文件
'--web.config.file=/etc/prometheus/web-config.yml' - 映射 web-config.yml 指定账号密码 root devops666 ,Prometheus 密码需要使用 htpasswd 生成 bcrypt 密码 在线生成工具
basic_auth_users:
root: $2a$10$kmkC.lHR3Kwl19DE9l1KRerMDinEejEbNmJigrJZYAGkgzbVBUpa2
- 如果需要使用 Prometheus 监听 Prometheus ,并且 Prometheus 启用了身份验证,需要在配置出增加 basic_auth 配置节
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
# 启用了账号密码 web-config.yml basic_auth_users 需要配置
basic_auth:
username: root
password: devops666
掉坑里去了,如果一开始 basic_auth 没有配置对,重载配置是无效的,需要重启
重载配置
修改了配置文件后,可以使用 api 接口重载配置,如果启用了账号密码可以使用 -u 参数指定(basic_auth 修改重载配置无效),没有就不需要加 -u 参数
curl -X POST http://localhost:9090/-/reload
或
curl -X POST -u root:devops666 http://localhost:9090/-/reload
添加 nginx 配置
还不会在局域网申请 ssl 及配置的可以参考之前的文章 前后端都用得上的 Nginx 日常使用经验
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;
}
}
安装成功
根据上面的配置,完成了 Prometheus 的搭建,监听本身 Prometheus 的情况
通过https://prometheus.devops.test.com/ 使用账号密码 root devops666 登陆后即可

使用 docker compose 安装 Grafana
Grafana 是一个开源的数据可视化和监控平台,它提供了丰富的图表和面板,用于展示各种指标和数据。提到 Prometheus,Grafana 自然是不不能落下,基于官方和社区,可以很快的制作出监控可视化面板,助力日常运维检测
配置文件说明
- grafana 版本:v10.2.0
- 指定账号密码: root devops666
- 端口映射:3000
- 挂载数据目录 ./grafana_data, 需要赋予权限:
mkdir -p grafana_data && chown -R 472:472 ./grafana_data - 指定网络为 devopsnetwork(
docker network create devopsnetwork) - docker compose 文件:compose.yml ,安装 v10.2.0 替换版本号即可
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
- 启动:
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/使用账号密码 root devops666 登陆后即可


制作监控面板步骤:
- 指定一个数据源,数据源采集各组件的信息,提供给 Grafana 进行显示
- 可以从官方/社区/自行制作面板
添加 Prometheus 数据源

! ! ! 数据源最好是用 IP+端口,避免容器内无法解析 test.com 域名

从 Grafana 导入仪表板
- 从官网 获取一个监控 Prometheus 的面板 Prometheus 2.0 Overview Id:3662

- 选择数据源确认导入

- 查看面板,可以看到面板中有许多数据已经无法正常显示,这个在后续的一些面板中也经常会遇到,之前以为是 Grafana 不对,但我创建了一个依赖版本 4.5.0-beta1 测试发现依旧不行,应该还是是因为监控数据的问题

Grafana v10.2.0 常用操作
之前使用的 v6.7.2,当前已经是 v10.2.0 了,故还是选择将 grafana 升级到 v10,升级需要重新创建数据目录
设置中文
在写完文章发现原来已经支持中文了,补上~

导入面板
- 新建面板的入口在右上方

添加数据源
- 测试了常用的几个数据源: Prometheus ClickHouse Redis
- MongoDB 需要企业版,开源版可以使用 Prometheus 监控

- 添加了数据源后有推荐的仪表盘可以直接启用

添加插件
- 之前 v6.7.2 无法在线安装(墙),v10 可以在线安装了,方便许多
- 准备安装插件时记得切换 State 到 All

常用服务的 Prometheus+Grafana 配置

常用的一些组件可以在官方下载页中去寻找,使用 Docker 可以去DockerHub去找对应的镜像即可
- Grafana 版本:已升级到 v10.2.0
- Prometheus 版本:v2.47.2


Linux 监控配置
Prometheus 组件:node_exporter v1.7.0
Grafana 面板推荐:
- Node Exporter Dashboard 220417 通用 Job 分组版 ID: 16098
- Linux Hosts Metrics | Base ID: 10180
指定映射端口:9100
docker 运行 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

- 运行成功并将其配置到 prometheus.yml
#global:
# xxx
#...
scrape_configs:
- job_name: 'linux'
# 每隔5秒从该作业中抓取目标
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 工作台-作业中心-快捷命令 直接远程在四台 Linux 主机运行

- v6 导入 Grafana 面板 10180


- v10 导入面板 16098

Windows 监控配置
Prometheus 组件:windows_exporterv0.24
Grafana 面板推荐:
- Windows Exporter Dashboard 20230531-StarsL.cn ID: 10467
- Windows Exporter ID: 12566
从 Github Release 下载安装程序即可:从 release 页下载 v0.24
运行使用本机 IP+9182 端口访问即可:http://192.168.123.201:9182/

- 运行成功并将其配置到 prometheus.yml
#global:
# xxx
#...
scrape_configs:
- job_name: 'win-node'
# 每隔5秒从该作业中抓取目标
scrape_interval: 5s
static_configs:
- targets: ['192.168.123.201:9182']
- 重载配置后配置生效(
curl -X POST -u root:devops666 ``http://localhost:9090/-/reload)

- v10 导入 Grafana 面板 12566


可以修改时间范围查看监控情况

- 导入 10467

Nginx 监控配置
Prometheus 组件:nginx-prometheus-exporter v0.11
Grafana 面板推荐:
- NGINX exporter ID: 12708
- Nginx 日志支持扩展,需要插件 ID:12268
首先需要修改 nginx 配置启用 stub_status ,默认是建议新开一个端口来,我这里是局域网所以直接使用 80 端口配置:通过 192.168.123.214:80/basic_status 即可访问到 nginx 状态
server {
listen 80;
#...其他配置
location = /stub_status {
stub_status;
}
}

- 指定映射端口:9113
- docker 运行 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
- 运行使用 IP+9113 端口访问即可:http://192.168.123.214:9113/


- 将其配置到 prometheus.yml
- job_name: 'nginx'
# 每隔5秒从该作业中抓取目标
scrape_interval: 5s
static_configs:
- targets: ['192.168.123.214:9113']
重载配置后生效: curl -X POST -u root:devops666 ``http://localhost:9090/-/reload

- 导入 Grafana 面板:12708

MySQL 监控配置
Prometheus 组件:mysqld_exporterv0.15.0
Grafana 面板推荐:
- MYSQL 监控指标 ID:11329
- MySQL Overview ID:7362
- MySQL Exporter Quickstart and Dashboard ID: 14057
mysql 监控账号创建
- 监控账号密码: exporter devops666
- 限制最大连接数:MAX_USER_CONNECTIONS :3
- 并授权查询权限及外部访问权限,允许的 Host 不能用 localhost,容器内部访问时会带上容器 IP 无法连接
CREATE USER 'exporter'@'%' IDENTIFIED BY 'devops666' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
可以使用之前搭建的 JumpServer 进行执行

指定映射端口:9104
docker 运行 mysqld_exporter
- 建议指定和 mysql 服务同一网络,使用 mysql 的服务名加端口访问,不在同一网络的适合账号授权访问时需要将 localhost 修改为%,dockerhub 文档没有更新,以 GitHub 文档为主
- 主机名和端口:--mysqld.address mysql:3306 (一个网络就用服务名,或者使用 ip:port)
- 账号:--mysqld.username exporter
- 密码:-e MYSQLD_EXPORTER_PASSWORD=devops666
- 指定网络:--network devopsnetwork(和 mysql 一个网络,可以不需要)
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
- 运行使用 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

- 导入 Grafana 面板 11329

MongoDB 监控配置
Prometheus 组件:mongodb_exporter v0.20
Grafana 面板推荐:
- MongoDB ID:14997 部分图表无效
- MongoDB 数据源插件需要企业版才能使用
docker 运行 mongodb_exporter 监听单机实例
#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
- 导入面板 14997 目前只测试了单实例的监控,一些数据可以根据需要进行修改

ClickHouse 监控配置
Prometheus 配置:clickhouse 9363 端口、9000 端口
9363:ClickHouse 的 Prometheus 默认指标端口
9000:Native Protocol 端口, ClickHouse TCP 协议,用于分布式查询的服务器间通信
Grafana 面板推荐:
- ClickHouse 仪表盘 ID:14192
使用 Prometheus 数据源监控
- prometheus.yml 配置
- job_name: clickhouse
static_configs:
- targets: ['192.168.123.214:9363']
labels:
instance: clickhouse
- 参考之前安装 clickhouse 教程,增加启用 9000 端口,并在 grafana 中安装 clickhouse 数据源插件
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
使用数据源插件监控
- Grafana 启用数据源 clickhouse 插件

- 配置数据源 需要开启 9000 端口

- 启用默认仪表盘

- 预览效果

Redis 监控配置
Prometheus 组件:redis_exporterv1.55.0
端口:单机 9121:9121,集群 9122:9121
Grafana 面板推荐:
- Redis Exporter Quickstart and Dashboard: ID 14091
- Redis Dashboard for Prometheus Redis Exporter: ID 11835
- Redis 数据源插件面板:ID 12776
redis_exporter 单机监控
- docker 运行 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
- 导入面板 11835 监控单机

- 导入面板 14091 监控单机

redis_exporter 集群监控
- docker 运行 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 监控集群节点

- 使用面板 14091 监控集群节点

使用数据源插件监控 Redis 单机/集群
- 安装 Redis 数据源插件

- 配置 Redis 单机数据源 Redis-Node

- 配置 Redis 集群数据源 Redis-Cluster

- 导入面板 12776 指定数据源

- 集群监控预览

RabbitMQ 监控配置
Grafana 面板推荐:
- rabbitmq-overview ID:10991
RabbitMQ 内置 Prometheus 支持 文档
需要使用时映射 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

- 导入 Grafana 面板 10991

站点监控配置
Prometheus 组件:blackbox_exporter v0.24.0
Grafana 面板推荐:
- Blackbox Exporter ID: 13659
- Decentralized Blackbox ID: 9719
- Blackbox Exporter Dashboard ID: 9965
使用 docker compose up -d 运行 blackbox-exporter ,需要映射配置 blackbox.yml
挂载了模块配置文件 blackbox.yml 和局域网的证书 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 将局域网中的证书映射进去了
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检查状态
- source_labels: [__param_hostname]
regex: 'apollo.*'
target_label: __param_target
replacement: https://192.168.123.214:443/health
#匹配prometheus 开启了basic_auth 所以可以使用下面这种方式进行验证,问的gpt,还真行
- source_labels: [__param_hostname]
regex: 'prometheus.*'
target_label: __param_target
replacement: https://root:devops666@192.168.123.214:443
- 重载 prometheus 配置生效

- 导入面板 13659 监控效果

- 导入面板 9719 监控效果

- 导入面板 9965 监控效果

Grafana 监控告警设置
通过设置 Alert rules(预警规则) ,匹配到有指标符合规则时,就会根据 Notification policies(通知策略) 进行消息发送,发送的内容和模板在 Contact points(通知方式) 设置
下面完成一个实际的使用场景:检测 RabbitMQ 面板状态,服务不可用时进行预警,通过企业微信机器人进行群通知
设置预警规则
- 添加规则名称:RabbitMQ 监控

- 选择数据源:Prometheus
- 设置指标条件:内存使用字节 erlang_mnesia_memory_usage_bytes 并指定 job 是 rabbitmq

- 设置预警条件:内存值小于 1(无效)时进行通知

- 设置检查规则,30s 检查一次,30s 等待期,立刻通知
- Pending period 等待期:如果警报条件不再满足,警报规则将会恢复到正常状态,而不会触发警报

- 这个和默认的通知策略还有关系,需要结合使用,默认是 30s,5 分钟等待期,4 小时内不重复发送可根据需要修改

- 设置提醒信息及服务地址

设置通知策略
可以通过修改重复间隔,重新发送通知


设置告警模板
Grafana 使用 Go 模板语言来创建通知消息,可根据文档自行编写,另外一个aws 的中文文档可以参考
- 结合文档写的一个通知模板
{{ define "DevOpsTemplate" -}}
{{- range .Alerts -}}
{{- range .Annotations.SortedPairs -}}
{{if eq .Name "summary" }}
**{{ "预警消息" }}**:{{ .Value }}
{{- end -}}
{{ end }}
{{- range .Annotations.SortedPairs -}}
{{if eq .Name "runbook_url" }}
**{{ "服务地址" }}**:{{ .Value }}
{{- end -}}
{{ end }}
**{{"预警分组"}}**:{{ .Labels.grafana_folder }}
**{{"开始时间"}}**:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05"}}
**{{"预警参数"}}**:
{{ range .Labels.SortedPairs -}}
{{ .Name }}:{{ .Value }}
{{ end }}
{{- range .Annotations.SortedPairs -}}
{{- if and (ne .Name "summary") (ne .Name "runbook_url") -}}
{{ .Name }}:{{ .Value }}
{{ end }}
{{ end }}
{{- end -}}
{{- end -}}
设置通知方式

支持多种通知,根据需要配置,这里以企业微信机器人为例

需要通过告警快速定位问题,实际应用中肯定是需要将告警实例及其信息一并通知,所以还需要结合告警模板和规则进行消息的发送。使用模板语法指定前面设置的模板

设置完成后,当预警规则设置页面出现异常提示时,就会进行提示了

踩坑记录
安装官方文档运行后,提示无权限,需要赋予挂载目录权限:
chown 65534 ./prometheus_data权限在之前的使用中使用 777 权限,能够解决,但是很明显不是最佳方案,然后好好找了下,最后发现这个问题很久就有人提出 pr,只是一直没有被合并,大概下个版本就可以了, 关于持久化权限的讨论
basic_auth 修改后,重载配置是无效的,需要重新启动后才生效
redis 使用 redis_exporter,监控多个如果有密码,没有密码,密码不一样的实例需要分开运行配置
mongodb 的监控始终不是很完美
站点监控的证书验证和密码验证反反复复尝试了很久,以下为主要踩坑的地方
- prometheus.yml 配置 blackbox job 的 params module 只能有一个,多个只会第一个生效
- blackbox 配置的证书可以是 pem,无效转换成 crt 格式,配置:ca_file: /config/myCA.pem
- basic_auth 配置不需要再配置 job,可以直接使用特殊的 url 格式:
https://root:devops666@192.168.123.214:443
Grafana 服务重启后,nginx 代理域名访问一直 502,IP 可以访问,重启 nginx 后就可以访问了
Grafana 的通知模板语法,可参考文档
# 1.定义模板
{{ define "模板名称" -}}
/**/
{{ end }}
# 2.循环预警消息
{{ range .Alerts }}
/**/
{{ end }}
# 3.打印加粗文字
**{{ "预警消息" }}**
# 4.删除空格和换行符
{{ range .Alerts -}}
{{ range .Labels.SortedPairs -}}
{{ .Name }} = {{ .Value }}
{{ end }}
{{ end }}
# 5. 循环附加信息
{{- range .Annotations.SortedPairs -}}
{{ end}}
# 5. if判断
{{if eq .Name "runbook_url" }}
# 6. 时区问题,+8设置
**{{"开始时间"}}**:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05"}}
相关文档
- Prometheus Github
- Prometheus 官方文档
- Prometheus Bcrypt 密码生成
- Prometheus 配置文件参考示例
- Prometheus 数据持久化权限的讨论
- Grafana Github
- Grafana 面板检索
- Grafana 通知模板中文文档
- Prometheus+Grafana+Alertmanager 实现告警推送教程
- Grafana 新手教程-实现仪表盘创建和告警推送****
后语
研究了差不多大半个月,从常用中间件的监控到设置预警,花费了很大的功夫,也掉了不少的头发。
这篇文章写完,个人感觉 Prometheus+Grafana 这套方案算是入门了,满足日常使用肯定是没问题的。
走过不要错过,欢迎留言交流。
Prometheus+Grafana 监控平台实践-搭建&常用服务监控&告警的更多相关文章
- 建设DevOps统一运维监控平台,全面的系统监控 Zabbix VS Nagios VS Open-Falcon OR Prometheus
前言 随着Devops.云计算.微服务.容器等理念的逐步落地和大力发展,机器越来越多,应用越来越多,服务越来越微,应用运行基础环境越来多样化,容器.虚拟机.物理机不一而足.面对动辄几百上千个虚拟机.容 ...
- 基于Prometheus和Grafana的监控平台 - 环境搭建
相关概念 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics. Logging - 用于记录离散的事件.例如,应用程序的调试信息或错误信息.它是我们诊断问题的依据. ...
- Prometheus 监控平台的搭建
1. 环境准备 两台ubuntu 16.04 服务器内网IP 作用 安装软件 172.16.4.11 监控的服务端 Prometheus( ...
- prometheus(6)之常用服务监控
监控常用服务 1.tomcat 2.redis 3.mysql 4.nginx 5.mongodb prometheus监控tomcat tomcat_exporter地址 https://githu ...
- cat监控平台环境搭建
项目地址:https://github.com/dianping/cat 编译步骤: 这个项目比较另类,把编译需要的jar包,单独放在git分支mvn-repo里了,而且官方文档里给了一个错误的命令提 ...
- Docker for Windows(五)实践搭建SqlServer服务&执行数据库操作
上一篇我们已经搭建了一个mysql数据库服务了:Docker for Windows(四)实践搭建&删除MySQL服务,发现用Docker确实是方便且容易,但上一篇主要是服务的搭建删除等基础操 ...
- cat监控平台环境搭建 专题
项目地址:https://github.com/dianping/cat 编译步骤: 这个项目比较另类,把编译需要的jar包,单独放在git分支mvn-repo里了,而且官方文档里给了一个错误的命令提 ...
- 第 10 章 容器监控 - 078 - Docker 最常用的监控方案
Docker 最常用的监控方案 当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. Docker 自带的几个监控子命令: ps .top .stats 功能更 ...
- 容器监控—阿里云&容器内部服务监控
目前Docker的使用越来越离不开对容器的监控,阿里云最近上线了容器服务,不但提供了核心的容器和宿主机监控能力,而且支持集成 Cloud Insight 监控,下面会介绍如何集成. 首先介绍一下阿里云 ...
- prometheus学习系列八: Prometheus Grafana展示平台
在prometheus中,我们可以使用web页面进行数据的查询和展示, 不过展示效果不太理想,这里使用一款专业的展示平台进行展示. grafana安装 # 下载wget https://dl.graf ...
随机推荐
- 基于卷积神经网络的MAE自监督方法
本文分享自华为云社区<基于卷积神经网络的MAE自监督方法>,作者: Hint . 图像自监督预训练算法是近年来的重要研究方向,MAE是其中基于ViT实现的代表性方法,学习到了鲁棒的视觉特征 ...
- 2、Spring之IOC概述
2.1.IOC思想 2.1.1.传统方式获取资源 组件主动地从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式: 提高了学习成本,同时也降低了开发的效率. 2. ...
- [ABC145E] All-you-can-eat
2023-02-25 题目 题目传送门 翻译 翻译 难度&重要性(1~10):5 题目来源 AtCoder 题目算法 背包dp 解题思路 设 \(dp_i\) 为最后一道菜在第 \(i\) 时 ...
- 错过这5大AI绘画提示词平台,你会拍大腿!别问,直接收藏!
如今,AI绘画已经不再是简单的技术展示,而是逐渐转向了商业化的运营. 有的人利用AI生成的图片,再结合ChatGPT产生的文字,然后在平台上发布,这样就可以赚取平台的广告费. 其他一些变现操作参考之前 ...
- Vue【原创】时间轴 【time-axis】&【date-axis】
封装了关于时间轴的组件,有时候统计页面会用到. 效果图: 时间轴分为2种,一种是time-axis:范围选择模式,一种是date-axis:步长选择模式. 代码中涉及到的工具类和图片资源,请移步页面底 ...
- SpringSecurity简明教程
SpringSecurity主要实现UserDetailsService来验证登录的用户信息,和Security的配置类来对登录方式和资源进行限制. 案例包含利用数据库进行登录验证.URL访问限制.自 ...
- Code Llama:Llama 2 学会写代码了!
引言 Code Llama 是为代码类任务而生的一组最先进的.开放的 Llama 2 模型,我们很高兴能将其集成入 Hugging Face 生态系统!Code Llama 使用与 Llama 2 相 ...
- tree-test
#include <iostream> #include <stack> using namespace std; typedef struct BiTNode{ char d ...
- VMware Work Station使用ubuntu20.04挂载共享文件夹写入文件时出现输入/输出错误
原因是默认的max_write为0x00020000即128k,超过此大小会报错,另外big_writes,umask等选项也要加上, sudo /usr/bin/vmhgfs-fuse .host: ...
- EarthChat SignalR原理讲解
SignalR原理讲解 SignalR是什么? SignalR 是 Microsoft 开发的一个库,用于 ASP.NET 开发人员实现实时 web 功能.这意味着服务端代码可以实时地推送内容到连接的 ...



