[关闭]
@cdmonkey 2025-08-28T01:46:48.000000Z 字数 5664 阅读 11

Prometheus-AlertManager

Grafana


https://github.com/prometheus/alertmanager
https://blog.yangx.site/2016/03/07/prometheus-alertmanager
https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/alert/install-alert-manager

Download

https://prometheus.io/download

  1. wget https://github.com/prometheus/alertmanager/releases/download/v0.18.0/alertmanager-0.18.0.linux-amd64.tar.gz
  1. [root@cdmonkey03 tools]# tar zxvf alertmanager-0.18.0.linux-amd64.tar.gz -C /opt/
  2. [root@cdmonkey03 tools]# cd /opt/
  3. [root@cdmonkey03 opt]# ln -s alertmanager-0.18.0.linux-amd64 alertmanager
  4. # 创建用户:
  5. useradd prometheus -s /sbin/nologin -M
  6. # 创建数据目录:
  7. mkdir -pv /opt/alertmanager/data
  8. chown -R prometheus.prometheus /opt/alertmanager
  9. chown -R prometheus.prometheus /opt/alertmanager-0.18.0.linux-amd64

创建 Alertmanager 服务启动文件:/usr/lib/systemd/system/alertmanager.service

https://github.com/yeaheo/prometheus-huang/blob/master/service/alertmanager.service

  1. [Unit]
  2. Description=Alertmanager
  3. After=network.target
  4. [Service]
  5. Type=simple
  6. User=prometheus
  7. ExecStart=/opt/alertmanager/alertmanager --config.file=/opt/alertmanager/alertmanager.yml --storage.path=/opt/alertmanager/data
  8. Restart=on-failure
  9. [Install]
  10. WantedBy=multi-user.target

启动服务:

  1. systemctl start alertmanager

检查运行状态:
Alertmanager 启动后可通过 9093 端口进行访问。

普罗米修斯中的相关配置:

  1. alerting:
  2. alertmanagers:
  3. - static_configs:
  4. - targets: ["172.16.138.55:9093"]

重启 Prometheus 服务,若是配置成功,可从 http://<ip-addr>:9090/config 查看 alerting 配置是否生效。

创建配置文件

  1. [root@cdmonkey03 ~]# vim /opt/alertmanager/alertmanager.yml
  2. global:
  3. resolve_timeout: 5m # 处置超时时间,缺省为五分钟
  4. smtp_smarthost: 'smtp.sina.com:25' # 邮箱 SMTP 服务器
  5. smtp_from: 'cdmonkey@sina.com' # 发送方邮箱
  6. smtp_auth_username: 'cdmonkey@sina.com' # 登录用户账号
  7. smtp_auth_password: '******' # 账号密码
  8. wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企业微信地址
  9. # 定义路由树信息:
  10. route:
  11. group_by: ['alertname'] # 报警分组依据
  12. group_wait: 10s # 最初,就是第一次等待多久时间发送一组警报的通知
  13. group_interval: 10s # 发送新警报前之等待时间
  14. repeat_interval: 1h # 发送重复警报之周期 对于邮件配置中,不能设置过低,会被拒
  15. receiver: 'web.hook' # 发送警报的接收器名称
  16. # 定义警报接收器者信息:
  17. receivers:
  18. - name: 'web.hook'
  19. webhook_configs:
  20. - url: 'http://127.0.0.1:5001/'
  21. inhibit_rules:
  22. - source_match:
  23. severity: 'critical'
  24. target_match:
  25. severity: 'warning'
  26. equal: ['alertname', 'dev', 'instance']

一个 inhibition 规则是在同另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签。

配置文件参考:

https://github.com/yeaheo/prometheus-huang/blob/master/config/alertmanager/alertmanager.yml

检测规则语法

Prometheus 还提供一个有用的工具 promtool,可用于检查我们规则编写是否正确。

  1. go get github.com/prometheus/prometheus/cmd/promtool
  2. promtool check rules /etc/prometheus/prometheus.rules.yml

Cluster

https://blog.pytool.com/post/prometheus/prometheus-altermanager

三台机器:

  1. 172.16.138.11 alert01
  2. 172.16.138.18 alert02
  3. 172.16.138.79 alert03

安装过程同上,不再赘述,主要是服务启动文件:

  1. # 172.16.138.11
  2. # vim /usr/lib/systemd/system/alertmanager.service
  3. [Unit]
  4. Description=Alertmanager
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. User=prometheus
  9. ExecStart=/opt/alertmanager/alertmanager \
  10. --config.file=/opt/alertmanager/alertmanager.yml \
  11. --storage.path=/opt/alertmanager/data \
  12. --cluster.listen-address=172.16.138.11:12001 \
  13. --log.level=debug
  14. Restart=on-failure
  15. [Install]
  16. WantedBy=multi-user.target
  1. # 172.16.138.18
  2. ExecStart=/opt/alertmanager/alertmanager \
  3. --config.file=/opt/alertmanager/alertmanager.yml \
  4. --storage.path=/opt/alertmanager/data \
  5. --cluster.listen-address=172.16.138.18:12001 \
  6. --cluster.peer=172.16.138.11:12001 \
  7. --log.level=debug
  1. # 172.16.138.79
  2. ExecStart=/opt/alertmanager/alertmanager \
  3. --config.file=/opt/alertmanager/alertmanager.yml \
  4. --storage.path=/opt/alertmanager/data \
  5. --cluster.listen-address=172.16.138.79:12001 \
  6. --cluster.peer=172.16.138.11:12001 \
  7. --log.level=debug

说明:命令启动参数不要使用引号,否则会报语法错误。

其中:

  1. --cluster.listen-address # 当前实例集群服务监听地址
  2. --cluster.peer # 初始化时关联的其它实例的集群服务地址

配置 Prometheus

  1. alerting:
  2. alertmanagers:
  3. - static_configs:
  4. - targets:
  5. - 172.16.138.11:9093
  6. - 172.16.138.18:9093
  7. - 172.16.138.79:9093

微信报警

  1. receivers:
  2. ...
  3. - name: 'wechat'
  4. wechat_configs:
  5. - corp_id: 'wx199a931d3f700098'
  6. to_party: '1'
  7. to_user: "3"
  8. agent_id: '1000004'
  9. api_secret: 'M5FDNO3wGYBMBFwmEbhwa0jRcKnJUaCRd3Yzwa9a0lI'
  10. send_resolved: true

认证

所谓认证,就是配置一个简单的用户名及密码用于页面登录。

首先是配置 Alertmanager。创建一个 password.yml 文件用于存放用户名及口令。

  1. basic_auth_users:
  2. suixingpay: $2a$12$CUQFtHQtZLx9yLZYHw1q7.Lk1MLcq.FCoyQy0OoEaNPcpg9nhJKmy

其中 username 为自定义用户名,明文写;: 后为加密后的口令,可使用 https://bcrypt-generator.com 这个工具。

若是不使用上面那个线上工具,就需要使用命令行工具 htpasswd

  1. yum install -y httpd-tools

而后需要修改 Alertmanager 的服务 Unit 文件:

  1. # vim /usr/lib/systemd/system/alertmanager.service
  2. ExecStart=/opt/alertmanager/alertmanager \
  3. --config.file=/opt/alertmanager/alertmanager.yml \
  4. --storage.path=/opt/alertmanager/data \
  5. --data.retention=5h \
  6. --web.config.file=/opt/alertmanager/password.yml \ # <-- 新增上这一行
  7. --cluster.listen-address=

还需要配置普罗米修斯,否则不能把报警信息发送给 Alertmanager(报出 401 Unauthorized 错误):

  1. # vim prometheus.yml
  2. alerting:
  3. alertmanagers:
  4. - static_configs:
  5. - targets:
  6. - localhost:9093
  7. basic_auth: # <-- 这部分就是 Alertmana 认证配置
  8. username: 'suixingpay'
  9. password: '...' # 注意这里是密码原文,而不是密文

最后还需要配置 Karma,否则显示不出报警条目。

  1. # vim karma.yaml
  2. - name: cogoam
  3. cluster: COGO
  4. uri: http://dh.suixingpay.com/cogoam
  5. timeout: 1m
  6. proxy: true
  7. headers:
  8. Authorization: "Basic c3VpeGluZ3BheTpTdWl4aW5ncGF5QDIwMjU="

可使用这个工具:

https://www.debugbear.com/basic-auth-header-generator

其他

Nginx Proxy

  1. location /cogoam/ {
  2. gzip_types *;
  3. proxy_set_header Host $host:$server_port;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header X-Real-PORT $remote_port;
  6. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7. proxy_pass http://10.80.1.221:9093/;
  8. }

排错

安装 0.21.0 后,无法启动服务,报错信息:

  1. Aug 27 11:31:42 ZF-ITYW-ALERTMANAGER-2c7b74 alertmanager: level=error ts=2020-08-27T03:31:42.388Z caller=main.go:241 msg="unable to initialize gossip mesh"
  2. err="create memberlist: Failed to get final advertise address: No private IP address found, and explicit IP not provided"

需要于服务配置文件中配置以下启动参数关闭集群服务:

  1. --cluster.listen-address=

https://github.com/prometheus/alertmanager/issues/1610


参考内容:

https://www.cnblogs.com/longcnblogs/p/9620733.html
https://aeric.io/post/prometheus-alertmanager-config

认证部分请参考:

https://www.cnblogs.com/wdgde/p/17688519.html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注