Loading... > alertmanager 是告警处理模块,但是告警消息的发送方法并不丰富。如果需要将告警接入飞书,钉钉,微信等,还需要有相应的SDK适配。prometheusAlert就是这样的SDK,可以将告警消息发送到各种终端上。 > Prometheus Alert 是开源的运维告警中心消息转发系统,支持主流的监控系统 prometheus,日志系统 Graylog 和数据可视化系统 Grafana 发出的预警消息。通知渠道支持钉钉、微信、华为云短信、腾讯云短信、腾讯云电话、阿里云短信、阿里云电话等。 > > 项目地址: > https://github.com/feiyu563/PrometheusAlert ## 安装 ### 下载并解压 ```bash wget https://github.com/feiyu563/PrometheusAlert/releases/download/v4.9/linux.zip unzip linux.zip mv ./linux /usr/local/prometheus-alert ``` ### 通过服务启动 创建服务 `vim /etc/systemd/system/prometheus-alert.service`,要根据实际情况修改启动参数 ```bash [Unit] Description=Prometheus Alert Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple WorkingDirectory=/usr/local/prometheus-alert ExecStart=/usr/local/prometheus-alert/PrometheusAlert [Install] WantedBy=multi-user.target ``` 创建用户并赋权 ```bash useradd prometheus -M -s /sbin/nologin chown prometheus:prometheus /usr/local/prometheus-alert -R chmod 755 /usr/local/prometheus-alert -R ``` 设置开机启动并启动服务 ```bash systemctl enable prometheus-alert service prometheus-alert start service prometheus-alert status ``` ## 反向代理 > Prometheus Alert 默认使用 `8080` 端口,如果不想使用反向代理,则需要在防火墙上放行这个端口(不建议允许公网直接访问),也可以通过修改配置文件来修改端口号。 新增 nginx 站点配置,反向代理配置如下: ``` location / { proxy_redirect off; proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Origin http://127.0.0.1:8080; proxy_set_header Host 127.0.0.1:8080; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; access_log /home/wwwlogs/prometheus-alert.log; } ``` ## 飞书告警 ### 默认模版修改 打开并登录管理页面,进入 “模版管理” - “自定义模版”,修改 `prometheus-fs` 模版: ``` {{ $var := .externalURL}}{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}<font color="green">**告警恢复**</font> 告警名称:[{{$v.labels.alertname}}]({{$v.generatorURL}}) 告警状态:<font color="green">**{{$v.status}}**</font> ✔ 开始时间:{{GetCSTtime $v.startsAt}} 结束时间:{{GetCSTtime $v.endsAt}} 告警实例:**{{$v.labels.instance}} ** 告警详情:**{{$v.annotations.description}}**{{else}}<font color="red">**故障告警**</font> 告警名称:[{{$v.labels.alertname}}]({{$v.generatorURL}}) 告警状态:<font color="red">**{{$v.status}}** 🔥🔥🔥</font> > {{if eq $v.status "firing"}}<font color="red">**{{$v.labels.severity}}** </font>{{else}}<font color="yellow">**{{$v.labels.severity}}**</font> ⚠⚠⚠{{end}} 开始时间:{{GetCSTtime $v.startsAt}} 告警实例:**{{$v.labels.instance}}** 告警详情:**{{$v.annotations.description}}** [[ 静默该告警 ]](https://alertmanager.internal.qwerto.cc/#/alerts){{end}}{{end}} ``` 保存模版,返回 “模版管理” - “自定义模版” 界面,复制 `prometheus-fs` 模版地址 ``` https://prometheus-alert.internal.qwerto.cc/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=飞书机器人地址 ``` ### 创建飞书机器人 创建一个飞书 WebHook 机器人,获取到飞书机器人地址,将飞书机器人地址拼接进上面的模版地址中,例如 ``` https://prometheus-alert.internal.qwerto.cc/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/0599935-862c-43a9-94dd-14544666607e ``` ### 修改 Alertmanager 配置文件 修改 alertmanager 的配置文件 `/usr/local/alertmanager/alertmanager.yml` ,配置 `receivers` ```yaml global: resolve_timeout: 5m # 持续5分钟没收到告警信息后认为问题已解决 route: group_by: ['instance'] # 分组,处于同组的告警会被合并为一个通知。这里设置instance相同的告警合并为同一个通知 group_wait: 10s # 时间窗口,窗口内同一个分组的所有消息会被合并为同一个通知 group_interval: 30s # 每个分组中最多每30秒发送一条警报 repeat_interval: 1h # 发送报警间隔 receiver: 'web.hook.prometheusalert' # 对应下面的告警接收者名称 receivers: - name: 'web.hook.prometheusalert' # 告警接收者名称 webhook_configs: - url: 'https://prometheus-alert.internal.qwerto.cc/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/055c9535-862c-43e9-94cd-14544635907e' # 模版地址 ``` 重载 alertmanager,手动触发一次告警,测试是否有告警推送至飞书  最后修改:2024 年 05 月 08 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏