PrometheusAlert是开源的运维告警中心消息转发系统,支持主流的监控系统Prometheus、Zabbix,日志系统Graylog2,Graylog3、数据可视化系统Grafana、SonarQube。阿里云-云监控,以及所有支持WebHook接口的系统发出的预警消息,支持将收到的这些消息发送到钉钉,微信,email,飞书,腾讯短信,腾讯电话,阿里云短信,阿里云电话,华为短信,百度云短信,容联云电话,七陌短信,七陌语音,TeleGram,百度Hi(如流)等。
-
如果这个项目能为您带来帮助,我将感到非常荣幸!同时非常欢迎您加入PrometheusAlert全家桶的微信群一起探讨关于PrometheusAlert新一期的开发计划。
-
PrometheusAlert的成长离不开所有爱好运维和开发的朋友们的支持!如果您也对这个项目感兴趣,请点击一下 Star 以示鼓励,谢谢
应用信息和构建相关的命令都写入了Makefile,请确保安装make
, git
, go
命令。如有特定需要,请自行修改Makefile。
# 默认
make
# 构建
make build
# 清理构建
make clean
# 运行 fmt/vet/test
make format/vet/test
# 构建镜像,推送镜像,运行镜像
make docker/docker-push/docker-test
# 本地测试运行
make clean && make build
copy conf/app-example.conf conf/app.conf
./PrometheusAlert
# 测试应用健康
curl http://localhost:8080/health
#打开PrometheusAlert releases页面,根据需要选择需要的版本下载到本地解压并进入解压后的目录
如linux版本(https://github.com/feiyu563/PrometheusAlert/releases/download/v4.9/linux.zip)
# wget https://github.com/feiyu563/PrometheusAlert/releases/download/v4.9/linux.zip && unzip linux.zip &&cd linux/
#运行PrometheusAlert
# ./PrometheusAlert (#后台运行请执行 nohup ./PrometheusAlert &)
#启动后可使用浏览器打开以下地址查看:http://127.0.0.1:8080
#默认登录帐号和密码在app.conf中有配置
# 使用 supervisor 来守护启动。
# 配置参考 example/supervisor/prometheusalert.ini
# 如果需要将日志输出到控制台,请修改 app.conf 中 logtype=console
配置文件 app.conf 的内容可以使用环境变量的方式初始化。
所设置的变量前缀必须以 PA_
开始,后面使用配置文件的配置项名称,但是需要将配置项中所有的 -
替换为 _
。
特别注意的是使用环境变量对配置项中的大小写并不敏感。
示例
docker run -d \
-p 8080:8080 \
-e PA_LOGIN_USER=prometheusalert \
-e PA_LOGIN_PASSWORD=prometheusalert \
-e PA_TITLE=PrometheusAlert \
-e PA_OPEN_FEISHU=1 \
-e PA_OPEN_DINGDING=1 \
-e PA_OPEN_WEIXIN=1 \
feiyu563/prometheus-alert:latest
所有的配置文件内容请点击此处查看
- 支持任意包含WebHook接口系统的消息作为消息来源,常见的如Prometheus,Zabbix,Graylog2,Graylog3,Grafana,SonarQube和其他WebHook接口的系统。
- 支持多种类型的发送目标,支持钉钉,企业微信,email,飞书,腾讯短信,腾讯语音,阿里云短信,阿里云语音,华为短信,百度云短信,容联云电话,七陌短信,七陌语音,TeleGram,百度Hi(如流)。
- 针对Prometheus增加了告警级别,并且支持按照不同级别发送消息到不同目标对象。
- 简化Prometheus分组配置,支持按照具体消息发送到单个或多个接收方。
- 增加手机号码配置项和号码自动轮询配置,可固定发送给单一个人告警信息,也可以通过自动轮询的方式发送到多个人员且支持按照不同日期发送到不同人员。
- 增加Dashboard,提供配置测试,告警消息模版自定义,告警模版测试等功能
- 增加自定义告警消息模版支持,可以通过自定义模版对任意服务WebHook进行支持
- 增加代理支持
- 增加支持mysql、sqlite3(默认)、postgres作为模版存储,便于集群化部署
- 增加支持钉钉,企业微信的@某人功能
- 增加支持阿里云-云监控告警
- 增加随机轮询,目前仅针对ddurl,fsurl,wxurl有效,默认情况下如果上述Url配置的是多个地址,则多个地址全部发送,如开启该选项,则从多个地址中随机取一个地址发送,主要是为了避免消息发送频率过高导致触发部分机器人拦截消息
- 增加支持将Prometheus告警记录写入到Elasticsearch7.x,可通过Kibana进行界面查看告警记录和配置表格导出。
- 增加支持将Gitlab webhook event推送到企微和钉钉。
- 增加告警路由和告警记录功能,可通过页面查看告警历史和操作告警消息路由。
- 增加告警语音播报插件。
- 增加支持飞书机器人应用。
- 增加告警组,可以将通知媒介写到告警组里面,便于配置和修改。
- 增加热加载配置接口
- 增加钉钉加签
PrometheusAlert的原理就是通过自定义模版接口/prometheusalert
接收各种告警系统或者任何带有WebHook功能的系统发来的消息,然后将收到的消息经过自定义模板渲染成消息文本,最终转发给不同的接收目标。
一般情况下如果使用的是钉钉,企业微信、飞书等机器人作为接收目标的,可以不去配置PrometheusAlert的配置文件app.conf;但是如果需要使用如短信,电话,邮箱等功能,则需要先配置好app.conf中的相关配置项方可使用。
- 1.安装好PrometheusAlert 参考:安装部署PrometheusAlert
- 2.配置 app.conf [可选] 参考:【 app.conf 默认参数配置】
- 3.配置告警系统接入PrometheusAlert 参考:【告警系统接入PrometheusAlert配置】
项目源码扩展
感谢feiyu563 的开源分享精神,我在他的项目的基础上,作出以下改进:
- 增加支持远程webhook http basic auth
新功能测试
vi /etc/prometheusalert-center/app.conf
tota_user=test
tota_password=alert_test
mkdir -p /var/lib/prometheusalert
sudo podman run -d -p 8080:8080 -v /etc/prometheusalert-center:/app/conf -v /var/lib/prometheusalert:/app/db --name prometheusalert-center kennethye/prometheus-alert:6.0
配置测试模板, 名称为 prometheus-webhook
[
{{ $length := len .alerts }}
{{range $index, $var :=.alerts}}
{
{{if eq $var.status "firing"}}
"Summary": "触发告警:{{$var.labels.alertname}}",
{{else}}
"Summary": "解除告警:{{$var.labels.alertname}}",
{{end}}
"Notes": "详细情况:{{$var.annotations.description}}\n 集群名:{{$var.labels.cluster_name}}\n 环境:{{$var.labels.environment}}\n 节点:{{$var.labels.node}}\n 服务名:{{$var.labels.service}}",
"IP": "{{$var.labels.instance}}",
"Source": "Container Cloud",
"Alert_type": "cloud",
"Event_id": "{{$var.labels.alertname}}-{{$var.startsAt}}",
"Assignee": "",
{{if eq $var.labels.level "1"}}
"Priority": "Level 1"
{{else}}{{if eq $var.labels.level "2"}}
"Priority": "Level 2"
{{else}}{{if eq $var.labels.level "3"}}
"Priority": "Level 3"
{{else}}
"Priority": "Level 4"
{{end}}
{{end}}
{{end}}
{{if eq $index $length }}
}
{{else}}
},
{{end}}
{{end}}
]
配置AlertManager 发送告警给webhook
global:
resolve_timeout: 5m
receivers:
- name: Default
- name: Watchdog
- name: Critical
- name: 'null'
- name: webhook
webhook_configs:
- url: >-
http://192.168.0.100:8080/prometheusalert?type=webhook&tpl=prometheus-webhook&webhookurl=http://192.168.0.100:8093
route:
group_by:
- namespace
group_interval: 5m
group_wait: 30s
receiver: webhook
repeat_interval: 12h
routes:
- matchers:
- alertname = Watchdog
receiver: Watchdog
- matchers:
- alertname = InfoInhibitor
receiver: 'null'
- matchers:
- severity = critical
receiver: Critical
- receiver: webhook
match:
name: webhook