alertmanager告警持久化方案:alertsnitch

Prometheus告警记录持久化

Prometheus将基于告警规则生成的告警存储为时间序列,不会将Alertmanager的告警信息持久化存储,
那么针对历史告警的检索、统计等需求就无法实现。因此需要一种持久化机制用于存储历史告警信息,
本文主要探究基于alertmanager告警的开源持久化方案。

涉及技术栈:Prometheus+Alertmanager+AlertSnitch+Grafana

1.alertsnitch下载

下载地址:https://gitlab.com/yakshaving.art/alertsnitch

请添加图片描述
请添加图片描述

2.go安装

go的安装请参考linux环境下go安装-优快云博客,我使用的go版本为:1.21.0

3.go编译安装

tar -xzvf alertsnitch-0.2.1.tar.gz
go env -w GOPROXY=https://goproxy.cn   #该步骤是切换国内代理,不然github可能很多包无法下载
cd alertsnitch-0.2.1
go install

#成功与否见下,成功后复制该alertsnitch命令到环境变量
cp -r $GOPATH/bin/alertsnitch /usr/local/bin
[root@monitor12011 go]# ll /root/go/tagert/
total 0
drwxr-xr-x. 2 root root 25 Dec 24 10:48 bin
drwxr-xr-x. 3 root root 17 Dec 23 16:30 pkg
[root@monitor12011 go]# ll /root/go/tagert/bin/
total 11756
-rwxr-xr-x. 1 root root 12035858 Dec 24 10:46 alertsnitch

4.初始化mysql数据库

# 将变量写入到/etc/profile中
cat >>/etc/profile<<'EOF'
# alertsnitch
export MYSQL_ROOT_PASSWORD=123456
export MYSQL_DATABASE=alertsnitch
export ALERTSNITCH_ADDR=xx.xx.xx.xx:9567
export ALERTSNITCH_BACKEND="mysql"
export ALERTSNITCH_DSN="xxxx:xxx@tcp(xx.xx.xx.xx:3306)/alertsnitch"
EOF
  • ALERTSNITCH_DSN:用户名:密码@协议类型(数据库所在主机地址:数据库端口)/数据库名称
  • MYSQL_ROOT_PASSWORD:数据库连接密码
  • MYSQL_DATABASE:数据库名称
  • ALERTSNITCH_ADDR:alertsnitch监听IP地址和端口
vi /root/alertsnitch/alertsnitch-0.2.1/script.d/bootstrap_mysql.sh
# 将--host配置值改为真实数据库ip
# 将--user=配置值改为真实数据库用户
# 将sql文件路径改为绝对路径
# 执行bootstrap_mysql.sh脚本
[root@monitor12011 script.d]# sh /root/alertsnitch/alertsnitch-0.2.1/script.d/bootstrap_mysql.sh
Creating DB
Creating bootstrapped model
Applying fingerprint model update
Done creating model
# 数据库验证
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| alertsnitch        |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
8 rows in set (0.00 sec)

mysql> use alertsnitch;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------------+
| Tables_in_alertsnitch |
+-----------------------+
| alert                 |
| alertannotation       |
| alertgroup            |
| alertlabel            |
| commonannotation      |
| commonlabel           |
| grouplabel            |
| model                 |
+-----------------------+
8 rows in set (0.00 sec)

5.alertmanager配置

vi /xxx/xx/xx/alertmanager.yml
# 告警路由配置
route:
  group_by:
  - instance
  group_interval: 5m
  group_wait: 30s
  receiver: teamwork
  repeat_interval: 1h
  routes:
  - continue: true
    group_interval: 1m
    group_wait: 30s
    receiver: alertsnitch
    repeat_interval: 10m
# 告警接收人配置
receivers:
- name: alertsnitch
  webhook_configs:
  - url: http://xx.xx.xx.xx:9567/webhook

6.启动alertsnitch

vi /etc/systemd/system/alertsnitch.service
# 添加以下内容
[Unit]
Description=Alertsnitch Server
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/root/alertsnitch
ExecStart=alertsnitch -database-backend="mysql" -listen.address="xx.xx.xx.xx:9567" -dsn="xxx:xx@tcp(xx.xx.xx.xx:3306)/alertsnitch"

[Install]
WantedBy=multi-user.target

systemctl start alertsnitch # 启动
systemctl status alertsnitch # 状态
systemctl enable alertsnitch # 开机自启

7.grafana接入

7.1 数据源创建

请添加图片描述
请添加图片描述
请添加图片描述

7.2 导入仪表板

模板id:15833
请添加图片描述
请添加图片描述
请添加图片描述

8.参考

### Alertmanager 配置排查及收不到告警解决方案 当遇到Alertmanager无法接收到告警的情况时,可以从以下几个方面进行检查和排除: #### 1. 检查Prometheus配置文件中的告警管理器设置 确保`prometheus.yml`中已正确定义了至少一个有效的Alertmanagers实例地址。这通常是通过`alerting`部分下的`alertmanagers`列表来完成的。 ```yaml alerting: alertmanagers: - static_configs: - targets: ['localhost:9093'] ``` 此段配置指定了Prometheus应向哪个Alertmanager发送告警信息[^1]。 #### 2. 确认Prometheus规则文件无误 审查用于定义告警条件的`.rules.yaml`文件,确认语法正确且逻辑合理。任何错误都可能导致告警未能成功触发或传递给Alertmanager。 #### 3. 查看Prometheus日志输出 利用命令行工具或者直接访问Prometheus服务器上的日志文件,查找有关告警处理过程的日志条目。特别关注是否有与连接至Alertmanager相关的警告或错误消息。 #### 4. 测试网络连通性和端口状态 验证从Prometheus主机到Alertmanager服务之间的TCP/IP通信正常工作,并且指定的目标端口号处于监听状态。可以采用telnet或其他类似的诊断手段来进行这项测试。 #### 5. 排除Alertmanager自身的故障 进入Alertmanager界面或是查阅其日志记录,寻找可能存在的内部异常情况;另外也要留意是否存在过多未读取的通知积压现象,因为这也可能是造成新来的告警丢失的原因之一。 对于更深入的历史数据分析需求,则可考虑借助像`alertmanager2es`这样的第三方插件辅助实现更为便捷的数据管理和检索功能[^2]。 #### 6. 核实告警静默和抑制策略 有时即使Prometheus已经发出告警请求,但由于设置了某些特殊的过滤规则(比如静默期),使得实际并未真正触达到最终用户那里。因此有必要仔细核对现有的静默/抑制设定是否适当[^3]。 以上措施有助于定位并修复Alertmanager接收不到告警的问题根源所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值