Prometheus Alertmanager告警数据持久化及可视化看板

2024-08-30 17:15:51 浏览数 (1)

Prometheus是一款主流的监控工具,对于Alertmanager存在的局限性我们不言而喻,本文主要介绍如何实现Alertmanager告警数据持久化,并在grafana搭建可视化看板。

01、背 景

Prometheus Alertmanager 作为 Prometheus 生态系统中的核心告警管理组件,主要专注于实时告警的接收、去重、分组和路由。然而,由于其设计上并未对告警数据进行持久化存储,这虽然简化了系统的复杂性,但也带来了一些局限性。

此外,Alertmanager 的 Web UI 缺乏综合告警指标展示功能,使得运维人员在面对大量告警时难以直观地区分告警的轻重缓急,进而影响了故障排查和响应效率。为了弥补这些不足,我们需要利用Alertsnitch对告警数据进行持久化存储,并搭建 Grafana 可视化看板,以实现对历史告警数据的查询、分析和多维度展示。

02、部署alertsnitch

如下示例将基于 Kubernetes 部署 Alertsnitch,需经历数据库准备、配置准备及部署到 Kubernetes 这三个步骤。具体操作如下:

1. 数据库准备

  • sql文件下载
代码语言:javascript复制
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
代码语言:javascript复制
CREATE DATABASE alertsnitch CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  • SQL 文件的导入命令示例(根据实际情况修改)
代码语言:javascript复制
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

0 人点赞