经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Prometheus+Grafana 监控平台实践-搭建&常用服务监控&告警
来源:cnblogs  作者:易墨  时间:2023/12/8 11:49:44  对本文有异议

前言

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

  1. version: '3.1'
  2. services:
  3. prometheus:
  4. restart: always
  5. container_name: prometheus
  6. image: prom/prometheus:v2.47.2
  7. command:
  8. # 配置文件
  9. - '--config.file=/etc/prometheus/prometheus.yml'
  10. # 指定web面板账号密码访问
  11. - '--web.config.file=/etc/prometheus/web-config.yml'
  12. # 数据目录
  13. - '--storage.tsdb.path=/prometheus'
  14. # 数据保留时间
  15. - '--storage.tsdb.retention.time=30d'
  16. # 运行使用 curl -X POST http://localhost:9090/-/reload 重载其配置
  17. - '--web.enable-lifecycle'
  18. volumes:
  19. # 需要权限 mkdir prometheus_data && chown 65534 ./prometheus_data
  20. - ./prometheus.yml:/etc/prometheus/prometheus.yml
  21. - ./prometheus_data:/prometheus
  22. - ./web-config.yml:/etc/prometheus/web-config.yml
  23. ports:
  24. - 9090:9090
  25. networks:
  26. - devopsnetwork
  27. networks:
  28. devopsnetwork:
  29. external: true
  • prometheus 配置文件示例:prometheus.yml,

    • 指定了 prometheus ,并设置了访问密码 root devops666
  1. global:
  2. scrape_interval: 15s # By default, scrape targets every 15 seconds.
  3. # Attach these labels to any time series or alerts when communicating with
  4. # external systems (federation, remote storage, Alertmanager).
  5. external_labels:
  6. monitor: 'codelab-monitor'
  7. # A scrape configuration containing exactly one endpoint to scrape:
  8. # Here it's Prometheus itself.
  9. scrape_configs:
  10. - job_name: 'prometheus'
  11. scrape_interval: 5s
  12. static_configs:
  13. - targets: ['localhost:9090']
  14. # 启用了账号密码 web-config.yml basic_auth_users 需要配置
  15. basic_auth:
  16. username: root
  17. password: devops666
  • web 控制台配置:web-config.yml

    • 指定账号密码 root devops666
  1. basic_auth_users:
  2. 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 密码 在线生成工具
  1. basic_auth_users:
  2. root: $2a$10$kmkC.lHR3Kwl19DE9l1KRerMDinEejEbNmJigrJZYAGkgzbVBUpa2
  • 如果需要使用 Prometheus 监听 Prometheus ,并且 Prometheus 启用了身份验证,需要在配置出增加 basic_auth 配置节
  1. scrape_configs:
  2. - job_name: 'prometheus'
  3. scrape_interval: 5s
  4. static_configs:
  5. - targets: ['localhost:9090']
  6. # 启用了账号密码 web-config.yml basic_auth_users 需要配置
  7. basic_auth:
  8. username: root
  9. password: devops666
  • 掉坑里去了,如果一开始 basic_auth 没有配置对,重载配置是无效的,需要重启

重载配置

修改了配置文件后,可以使用 api 接口重载配置,如果启用了账号密码可以使用 -u 参数指定(basic_auth 修改重载配置无效),没有就不需要加 -u 参数

  1. curl -X POST http://localhost:9090/-/reload
  2. curl -X POST -u root:devops666 http://localhost:9090/-/reload

添加 nginx 配置

还不会在局域网申请 ssl 及配置的可以参考之前的文章 前后端都用得上的 Nginx 日常使用经验

  1. server {
  2. listen 80;
  3. listen 443 ssl;
  4. server_name prometheus.devops.test.com; # 自行修改成你的域名
  5. ssl_certificate /certs/prometheus.devops.test.com/server.crt;
  6. ssl_certificate_key /certs/prometheus.devops.test.com/server.key;
  7. ssl_session_cache shared:SSL:1m;
  8. ssl_session_timeout 5m;
  9. ssl_ciphers HIGH:!aNULL:!MD5;
  10. ssl_prefer_server_ciphers on;
  11. location / {
  12. proxy_pass http://prometheus:9090;
  13. proxy_http_version 1.1;
  14. proxy_buffering off;
  15. proxy_request_buffering off;
  16. proxy_set_header Upgrade $http_upgrade;
  17. proxy_set_header Connection "upgrade";
  18. proxy_set_header Host $host;
  19. proxy_set_header X-Forwarded-For $remote_addr;
  20. }
  21. }

安装成功

根据上面的配置,完成了 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 替换版本号即可
  1. version: '3.1'
  2. services:
  3. grafana:
  4. restart: always
  5. container_name: grafana
  6. image: grafana/grafana:10.2.0
  7. ports:
  8. - "3000:3000"
  9. volumes:
  10. - ./grafana_data:/var/lib/grafana
  11. environment:
  12. - GF_SECURITY_ADMIN_USER=root
  13. - GF_SECURITY_ADMIN_PASSWORD=devops666
  14. - GF_USERS_ALLOW_SIGN_UP=false
  15. networks:
  16. - devopsnetwork
  17. networks:
  18. devopsnetwork:
  19. external: true
  • 启动:docker compose up -d

添加 nginx 配置

  1. server {
  2. listen 80;
  3. listen 443 ssl;
  4. server_name grafana.devops.test.com; # 自行修改成你的域名
  5. ssl_certificate /certs/grafana.devops.test.com/server.crt;
  6. ssl_certificate_key /certs/grafana.devops.test.com/server.key;
  7. ssl_session_cache shared:SSL:1m;
  8. ssl_session_timeout 5m;
  9. ssl_ciphers HIGH:!aNULL:!MD5;
  10. ssl_prefer_server_ciphers on;
  11. location / {
  12. proxy_pass http://grafana:3000;
  13. proxy_http_version 1.1;
  14. proxy_buffering off;
  15. proxy_request_buffering off;
  16. proxy_set_header Upgrade $http_upgrade;
  17. proxy_set_header Connection "upgrade";
  18. proxy_set_header Host $host;
  19. proxy_set_header X-Forwarded-For $remote_addr;
  20. }
  21. }

安装成功

通过https://grafana.devops.test.com/使用账号密码 root devops666 登陆后即可

制作监控面板步骤:

  1. 指定一个数据源,数据源采集各组件的信息,提供给 Grafana 进行显示
  2. 可以从官方/社区/自行制作面板

添加 Prometheus 数据源

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

从 Grafana 导入仪表板

  • 选择数据源确认导入

  • 查看面板,可以看到面板中有许多数据已经无法正常显示,这个在后续的一些面板中也经常会遇到,之前以为是 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 监控配置

  1. 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
  1. #global:
  2. # xxx
  3. #...
  4. scrape_configs:
  5. - job_name: 'linux'
  6. # 每隔5秒从该作业中抓取目标
  7. scrape_interval: 5s
  8. static_configs:
  9. - 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.yml
  1. #global:
  2. # xxx
  3. #...
  4. scrape_configs:
  5. - job_name: 'win-node'
  6. # 每隔5秒从该作业中抓取目标
  7. scrape_interval: 5s
  8. static_configs:
  9. - targets: ['192.168.123.201:9182']
  • 重载配置后配置生效( curl -X POST -u root:devops666 ``http://localhost:9090/-/reload

  • v10 导入 Grafana 面板 12566

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

  • 导入 10467

Nginx 监控配置

  1. server {
  2. listen 80;
  3. #...其他配置
  4. location = /stub_status {
  5. stub_status;
  6. }
  7. }

  • 指定映射端口:9113
  • docker 运行 nginx-prometheus-exporter
  1. 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

  • 将其配置到 prometheus.yml
  1. - job_name: 'nginx'
  2. # 每隔5秒从该作业中抓取目标
  3. scrape_interval: 5s
  4. static_configs:
  5. - targets: ['192.168.123.214:9113']

重载配置后生效: curl -X POST -u root:devops666 ``http://localhost:9090/-/reload

  • 导入 Grafana 面板:12708

MySQL 监控配置

  1. CREATE USER 'exporter'@'%' IDENTIFIED BY 'devops666' WITH MAX_USER_CONNECTIONS 3;
  2. 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 一个网络,可以不需要)
  1. 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

  • 将其配置到 prometheus.yml
  1. - job_name: mysql
  2. static_configs:
  3. - targets:
  4. - 192.168.123.214:3306
  5. relabel_configs:
  6. - source_labels: [__address__]
  7. target_label: __param_target
  8. - source_labels: [__param_target]
  9. target_label: instance
  10. - target_label: __address__
  11. # The mysqld_exporter host:port
  12. 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 监听单机实例

  1. #docker stop mongodb_exporter && docker rm mongodb_exporter
  2. 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 配置
  1. - job_name: mongodb
  2. static_configs:
  3. - targets: ['192.168.123.214:9216']
  4. labels:
  5. instance: mongodb
  • 导入面板 14997 目前只测试了单实例的监控,一些数据可以根据需要进行修改

ClickHouse 监控配置

  • Prometheus 配置:clickhouse 9363 端口、9000 端口

  • 9363:ClickHouse 的 Prometheus 默认指标端口

  • 9000:Native Protocol 端口, ClickHouse TCP 协议,用于分布式查询的服务器间通信

  • Grafana 面板推荐:

使用 Prometheus 数据源监控

  • prometheus.yml 配置
  1. - job_name: clickhouse
  2. static_configs:
  3. - targets: ['192.168.123.214:9363']
  4. labels:
  5. instance: clickhouse
  • 参考之前安装 clickhouse 教程,增加启用 9000 端口,并在 grafana 中安装 clickhouse 数据源插件
  1. version: '3'
  2. services:
  3. clickhouse-server:
  4. container_name: db_clickhouse_20_6
  5. image: yandex/clickhouse-server:20.6.8.5
  6. restart: always
  7. ulimits:
  8. nofile:
  9. soft: 262144
  10. hard: 262144
  11. environment:
  12. - TZ=Asia/Shanghai
  13. - ports=8123,9363,9000
  14. ports:
  15. - 8123:8123
  16. - 9363:9363
  17. - 9000:9000
  18. volumes:
  19. - ./data:/var/lib/clickhouse
  20. - ./logs:/var/log/clickhouse-server
  21. # 指定配置文件
  22. - ./config:/etc/clickhouse-server

使用数据源插件监控

  • Grafana 启用数据源 clickhouse 插件

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

  • 启用默认仪表盘

  • 预览效果

Redis 监控配置

redis_exporter 单机监控

  • docker 运行 oliver006/redis_exporter 指定端口 9121
  • 通过 --redis.addr --redis.password 来指定地址和密码
  1. #docker stop redis_exporter && docker rm redis_exporter &&
  2. 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 配置
  1. - job_name: redis_exporter
  2. static_configs:
  3. - targets: ['192.168.123.214:9121']
  4. labels:
  5. instance: redis-node
  • 导入面板 11835 监控单机

  • 导入面板 14091 监控单机

redis_exporter 集群监控

  • docker 运行 oliver006/redis_exporter 指定端口 9122
  1. docker run -d -p 9122:9121 --name redis_exporter_targets --restart always oliver006/redis_exporter:v1.55.0
  • prometheus.yml 配置
  1. - job_name: redis_exporter_targets
  2. static_configs:
  3. - targets:
  4. - redis://192.168.123.216:6380
  5. - redis://192.168.123.219:6380
  6. - redis://192.168.123.222:6380
  7. - redis://192.168.123.216:6381
  8. - redis://192.168.123.219:6381
  9. - redis://192.168.123.222:6381
  10. metrics_path: /scrape
  11. relabel_configs:
  12. - source_labels: [__address__]
  13. target_label: __param_target
  14. - source_labels: [__param_target]
  15. target_label: instance
  16. - target_label: __address__
  17. replacement: 192.168.123.214:9122
  • 使用面板 11835 监控集群节点

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

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

  • 安装 Redis 数据源插件

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

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

  • 导入面板 12776 指定数据源

  • 集群监控预览

RabbitMQ 监控配置

  • Grafana 面板推荐:

  • RabbitMQ 内置 Prometheus 支持 文档

  • 需要使用时映射 15692:15692 端口

  • 并确保插件已启用:docker exec -it rabbitmq_3_12 /bin/bash -c "rabbitmq-plugins enable rabbitmq_prometheus"

  • Prometheus 配置
  1. - job_name: rabbitmq
  2. static_configs:
  3. - targets: ['192.168.123.214:15692']
  4. labels:
  5. instance: rabbitmq

  • 导入 Grafana 面板 10991

站点监控配置

  1. version: '3.1'
  2. services:
  3. blackbox_exporter:
  4. restart: always
  5. container_name: blackbox_exporter
  6. image: prom/blackbox-exporter:v0.24.0
  7. command:
  8. # 配置文件
  9. - '--config.file=/config/blackbox.yml'
  10. volumes:
  11. # blackbox.yml myCA.pem
  12. - ./config:/config
  13. ports:
  14. - 9115:9115
  15. networks:
  16. - devopsnetwork
  17. networks:
  18. devopsnetwork:
  19. external: true
  • blackbox.yml 配置,添加了 http_custom_ca_devops 将局域网中的证书映射进去了
  1. modules:
  2. http_2xx:
  3. prober: http
  4. http:
  5. preferred_ip_protocol: "ip4"
  6. http_post_2xx:
  7. prober: http
  8. http:
  9. method: POST
  10. tcp_connect:
  11. prober: tcp
  12. pop3s_banner:
  13. prober: tcp
  14. tcp:
  15. query_response:
  16. - expect: "^+OK"
  17. tls: true
  18. tls_config:
  19. insecure_skip_verify: false
  20. ca_file:
  21. grpc:
  22. prober: grpc
  23. grpc:
  24. tls: true
  25. preferred_ip_protocol: "ip4"
  26. grpc_plain:
  27. prober: grpc
  28. grpc:
  29. tls: false
  30. service: "service1"
  31. ssh_banner:
  32. prober: tcp
  33. tcp:
  34. query_response:
  35. - expect: "^SSH-2.0-"
  36. - send: "SSH-2.0-blackbox-ssh-check"
  37. irc_banner:
  38. prober: tcp
  39. tcp:
  40. query_response:
  41. - send: "NICK prober"
  42. - send: "USER prober prober prober :prober"
  43. - expect: "PING :([^ ]+)"
  44. send: "PONG ${1}"
  45. - expect: "^:[^ ]+ 001"
  46. icmp:
  47. prober: icmp
  48. icmp_ttl5:
  49. prober: icmp
  50. timeout: 5s
  51. icmp:
  52. ttl: 5
  53. http_custom_ca_devops:
  54. prober: http
  55. http:
  56. method: GET
  57. tls_config:
  58. ca_file: /config/myCA.pem
  • prometheus.yml 配置
  1. - job_name: blackbox_devops
  2. metrics_path: /probe
  3. params:
  4. module: [ http_custom_ca_devops ] # Look for a HTTP 200 response.
  5. dns_sd_configs:
  6. - names:
  7. - nginx.devops.test.com
  8. - apollo.devops.test.com
  9. - rabbitmq.devops.test.com
  10. - dns.devops.test.com
  11. - nexus.devops.test.com
  12. - jumpserver.devops.test.com
  13. - grafana.devops.test.com
  14. - prometheus.devops.test.com
  15. type: A
  16. port: 443
  17. relabel_configs:
  18. - source_labels: [__address__]
  19. target_label: __param_target
  20. replacement: https://192.168.123.214:443/ # Make probe URL be like https://1.2.3.4:443/
  21. - source_labels: [__meta_dns_name]
  22. target_label: instance
  23. - target_label: __address__
  24. replacement: 192.168.123.214:9115 # The blackbox exporter's real hostname:port.
  25. - source_labels: [__meta_dns_name]
  26. target_label: __param_hostname # Make domain name become 'Host' header for probe requests
  27. - source_labels: [__meta_dns_name]
  28. target_label: vhost # and store it in 'vhost' label
  29. #匹配apollo,需要访问/health检查状态
  30. - source_labels: [__param_hostname]
  31. regex: 'apollo.*'
  32. target_label: __param_target
  33. replacement: https://192.168.123.214:443/health
  34. #匹配prometheus 开启了basic_auth 所以可以使用下面这种方式进行验证,问的gpt,还真行
  35. - source_labels: [__param_hostname]
  36. regex: 'prometheus.*'
  37. target_label: __param_target
  38. 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 的中文文档可以参考

  • 结合文档写的一个通知模板
  1. {{ define "DevOpsTemplate" -}}
  2. {{- range .Alerts -}}
  3. {{- range .Annotations.SortedPairs -}}
  4. {{if eq .Name "summary" }}
  5. **{{ "预警消息" }}**:{{ .Value }}
  6. {{- end -}}
  7. {{ end }}
  8. {{- range .Annotations.SortedPairs -}}
  9. {{if eq .Name "runbook_url" }}
  10. **{{ "服务地址" }}**:{{ .Value }}
  11. {{- end -}}
  12. {{ end }}
  13. **{{"预警分组"}}**:{{ .Labels.grafana_folder }}
  14. **{{"开始时间"}}**:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05"}}
  15. **{{"预警参数"}}**:
  16. {{ range .Labels.SortedPairs -}}
  17. {{ .Name }}:{{ .Value }}
  18. {{ end }}
  19. {{- range .Annotations.SortedPairs -}}
  20. {{- if and (ne .Name "summary") (ne .Name "runbook_url") -}}
  21. {{ .Name }}:{{ .Value }}
  22. {{ end }}
  23. {{ end }}
  24. {{- end -}}
  25. {{- 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. # 1.定义模板
  2. {{ define "模板名称" -}}
  3. /**/
  4. {{ end }}
  5. # 2.循环预警消息
  6. {{ range .Alerts }}
  7. /**/
  8. {{ end }}
  9. # 3.打印加粗文字
  10. **{{ "预警消息" }}**
  11. # 4.删除空格和换行符
  12. {{ range .Alerts -}}
  13. {{ range .Labels.SortedPairs -}}
  14. {{ .Name }} = {{ .Value }}
  15. {{ end }}
  16. {{ end }}
  17. # 5. 循环附加信息
  18. {{- range .Annotations.SortedPairs -}}
  19. {{ end}}
  20. # 5. if判断
  21. {{if eq .Name "runbook_url" }}
  22. # 6. 时区问题,+8设置
  23. **{{"开始时间"}}**:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05"}}

相关文档

后语

研究了差不多大半个月,从常用中间件的监控到设置预警,花费了很大的功夫,也掉了不少的头发。

这篇文章写完,个人感觉 Prometheus+Grafana 这套方案算是入门了,满足日常使用肯定是没问题的。

走过不要错过,欢迎留言交流。

原文链接:https://www.cnblogs.com/morang/p/devops-prometheus-grafana-install-use-db-site-monitor.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号