Prometheus监控系统:nginx-prometheus-exporter 服务的告警触发(邮件告警)

为了利用 Prometheus 对 nginx-prometheus-exporter 实例的服务状态进行全面监控,并在出现异常时及时响应,我这里引入Alertmanager作为警报管理系统。
Alertmanager 不仅能够接收来自 Prometheus 的警报,还能依据预设策略对警报进行聚合、抑制和静默处理。在此基础上,我特别配置了内置的email-receiver接收器,用来实现关键警报信息的即时邮件通知,确保运维团队能够在第一时间收到警报,快速定位并解决问题,从而有效提升系统的稳定性和响应速度。


部署alertmanager

[root@dev-centos7-shanghai-area1 packages]# wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz
[root@dev-centos7-shanghai-area1 packages]# tar -zxvf alertmanager-0.23.0.linux-amd64.tar.gz
[root@dev-centos7-shanghai-area1 packages]# mv alertmanager-0.23.0.linux-amd64 /data/app/
[root@dev-centos7-shanghai-area1 packages]# cd /data/app/alertmanager-0.23.0.linux-amd64
[root@dev-centos7-shanghai-area1 alertmanager-0.23.0.linux-amd64]# ll -h
总用量 53M
-rwxr-xr-x 1 alertmanager alertmanager  30M 8月  25 2021 alertmanager
-rwxr-xr-x 1 alertmanager alertmanager 1.1K 7月  10 14:50 alertmanager.yml
-rwxr-xr-x 1 alertmanager alertmanager  348 7月  10 10:14 alertmanager.yml.bak
-rwxr-xr-x 1 alertmanager alertmanager  23M 8月  25 2021 amtool
drwxr-xr-x 2 alertmanager alertmanager   35 7月  10 11:10 data
-rwxr-xr-x 1 alertmanager alertmanager  12K 8月  25 2021 LICENSE
-rwxr-xr-x 1 alertmanager alertmanager  457 8月  25 2021 NOTICE
[root@dev-centos7-shanghai-area1 alertmanager-0.23.0.linux-amd64]# 

配置alertmanager服务

[root@dev-centos7-shanghai-area1 alertmanager-0.23.0.linux-amd64]# groupadd alertmanager
[root@dev-centos7-shanghai-area1 alertmanager-0.23.0.linux-amd64]# useradd -r -g alertmanager -s /sbin/nologin alertmanager
[root@dev-centos7-shanghai-area1 alertmanager-0.23.0.linux-amd64]# chown -R alertmanager:alertmanager /data/app/alertmanager-0.23.0.linux-amd64/
[root@dev-centos7-shanghai-area1 alertmanager-0.23.0.linux-amd64]# chmod +x -R /data/app/alertmanager-0.23.0.linux-amd64/
[root@dev-centos7-shanghai-area1 ~]# vim /etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager Service
After=network.target

[Service]
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=/data/app/alertmanager-0.23.0.linux-amd64/alertmanager --config.file=/data/app/alertmanager-0.23.0.linux-amd64/alertmanager.yml --cluster.advertise-address=198.51.100.128:9093
Restart=on-failure
RestartSec=5s
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

[root@dev-centos7-shanghai-area1 alertmanager-0.23.0.linux-amd64]# systemctl enable alertmanager.service --now

配置alertmanager.yml

# alertmanager.yml - Alertmanager configuration file
global:
  # 这里指定Alertmanager的通告地址和端口
  # cluster_advertise: 198.51.100.128:9093
  # 如果报警在5分钟后不再触发,则自动关闭报警,在这段时间内,即使报警再次触发也不会重新发送通知
  resolve_timeout: 5m

# 配置邮件接收器,定义报警的路由逻辑,所有报警都会被路由到email-receiver接收器
route:
  group_by: ['alertname', 'cluster', 'service']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: email-receiver

# 定义接收器,email_configs 包含了邮件配置
receivers:
- name: 'email-receiver'
  email_configs:
  - to: 'richard@ponfey.com'
    send_resolved: true
    from: 'alert@ponfey.com'
    smarthost: 'smtp.feishu.cn:465' # 飞书邮件服务器(SMTP)
    auth_identity: 'alert@ponfey.com'
    auth_secret: 'r0k5KCs!EX#a' # 生成报警专用的客户端授权码
#    require_tls: true
    require_tls: false # 修改为 false,这里需要注意飞书邮件服务器 SMTP 465 不支持STARTTLS

# 配置抑制规则和路由规则可以在这里添加
inhibit_rules: []

prometheus.yml 新增配置 Alertmanager

# prometheus.yml - Prometheus server configuration file
global:
  scrape_interval:     15s # 定义抓取目标频率,单位是秒,配置每15秒抓取一次数据
  evaluation_interval: 15s # 定义规则评估频率,单位是秒,配置每15秒评估一次报警规则

# 抓取配置,用于定义如何抓取监控目标的数据
scrape_configs:
  - job_name: 'Prometheus_Service_Port_9090' # 定义了一个名为Prometheus_Service_Port_9090的抓取任务
    static_configs: # 静态配置的目标列表,目标是直接抓取数据的地方
      - targets: ['localhost:9090'] # 目标列表,将抓取本地主机上运行在9090端口上的Prometheus服务器自身的指标

  - job_name: 'Nginx_Prometheus_Exporter_Port_9113' # 定义了抓取Nginx Prometheus Exporter的任务
    static_configs:
      - targets: ['203.0.113.128:9113'] # 目标列表,抓取远程主机上运行在9113端口上的Nginx Prometheus Exporter的指标

# 规则文件配置,用于加载自定义的告警规则
rule_files:
  - "/etc/prometheus/rules/alert_rules.yml" # 引用告警规则文件

# 配置Alertmanager,Prometheus将警报发送给Alertmanager
alerting:
  alertmanagers:
  - static_configs:
    - targets:
#      - "alertmanager_host:198.51.100.128:9093" # Alertmanager的实际地址和端口号
      - "localhost:9093"  # Alertmanager 在同一台主机上运行,并且监听在默认端口 9093

在 rules/alert_rules.yml 新增配置

# alert_rules.yml - Prometheus alerting rules configuration file
groups:
- name: NginxAlerts # 规则组名称
  rules:
  # 当Nginx Prometheus Exporter服务不可用时触发报警
  - alert: NginxExporterDown # 报警名称
    expr: up{job="Nginx_Prometheus_Exporter_Port_9113"} == 0 # 表达式,检测Nginx Prometheus Exporter的up指标是否为0
    for: 30s # 如果表达式结果为真,需持续30秒才会触发报警
    labels: # 报警标签
      severity: critical # 报警严重程度
    annotations: # 报警注释
      summary: "Nginx Prometheus Exporter is down on {{ $labels.instance }}" # 报警摘要
      description: "The Nginx Prometheus Exporter has been down for more than 30 seconds." # 报警详细描述

alertmanager-0.23.0.linux-amd64 相关问题记录

1、配置alertmanager服务前手动运行遇到问题:

 [root@dev-centos7-shanghai-area1 alertmanager-0.23.0.linux-amd64]# ./alertmanager --config.file=./alertmanager.yml

level=info ts=2024-07-10T02:29:06.418Z caller=main.go:225 msg="Starting Alertmanager" version="(version=0.23.0, branch=HEAD, revision=61046b17771a57cfd4c4a51be370ab930a4d7d54)" level=info ts=2024-07-10T02:29:06.418Z caller=main.go:226 build_context="(go=go1.16.7, user=root@e21a959be8d2, date=20210825-10:48:55)" level=warn ts=2024-07-10T02:29:06.424Z caller=cluster.go:177 component=cluster err="couldn't deduce an advertise address: no private IP found, explicit advertise addr not provided" level=error ts=2024-07-10T02:29:06.427Z caller=main.go:250 msg="unable to initialize gossip mesh" err="create memberlist: Failed to get final advertise address: No private IP address found, and explicit IP not provided"

分析:问题在于Alertmanager尝试自动发现网络接口的私有IP地址时失败了。可能是因为系统上没有配置任何网络接口,或者Alertmanager未能识别出有效的网络接口。

思路:Alertmanager的配置文件中显式地指定一个通告地址(advertise address)。这并不意味着Alertmanager会使用这个地址进行网络通信,而是告诉Alertmanager当其他实例尝试加入集群时,它们应该使用哪个地址来找到当前的Alertmanager实例。

解决方式:阅读release,熟悉版本特性,使用 cluster.advertise-address 参数

[root@dev-centos7-shanghai-area1 alertmanager-0.23.0.linux-amd64]# ./alertmanager --config.file=./alertmanager.yml --cluster.advertise-address=198.51.100.128:9093
上一篇
下一篇