PrometheusAlert
项目介绍
PrometheusAlert是开源的运维告警中心消息转发系统,支持主流的监控系统Prometheus、Zabbix,日志系统Graylog2,Graylog3、数据可视化系统Grafana、SonarQube。阿里云-云监控,以及所有支持WebHook接口的系统发出的预警消息,支持将收到的这些消息发送到钉钉,微信,email,飞书,腾讯短信,腾讯电话,阿里云短信,阿里云电话,华为短信,百度云短信,容联云电话,七陌短信,七陌语音,TeleGram,百度Hi(如流),Kafka等。
官方地址
项目文件
| Bash |
|---|
| ├── cmd: 脚本
├── conf: 配置
├── controllers:控制器
├── db:默认的 sqlite 数据
├── doc:文档
├── docker-entrypoint.sh:容器运行入口文件
├── Dockerfile
├── example:示例文件
├── go.mod
├── go.sum
├── LICENSE
├── main.go
├── Makefile
├── models:模型
├── PrometheusAlert:二进制文件
├── PrometheusAlertVoicePlugin
├── README.MD
├── routers:路由
├── static:静态资源
├── swagger
├── tests:测试
├── views:前端模板
└── zabbixclient
|
部署方式
- 通过源代码构建
项目是go语言开发,为了能兼容自己本地运行环境,建议自行构建代码
- 下载发行版本
需要注意,你的运行环境可能与作者打包时使用的不是一个环境,直接运行会出现glibc等库文件版本不兼容问题
- 通过Docker运行
最快体验可以使用docker部署,不依赖于本地系统环境
这里记录两种部署方式:
- 自行构建
- docker
通过源代码构建
我的系统是Centos7.9,比较古老,下载作者打包好的项目,就出现了兼容问题
./PrometheusAlert: /lib64/libc.so.6: version 'GLIBC_2.28' not found (required by ./PrometheusAlert)
还是自行构建吧
应用信息和构建相关的命令都写入了 Makefile,请确保安装make, git, go命令。如有特定需要,请自行修改 Makefile
默认构建生成的文件是 ./PrometheusAlert
下载项目
git clone https://gitee.com/feiyu563/PrometheusAlert.git
开始编译
| Bash |
|---|
| root@pts/0 # cd PrometheusAlert
root@pts/0 # make
|
期间注意有没有报错,如果成功,会在目录下生成PrometheusAlert执行文件
本地测试运行
| Bash |
|---|
| cp conf/app-example.conf conf/app.conf
./PrometheusAlert
# 后台运行请执行
nohup ./PrometheusAlert &
|
Docker部署
创建目录
| Bash |
|---|
| root@pts/0 # mkdir -p /opt/PrometheusAlert/{conf,logs}
root@pts/0 # cd /opt/PrometheusAlert/
|
准备配置文件
配置文件地址

复制配置内容到conf/app.conf文件
编辑conf/app.conf配置文件vim conf/app.conf
| app.conf |
|---|
| #是否前台输出file or console
logtype=file
#日志文件路径
logpath=logs/prometheusalertcenter.log
#是否开启告警记录 0为关闭,1为开启
AlertRecord=1
#是否开启告警记录定时删除 0为关闭,1为开启
RecordLive=1
#告警记录定时删除周期,单位天
RecordLiveDay=7
#---------------------↓webhook-----------------------
#是否开启飞书告警通道,可同时开始多个通道0为关闭,1为开启
open-feishu=1
#默认飞书机器人地址
fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/c1540edd-c881-404b-baf2-c00b4f2ede8f
# webhook 发送 http 请求的 contentType, 如 application/json, application/x-www-form-urlencoded,不配置默认 application/json
wh_contenttype=application/json
|
我这里只需要webhook到飞书,有其他需求可以参考官网配置,这里只是记录一下配置思路
启动容器
| Bash |
|---|
| docker run -d \
-p 8080:8080 \
-v /opt/PrometheusAlert/conf:/app/conf \
-v /opt/PrometheusAlert/logs:/app/logs \
--name prometheusalert-center \
--restart always \
feiyu563/prometheus-alert:v4.9.1
|
页面配置
登录
访问地址:http://172.16.1.18:8080
账户密码在app.conf配置
| Bash |
|---|
| appname = PrometheusAlert
#登录用户名
login_user=prometheusalert
#登录密码
login_password=prometheusalert
#监听地址
httpaddr = "0.0.0.0"
#监听端口
httpport = 8080
|

模版配置
模版管理中有各种已经创建好的模版,可以测试使用
我这里自定义一个,语法可以参照官网,只是飞书的机器人,对markdown语法支持不是很友好,需要深度测试
配置路径: 模版管理-自定义模版-添加模版
| Bash |
|---|
| # 随意定义,不与现有的冲突即可,但是要记住,待会儿配置告警时要用
模版名称:prometheus-fs1
模版类型:飞书
模版用途:Prometheus
|
重点是模版内容,实现告警格式美观,需要好好调试
| Bash |
|---|
| {{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}
Prometheus恢复信息
告警类型: {{$v.labels.alertname}}
告警主题: {{$v.annotations.summary}}
告警级别: {{$v.labels.severity}}
故障主机: {{$v.labels.instance}}
故障时间: {{GetCSTtime $v.startsAt}}
恢复时间: {{GetCSTtime $v.endsAt}}
**{{$v.annotations.description}}**
{{else}}Prometheus告警信息
告警类型: {{$v.labels.alertname}}
告警主题: {{$v.annotations.summary}}
告警级别: {{$v.labels.severity}}
故障主机: {{$v.labels.instance}}
故障时间: {{GetCSTtime $v.startsAt}}
**{{$v.annotations.description}}**{{end}}{{ end }}
|
如下图:

页面操作国人风格,提示也很详细
这里提一下,如果有不同告警需要发送到不通的webhook,可以配置告警路由,具体参照官网,非常友好
告警中心配置好后,可以在Alertmanager配置地址了
飞书告警示例

页面可以看到告警记录
