PrometheusAlert 多渠道告警通知工具

Prometheus Alert 简介

PrometheusAlert是开源的运维告警中心消息转发系统,支持主流的监控系统PrometheusZabbix,日志系统Graylog2Graylog3和数据可视化系统Grafana发出的预警消息,支持将收到的这些消息发送到钉钉,微信,腾讯短信,腾讯电话,阿里云短信,阿里云电话,华为短信等。

PrometheusAlert 特性

  • 支持多种消息来源,目前主要有PrometheusZabbixGraylog2Graylog3Grafana
  • 支持多种类型的发送目标,支持钉钉,微信,腾讯短信,腾讯语音,阿里云短信,阿里云语音,华为短信。
  • 针对Prometheus增加了告警级别,并且支持按照不同级别发送消息到不同目标对象。
  • 简化Prometheus分组配置,支持按照具体消息发送到单个或多个接收方。
  • 增加手机号码配置项和号码自动轮询配置,可固定发送给单一个人告警信息,也可以通过自动轮询的方式发送到多个人员且支持按照不同日期发送到不同人员。
  • 增加Dashboard
  • 增加代理支持

安装部署PrometheusAlert

PrometheusAlert 可以部署在本地和云平台上,支持windowslinux、公有云、私有云、混合云、容器和kubernetes。你可以根据实际场景或需求,选择相应的方式来部署 PrometheusAlert

使用容器部署

1
2
3
4
5
6
7
8
9
10
11
#clone项目源代码
git clone https://github.com/feiyu563/PrometheusAlert.git

#创建配置文件
mkdir /etc/prometheusalert-center/
cp PrometheusAlert/conf/app.conf /etc/prometheusalert-center/

#启动PrometheusAlert并挂载配置文件
docker run -d -p 8080:8080 -v /etc/prometheusalert-center:/app/conf --name prometheusalert-center feiyu563/prometheus-alert:latest

#启动后可使用浏览器打开以下地址查看:http://127.0.0.1:8080

在linux系统中部署

1
2
3
4
5
6
7
8
#clone项目源代码
git clone https://github.com/feiyu563/PrometheusAlert.git

#进入程序目录并运行PrometheusAlert
cd PrometheusAlert/example/linux/
./PrometheusAlert #后台运行请执行nohup ./PrometheusAlert &

#启动后可使用浏览器打开以下地址查看:http://127.0.0.1:8080

在windows系统中运行

1
2
3
4
5
6
7
#clone项目源代码
git clone https://github.com/feiyu563/PrometheusAlert.git

#进入程序目录并双击运行 PrometheusAlert.exe即可
cd PrometheusAlert/example/windows/

#启动后可使用浏览器打开测试地址:http://127.0.0.1:8080

在kubernetes中运行

1
2
3
4
#Kubernetes中运行可以直接执行以下命令行即可
kubectl app -n monitoring -f https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/example/kubernetes/PrometheusAlert-Deployment.yaml

#启动后可使用浏览器打开以下地址查看:http://[prometheus-alert-center]:8080

使用helm部署

1
2
3
4
5
6
7
8
9
10
#clone项目源代码
git clone https://github.com/feiyu563/PrometheusAlert.git
cd PrometheusAlert/example/helm/prometheusalert

#如需修改配置文件,请更新config中的app.conf
#helm部署模版支持配置Ingress域名,可在values.yaml中进行配置
#配置修改完成后,通过以下命令启动即可
helm install -n monitoring .

#启动后可使用浏览器打开以下地址查看: http://[Ingress_url]:[Ingress_port]

PrometheusAlert接口说明

PrometheusAlert 目前提供以下几类接口,分别对应各自接入端,负责解析各自接口传入或者传出的消息。

prometheus接口

1
2
/prometheus/alert   处理Prometheus告警消息转发到默认接口
/prometheus/router 处理Prometheus AlertManager router消息指定接收端接口

zabbix接口

1
/zabbix/alert  处理Zabbix告警消息转发默认接口

grafana接口

1
2
3
4
5
6
7
8
/grafana/phone     处理Grafana告警消息转发到腾讯云电话接口(v3.0版本将废弃)
/grafana/dingding 处理Grafana告警消息转发到钉钉接口
/grafana/weixin 处理Grafana告警消息转发到微信接口
/grafana/txdx 处理Grafana告警消息转发到腾讯云短信接口
/grafana/txdh 处理Grafana告警消息转发到腾讯云电话接口
/grafana/hwdx 处理Grafana告警消息转发到华为云短信接口
/grafana/alydx 处理Grafana告警消息转发到阿里云短信接口
/grafana/alydh 处理Grafana告警消息转发到阿里云电话接口

graylog2接口

1
2
3
4
5
6
7
8
9
10
特别说明: graylog2接口针对 graylog版本 <= 3.0.x

/graylog2/phone 处理Graylog2告警消息转发到腾讯云电话接口(v3.0版本将废弃)
/graylog2/dingding 处理Graylog2告警消息转发到钉钉接口
/graylog2/weixin 处理Graylog2告警消息转发到微信接口
/graylog2/txdx 处理Graylog2告警消息转发到腾讯云短信接口
/graylog2/txdh 处理Graylog2告警消息转发到腾讯云电话接口
/graylog2/hwdx 处理Graylog2告警消息转发到华为云短信接口
/graylog2/alydx 处理Graylog2告警消息转发到阿里云短信接口
/graylog2/alydh 处理Graylog2告警消息转发到阿里云电话接口

graylog3接口

1
2
3
4
5
6
7
8
9
10
特别说明: graylog3接口针对 graylog版本 >= 3.1.x

/graylog3/phone 处理Graylog3告警消息转发到腾讯云电话接口(v3.0版本将废弃)
/graylog3/dingding 处理Graylog3告警消息转发到钉钉接口
/graylog3/weixin 处理Graylog3告警消息转发到微信接口
/graylog3/txdx 处理Graylog3告警消息转发到腾讯云短信接口
/graylog3/txdh 处理Graylog3告警消息转发到腾讯云电话接口
/graylog3/hwdx 处理Graylog3告警消息转发到华为云短信接口
/graylog3/alydx 处理Graylog3告警消息转发到阿里云短信接口
/graylog3/alydh 处理Graylog3告警消息转发到阿里云电话接口

语音短信回调接口

1
/tengxun/status     处理腾讯云语音短信回调接口,负责失败后重试

接入配置

Prometheus 接入配置
在 Prometheus Alertmanager 中启用 Webhook,可参考如下模板:

1
2
3
4
5
6
7
8
9
10
11
12
global:
resolve_timeout: 5m
route:
group_by: ['instance']
group_wait: 10m
group_interval: 10s
repeat_interval: 10m
receiver: 'web.hook.prometheusalert'
receivers:
- name: 'web.hook.prometheusalert'
webhook_configs:
- url: 'http://[prometheusalert_url]:8080/prometheus/alert'

Prometheus Server 的告警rules配置,可参考如下模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
groups:
1. name: node_alert
rules:
2. alert: 主机CPU告警
expr: node_load1 > 1
labels:
name: prometheusalertcenter
level: 3 #告警级别,告警级别定义 0 信息,1 警告,2 一般严重,3 严重,4 灾难
annotations:
description: "{{ $labels.instance }} CPU load占用过高" #告警信息
mobile: 15888888881,15888888882,15888888883 #告警发送目标手机号(需要设置电话和短信告警级别)
ddurl: "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #支持添加多个钉钉机器人告警,用,号分割即可,如果留空或者未填写,则默认发送到配置文件中填写的钉钉器人地址
wxurl: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxxxx-xxxxxx-xxxxxx,https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx-xxxx-xxxxxxx-xxxxx" #支持添加多个企业微信机器人告警,用,号分割即可,如果留空或者未填写,则默认发送到配置文件中填写的企业微信机器人地址

PrometheusAlert配置文件说明

PrometheusAlert配置文件中定义了丰富的配置项,默认配置即可满足开箱即用。并且配置文件中每项配置都加入了详细的注释,非常明确的指出了每个配置项的功能和定义。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#---------------------↓全局配置-----------------------
appname = PrometheusAlert
#监听端口
httpport = 8080
runmode = dev
#设置代理 proxy = http://123.123.123.123:8080
proxy =
#开启JSON请求
copyrequestbody = true
#告警消息标题
title=PrometheusAlert
#链接到告警平台地址
GraylogAlerturl=http://graylog.org
#钉钉告警 告警logo图标地址
logourl=https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png
#钉钉告警 恢复logo图标地址
rlogourl=https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png
#短信告警级别(等于3就进行短信告警) 告警级别定义 0 信息,1 警告,2 一般严重,3 严重,4 灾难
messagelevel=3
#电话告警级别(等于4就进行语音告警) 告警级别定义 0 信息,1 警告,2 一般严重,3 严重,4 灾难
phonecalllevel=4
#默认拨打号码
defaultphone=15395105573
#故障恢复是否启用电话通知0为关闭,1为开启
phonecallresolved=0
#自动告警抑制(自动告警抑制是默认同一个告警源的告警信息只发送告警级别最高的第一条告警信息,其他消息默认屏蔽,这么做的目的是为了减少相同告警来源的消息数量,防止告警炸弹,0为关闭,1为开启)
silent=0
#是否前台输出file or console
logtype=file
#日志文件路径
logpath=logs/prometheusalertcenter.log
#转换Prometheus告警消息的时区为CST时区(如默认已经是CST时区,请勿开启)
prometheus_cst_time=0

#---------------------↓webhook-----------------------
#是否开启钉钉告警通道,可同时开始多个通道0为关闭,1为开启
open-dingding=1
#默认钉钉机器人地址
ddurl=https://oapi.dingtalk.com/robot/send?access_token=xxxxx
#是否开启 @所有人(0为关闭,1为开启)
dd_isatall=1

#是否开启微信告警通道,可同时开始多个通道0为关闭,1为开启
open-weixin=1
#默认企业微信机器人地址
wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx

#---------------------↓腾讯云接口-----------------------
#是否开启腾讯云短信告警通道,可同时开始多个通道0为关闭,1为开启
open-txdx=1
#腾讯云短信接口key
TXY_DX_appkey=xxxxx
#腾讯云短信模版ID 腾讯云短信模版配置可参考 prometheus告警:{1}
TXY_DX_tpl_id=xxxxx
#腾讯云短信sdk app id
TXY_DX_sdkappid=xxxxx
#腾讯云短信签名 根据自己审核通过的签名来填写
TXY_DX_sign=腾讯云

#是否开启腾讯云电话告警通道,可同时开始多个通道0为关闭,1为开启
TXY_DH_open-txdh=1
#腾讯云电话接口key
TXY_DH_phonecallappkey=xxxxx
#腾讯云电话模版ID
TXY_DH_phonecalltpl_id=xxxxx
#腾讯云电话sdk app id
TXY_DH_phonecallsdkappid=xxxxx

#---------------------↓华为云接口-----------------------
#是否开启华为云短信告警通道,可同时开始多个通道0为关闭,1为开启
open-hwdx=1
#华为云短信接口key
HWY_DX_APP_Key=xxxxxxxxxxxxxxxxxxxxxx
#华为云短信接口Secret
HWY_DX_APP_Secret=xxxxxxxxxxxxxxxxxxxxxx
#华为云APP接入地址(端口接口地址)
HWY_DX_APP_Url=https://rtcsms.cn-north-1.myhuaweicloud.com:10743
#华为云短信模板ID
HWY_DX_Templateid=xxxxxxxxxxxxxxxxxxxxxx
#华为云签名名称,必须是已审核通过的,与模板类型一致的签名名称,按照自己的实际签名填写
HWY_DX_Signature=华为云
#华为云签名通道号
HWY_DX_Sender=xxxxxxxxxx

#---------------------↓阿里云接口-----------------------
#是否开启阿里云短信告警通道,可同时开始多个通道0为关闭,1为开启
open-alydx=1
#阿里云短信主账号AccessKey的ID
ALY_DX_AccessKeyId=xxxxxxxxxxxxxxxxxxxxxx
#阿里云短信接口密钥
ALY_DX_AccessSecret=xxxxxxxxxxxxxxxxxxxxxx
#阿里云短信签名名称
ALY_DX_SignName=阿里云
#阿里云短信模板ID
ALY_DX_Template=xxxxxxxxxxxxxxxxxxxxxx

#是否开启阿里云电话告警通道,可同时开始多个通道0为关闭,1为开启
open-alydh=1
#阿里云电话主账号AccessKey的ID
ALY_DH_AccessKeyId=xxxxxxxxxxxxxxxxxxxxxx
#阿里云电话接口密钥
ALY_DH_AccessSecret=xxxxxxxxxxxxxxxxxxxxxx
#阿里云电话被叫显号,必须是已购买的号码
ALY_DX_CalledShowNumber=xxxxxxxxx
#阿里云电话文本转语音(TTS)模板ID
ALY_DH_TtsCode=xxxxxxxx

更多配置请参考PrometheusAlert项目github

-------------本文结束感谢您的阅读-------------