告警与 Grafana 可视化

想配置 Prometheus 告警推送、或安装 Grafana 插件 / 配置看板 / 接其他数据源时读这篇

01-架构原理 / 监控体系
Alertmanager告警报警secretbase64routereceiverwebhookinhibit_rules告警抑制Grafana插件pluginsdashboarddatasource数据源

告警(Alertmanager)与 Grafana 可视化

Alertmanager 配置报警

报警的配置文件在 K8s 中是通过 secret 来配置的,需要先生成配置文件的 base64 编码。

import base64
# alert 报警的 secret
# 换行都会变换 base64 编码后的格式
config='''
global:
  resolve_timeout: 5m
templates:
- '/etc/alertmanager/template/*.tmpl'
route:
  group_by: ['alertname', 'cluster', 'service']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'null'
  routes:
  - match:
      namespace: clickhouse
    receiver: 'di'
  - match:
      namespace: superset
    receiver: 'pengluan'
  - match:
      namespace: infra
    receiver: 'pengluan'

# 告警抑制。避免重复告警。
# https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/alert/alert-manager-inhibit
inhibit_rules:
- source_match:
    severity: 'critical'
  target_match:
    severity: 'warning'
  # Apply inhibition if the alertname is the same.
  equal: ['alertname', 'cluster', 'service']
receivers:
- name: 'di'
  webhook_configs:
  - send_resolved: true
    url: 'http://cloud-pushgateway-service.monitoring/alertmanager/webhook?sender_type=username_group&sender=your_key'

- name: 'pengluan'
  webhook_configs:
  - send_resolved: true
    url: 'http://cloud-pushgateway-service.monitoring/alertmanager/webhook?sender_type=wechat&username=pengluan'

- name: 'null'
'''

base64str = base64.b64encode(bytes(config, encoding='utf-8'))
print(str(base64str, encoding='utf-8'))

由于 Alertmanager 在内网配置,报警受网络影响,所以 Alertmanager 的报警推送也接入到前面的自研 pushgateway 中(见 自定义指标与 pushgateway)。

  • routes 为要匹配的消息和发送的接收者;
  • receivers 为接收者的配置。这里配置了微信个人(sender_type=wechat)和企业微信群(sender_type=username_group)接收,企业微信群接收中 your_key 为企业微信群聊机器人的 key 值。

与代码一致:Alertmanager 的 secret 清单为 install/kubernetes/prometheus/alertmanater/alertmanager-main-secret.ymlalertmanager.yaml 字段为 base64 编码的上述配置)。仓库还提供 make-alert-wechat-config.py / make-alert-email-config.py 用于生成配置。Service 名 cloud-pushgateway-service、命名空间 monitoring 与告警 webhook URL 中的 cloud-pushgateway-service.monitoring 一致。

Grafana

安装插件

Grafana 独立于 Prometheus 之外,由于对 Prometheus 兼容得比较好,一般使用 Grafana 作为 Prometheus 的可视化看板。

Grafana 的数据源、看板都是以插件的形式安装的:https://grafana.com/grafana/plugins

官方镜像插件如果满足不了需求,需要自己编写 Dockerfile 来安装自己的插件,例如:

FROM grafana/grafana:9.5.20
USER root

# clickhouse 数据源
RUN grafana-cli plugins install vertamedia-clickhouse-datasource
# 时钟图
RUN grafana-cli plugins install grafana-clock-panel
# 饼图
RUN grafana-cli plugins install grafana-piechart-panel
# 气泡图
RUN grafana-cli plugins install digrich-bubblechart-panel
# 世界地图
RUN grafana-cli plugins install raintank-worldping-app
# json 数据
RUN grafana-cli plugins install grafana-simple-json-datasource
# zabbix 报警
RUN grafana-cli plugins install alexanderzobnin-zabbix-app
# k8s 监控应用
RUN grafana-cli plugins install grafana-kubernetes-app
# WindRose 极坐标图
RUN grafana-cli plugins install fatcloud-windrose-panel
# 雷达图
RUN grafana-cli plugins install snuids-radar-panel
# 世界地图热力图
RUN grafana-cli plugins install ovh-warp10-datasource
# 选点监控
RUN grafana-cli plugins install natel-usgs-datasource
# es 数据监控
RUN grafana-cli plugins install stagemonitor-elasticsearch-app
# Plotly 直角坐标系散点图
RUN grafana-cli plugins install natel-plotly-panel
# 组织结构图
RUN grafana-cli plugins install digiapulssi-organisations-panel
# ajax 请求更新数据
RUN grafana-cli plugins install ryantxu-ajax-panel

然后重新构建镜像,并在部署 Grafana 中替换成新镜像名。

与代码一致:本仓库 Grafana 部署镜像即 grafana/grafana:9.5.20(见 install/kubernetes/prometheus/grafana/grafana-dp.yml)。数据源配置见 grafana-datasources.yml / grafana-source.yml,看板 JSON 通过 all-grafana-dashboards configmap 从 grafana/dashboard/ 目录挂载。

dashboard

要想成功配置看板,需要几个步骤:1)配置数据源;2)配置 chart;3)配置 dashboard。

Grafana dashboard

Grafana 的配置是 chart 组成 dashboard 的结构。每个 chart 的配置需要绑定数据源、可视化报表类型、报警配置等。

Alert

在 Grafana 监控指标难免要配置报警。在内网部署报警受到一些限制,pushgateway 中封装了报警接口(见 04 篇),所以直接将 Grafana 的报警推送地址接入到 pushgateway 中。

Grafana Alert

配置 pushgateway 的接口:http://cloud-pushgateway-service.monitoring/grafana/webhook?sender_type=wechat,username 为个人用户名,密码可以不配置。

其他数据源

除了 Prometheus 数据库,Grafana 还支持很多其他数据库。

Grafana 数据源

监控业务指标

因为支持更多的数据库,所以也就可以监控数据库中的数据。比如可以监控 ES 中存储的日志,也可以监控 MySQL 中的业务数据。例如下面是监控 MySQL 中的数据指标。

Grafana 业务指标

最后更新 2026-06-30完整文档以官方仓库为准:GitHub Wiki