Prometheus告警记录持久化
(历史告警保存与统计)
Prometheus 将基于告警规则生成的告警存储为时间序列,不会将 Alertmanager 的告警信息持久化存储,那么针对历史告警的检索、统计等需求就无法实现。
因此需要一种持久化机制用于存储历史告警信息,本文主要探究基于 alertmanager 告警的开源持久化
方案。
技术栈:Prometheus+Alertmanager+Snitch+Grafana
一、alertsnitch 安装
1、golang、alertsnitch下载
golang:https://go.dev/dl/,https://golang.google.cn/dl/
alertsnitch 下载:https://gitlab.com/yakshaving.art/alertsnitch,https://github.com/yakshaving-art/alertsnitch
2、go编译安装alertsnitch
步骤一:配置go环境
mkdir -p /data/software/alertsnitch
cd /data/software/alertsnitch
#go 文件拷贝到该文件夹
tar -zxvf go1.21.0.linux-amd64.tar.gz
# 配置 go 环境变量
cat <<eof >>/etc/profile
export GO_HOME=/data/software/alertsnitch/go
export PATH=$PATH:$GO_HOME/bin
export GOPATH=$GO_HOME/tagert
eof
source /etc/profile
步骤二:用go编译安装 alertsnitch
tar -zxf alertsnitch-0.2.tar.gz
go env -w GOPROXY=https://goproxy.cn #该步骤是切换国内代理,不然github可能很多包无法下载
cd alertsnitch-0.2
go install
#成功与否见下图,成功后,复制该 alertsnitch 命令到环境变量
cp -r $GOPATH/bin/alertsnitch /usr/local/bin
3、配置启动 alertsnitch
mysql数据库初始化
建立数据库、建立账户
第一个 sh里面有脚本,进行初始化。 test.sh 可以测试
在这里面写一下变量 ,还有注意目录 db.d/mysql..... 文件位置
MYSQL_ROOT_PASSWORD、 MYSQL_DATABASE
也可以将变量写入到/etc/profile中
cat >>/etc/profile<<'EOF'
# alertsnitch
export MYSQL_ROOT_PASSWORD=123456
export MYSQL_DATABASE=alertsnitch
export ALERTSNITCH_ADDR=10.0.0.31:9567
export ALERTSNITCH_BACKEND="mysql"
export ALERTSNITCH_DSN="root:root@tcp(10.0.0.32:3306)/alertsnitch"
EOF
------------------------
ALERTSNITCH_DSN:用户名:密码@协议类型(数据库所在主机地址:数据库端口)/数据库名称
MYSQL_ROOT_PASSWORD:数据库连接密码
MYSQL_DATABASE:数据库名称
ALERTSNITCH_ADDR:alertsnitch监听IP地址和端口
1、修改后的mysql初始化脚本
(修改文件路径)
cat >bootstrap_mysql.sh<<'EOF'
#!/bin/bash
set -EeufCo pipefail
IFS=$'\t\n'
echo "Creating DB"
mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" --host=${MYSQL_HOST} -e "CREATE DATABASE IF NOT EXISTS ${MYSQL_DATABASE};"
echo "Creating bootstrapped model"
mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" --host=${MYSQL_HOST} "${MYSQL_DATABASE}" < /data/software/alertsnitch/alertsnitch-0.2/db.d/mysql/0.0.1-bootstrap.sql
echo "Applying fingerprint model update"
mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" --host=${MYSQL_HOST} "${MYSQL_DATABASE}" < /data/software/alertsnitch/alertsnitch-0.2/db.d/mysql/0.1.0-fingerprint.sql
echo "Done creating model"
EOF
2、执行此脚本
[root@test /data/software/alertsnitch/alertsnitch-0.2/script.d]# sh bootstrap_mysql.sh
Creating DB
Creating bootstrapped model
Applying fingerprint model update
Done creating model
3、数据库验证结果
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| alertsnitch |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 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)
4、AlertManager配置
AlertManager配置
执行如下命令,打开配置文件
/opt/alertmanager/alertmanager.yml
添加如下配置:
# 告警路由配置
route:
group_by: ['alertname'] # 路由分组
group_wait: 5s # 组内告警等待时间
group_interval: 5s # 初始通知被发送后,新的通知发送等待时间
repeat_interval: 5s # 如果通知被发送后,再次被发送等待的时间
routes:
- receiver: 'alertsnitch'
continue: true
#告警接收者配置
receivers:
- name: 'alertsnitch'
webhook_configs:
- url: http://192.168.129.31:9567/webhook
5、配置 alertsnitch 关联 mysql
nohup alertsnitch -database-backend="mysql" -listen.address="10.0.0.31:9567" -dsn="root:123456@tcp(10.0.0.32:3306)/alertsnitch" &
二、grafana接入仪表盘
1、构建mysql数据源
2、导入仪表盘
15833
3、仪表盘展示
出现如上图内容后,表示已经目标已经实现了。