告警(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.yml(alertmanager.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-dashboardsconfigmap 从grafana/dashboard/目录挂载。
dashboard
要想成功配置看板,需要几个步骤:1)配置数据源;2)配置 chart;3)配置 dashboard。

Grafana 的配置是 chart 组成 dashboard 的结构。每个 chart 的配置需要绑定数据源、可视化报表类型、报警配置等。
Alert
在 Grafana 监控指标难免要配置报警。在内网部署报警受到一些限制,pushgateway 中封装了报警接口(见 04 篇),所以直接将 Grafana 的报警推送地址接入到 pushgateway 中。

配置 pushgateway 的接口:http://cloud-pushgateway-service.monitoring/grafana/webhook?sender_type=wechat,username 为个人用户名,密码可以不配置。
其他数据源
除了 Prometheus 数据库,Grafana 还支持很多其他数据库。

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