Prometheus是一款主流的监控工具,对于Alertmanager存在的局限性我们不言而喻,本文主要介绍如何实现Alertmanager告警数据持久化,并在grafana搭建可视化看板。
01、背 景
Prometheus Alertmanager 作为 Prometheus 生态系统中的核心告警管理组件,主要专注于实时告警的接收、去重、分组和路由。然而,由于其设计上并未对告警数据进行持久化存储,这虽然简化了系统的复杂性,但也带来了一些局限性。
此外,Alertmanager 的 Web UI 缺乏综合告警指标展示功能,使得运维人员在面对大量告警时难以直观地区分告警的轻重缓急,进而影响了故障排查和响应效率。为了弥补这些不足,我们需要利用Alertsnitch对告警数据进行持久化存储,并搭建 Grafana 可视化看板,以实现对历史告警数据的查询、分析和多维度展示。
02、部署alertsnitch
如下示例将基于 Kubernetes 部署 Alertsnitch,需经历数据库准备、配置准备及部署到 Kubernetes 这三个步骤。具体操作如下:
1. 数据库准备
- sql文件下载
wget https://raw.githubusercontent.com/yakshaving-art/alertsnitch/master/db.d/mysql/0.0.1-bootstrap.sql
wget https://raw.githubusercontent.com/yakshaving-art/alertsnitch/master/db.d/mysql/0.1.0-fingerprint.sql
- 创建数据库,名为alertsnitch,字符集为utf8mb4,我用的是mysql8.0
CREATE DATABASE alertsnitch CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- SQL 文件的导入命令示例(根据实际情况修改)
mysql -u your_username -p -h localhost -P 3306 alertsnitch < /path/to/0.0.1-bootstrap.sql
mysql -u your_username -p -h localhost -P 3306 alertsnitch < /path/to/0.1.0-fingerprint.sql
在上述命令中:
-u your_username 指定数据库的用户名。
-p 选项会提示你输入密码。
-h localhost 指定数据库服务器的主机名。
-P 3306 指定数据库服务器的端口号。
alertsnitch 是你要导入 SQL 文件的数据库名称。
< /path/to/0.0.1-bootstrap.sql 和 < /path/to/0.1.0-fingerprint.sql 分别指定要导入的 SQL 文件的路径。
2. 配置准备
修改配置中的<用户名><密码><数据库地址>,并将其保存为alertsnitch.yaml
代码语言:javascript复制apiVersion: apps/v1
kind: Deployment
metadata:
name: alertsnitch
namespace: monitor
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: alertsnitch
template:
metadata:
labels:
app.kubernetes.io/name: alertsnitch
spec:
containers:
- image: registry.gitlab.com/yakshaving.art/alertsnitch
name: alertsnitch
ports:
- containerPort: 9567
name: http
env:
- name: ALERTSNITCH_BACKEND
value: mysql
- name: ALERTSNITCH_DSN
value: '<用户名>:<密码>@(<数据库地址>):3306/alertsnitch'
resources:
limits:
cpu: '2'
memory: 4Gi
requests:
cpu: 100m
memory: 800Mi
readinessProbe:
httpGet:
path: /-/ready
port: 9567
initialDelaySeconds: 30
periodSeconds: 10
livenessProbe:
httpGet:
path: /-/health
port: 9567
initialDelaySeconds: 60
periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
name: alertsnitch
namespace: monitor
spec:
ports:
- name: http
port: 9567
targetPort: http
type: NodePort
selector:
app.kubernetes.io/name: alertsnitch
3.部署到 Kubernetes
执行apply将Alertsnitch部署到Kubernetes中,命名空间为monitor(没有该命名空间的要先创建,或者修改它将其部署到已有的命名空间)
代码语言:javascript复制kubectl apply -f alertsnitch.yaml
到此完成了Alertsnitch部署,接下来需要将Alertmanager的告警数据传递给他。
03、Alertmanager配置
修改alertmanager.yaml配置,我的做法是保留已有的告警通道,再增加一条发送给alertsnitch,请将{alertsnitch_url}修改为实际地址,配置示例如下:
代码语言:javascript复制- "name": "event"
"webhook_configs":
- "send_resolved": true
"url": "https://xxxxx/push(原有告警通道)
- "send_resolved": true
"url": "http://{alertsnitch_url}/webhook"
在配置完成后,我们就可以继续搭建Grafana可视化看板了。
04、Grafana可视化看板搭建
Grafana可视化看板的实现主要有3步:创建数据源、导入看板、微调看板,具体如下:
1. 创建数据源
添加数据源,类型为Mysql,并填写Alertsnitch数据库的信息,其他选项默认即可。
2.导入看板
grafana仪表盘ID:15833
3.微调看板
看板的数据是通过sql查询的,若有需要可以自行修改,我在看板中为了突出告警等级,额外增加了颜色区分,通过看板,我们就能够直观的看到正在告警的事件和历史告警信息了,具体示例如下(往下还有已恢复告警和历史告警的看板,这里就不做演示了,赶紧自己搭起来吧):
05、结 语
我也注意到有一些其他的 Alertmanager 可视化展示工具,但我更倾向于使用统一的监控可视化看板。因此,我们选择在 Grafana 上实现所有的看板。我相信 Alertsnitch 与 Grafana 的结合能够使告警指标更加直观和易于追溯。本次分享就到这里,谢谢大家!
参考文档
https://github.com/yakshaving-art/alertsnitch