跳转至

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部署,不依赖于本地系统环境

这里记录两种部署方式:

  1. 自行构建
  2. 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
1
2
3
4
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
1
2
3
4
5
6
7
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
1
2
3
4
5
6
7
8
9
appname = PrometheusAlert
#登录用户名
login_user=prometheusalert
#登录密码
login_password=prometheusalert
#监听地址
httpaddr = "0.0.0.0"
#监听端口
httpport = 8080

img

模版配置

模版管理中有各种已经创建好的模版,可以测试使用 我这里自定义一个,语法可以参照官网,只是飞书的机器人,对markdown语法支持不是很友好,需要深度测试

配置路径: 模版管理-自定义模版-添加模版

Bash
1
2
3
4
# 随意定义,不与现有的冲突即可,但是要记住,待会儿配置告警时要用
模版名称: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 }}

如下图:

img

页面操作国人风格,提示也很详细

这里提一下,如果有不同告警需要发送到不通的webhook,可以配置告警路由,具体参照官网,非常友好

告警中心配置好后,可以在Alertmanager配置地址了

飞书告警示例

img

页面可以看到告警记录

img