告警配置
polardbx-operator 基于 Prometheus + AlertManager 提供了灵活的告警能力。本文档介绍如何为 polardbx-operator 创建的集群配置报警。
前置条件
- 安装 polardbx-operator 和 polardbx-monitor 组件,且 polardbx-monitor 版本不低于 1.4.0。
- 创建一个 PolarDB-X 集群并开启监控,参考文档:为存量集群开启监控。
- 因为发送报警消息需要访问对应的渠道(邮件、钉钉),因此您的 K8s 集群需要有一台能访问对应渠道Endpoint的机器,例如需要能访问SMTP服务器或者钉钉webhook。
启动 AlertManager 并访问
PolarDB-X Operator 1.4.0 版本已默认集成 AlertManager 并配置开箱即用的告警能力,只需要简单几步即可开启。
准备好一台具备访报警渠道Endpoint的机器,执行如下命令,为该节点打上部署 AlertManager 的标签。
kubectl label node {node 名} alertmanager=true
上述命令中的 {node ming}需要替换为 Kubectl get node 结果中的 NAME
执行如下命令,开启 AlertManager并将其部署到具备 alertmanager 标签的机器上
kubectl patch alertmanager main -n polardbx-monitor --type='merge' -p '{"spec": {"replicas" : 1, "nodeSelector": {"alertmanager": "true"}}}'
执行如下命令,等待 AlertManager 的 pod 变为 Running 状态:
kubectl get pods -n polardbx-monitor alertmanager-main-0
执行如下命令,将 AlertManager 的端口转发到本地,并通过浏览器访问
kubectl port-forward svc/alertmanager-main --address=0.0.0.0 9093 -n polardbx-monitor
浏览器中输入 http://{ip}:9093/ 即可访问 AlertManager。
配置 AlertManager 报警推送渠道
AlertManager 支持多种报警推送渠道的配置,详见:CONFIGURATION。本文档以邮件和钉钉为例,介绍如何配置 AlertManager 推送报警到邮件和钉钉。
配置报警推送到邮件
1.创建 alertmanger-secret.yaml 文件并复制如下内容到文件中:
apiVersion: v1
kind: Secret
metadata:
name: alertmanager-main
namespace: polardbx-monitor
labels:
app.kubernetes.io/instance: polardbx-monitor
app.kubernetes.io/managed-by: Helm
stringData:
alertmanager.yaml: |-
global:
smtp_smarthost: smtp.gmail.com:587 ## 发送报警的邮箱配置
smtp_from: <smtp mail from>
smtp_auth_username: <usernae>
smtp_auth_identity: <username>
smtp_auth_password: <password>
receivers:
- name: email_receiver
email_configs:
- to: <mail to address> ## 推送报警的邮箱列表
send_resolved: true
route:
group_by:
- job
group_interval: 5m
group_wait: 30s
receiver: email_receiver
repeat_interval: 12h
routes:
- receiver: email_receiver
group_wait: 10s
templates:
- '/etc/alertmanager/config/*.tmpl'
type: Opaque
- 修改上述文件中 global及receivers.email_configs.to 相关配置项,填写发送报警邮件的邮箱信息。
- 执行如下命令应用上述配置:
kubectl delete -f alertmanger-secret.yaml kubectl apply -f alertmanger-secret.yaml
配置报警推送到钉钉
AlertManager 目前还没有直接支持钉钉,如果需要发送消息到钉钉,需要部署钉钉报警的插件,通过webhook的方式,将AlertManager的消息转换成钉钉的报警格式,发送出去。
- 在钉钉群中创建一个 webhook 机器人,并记录下 webhook 的 url 和 secret。
- 创建 dingtalk-webhook.yaml, 并复制如下内容到dingtalk-webhook.yaml中:
apiVersion: v1
data:
config.yaml: |
templates:
- /config/template.tmpl
targets:
webhook1:
# 修改这边的url 和 secret即可
url: https://oapi.dingtalk.com/robot/send?access_token=e2***
secret: SECc*****
kind: ConfigMap
metadata:
labels:
app: alertmanager-webhook-dingtalk
name: alertmanager-webhook-dingtalk-config
namespace: polardbx-monitor
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: dingtalk
name: webhook-dingtalk
namespace: polardbx-monitor
spec:
replicas: 1
selector:
matchLabels:
alertmanager: true
template:
metadata:
labels:
run: dingtalk
spec:
containers:
- args:
- --web.listen-address=:8060
- --config.file=/config/config.yaml
image: timonwong/prometheus-webhook-dingtalk:v1.4.0
name: alertmanager-webhook-dingtalk
ports:
- containerPort: 8060
name: http
resources:
limits:
cpu: 100m
memory: 100Mi
volumeMounts:
- mountPath: /config
name: config
volumes:
- configMap:
name: alertmanager-webhook-dingtalk-config
name: config
---
apiVersion: v1
kind: Service
metadata:
labels:
run: dingtalk
name: webhook-dingtalk
namespace: polardbx-monitor
spec:
ports:
- port: 8060
protocol: TCP
targetPort: 8060
selector:
run: dingtalk
sessionAffinity: None
注意:24行的 url 和 secret字段为你配置的钉钉机器人配置。
- 执行如下命令,部署钉钉报警插件:
kubectl apply -f dingtalk-webhook.yaml
3.执行如下命令创建 alertmanger-secret.yaml
vim alertmanger-secret.yaml
拷贝如下内容到 alertmanger-secret.yaml中:
apiVersion: v1
kind: Secret
metadata:
name: alertmanager-main
namespace: polardbx-monitor
labels:
app.kubernetes.io/instance: polardbx-monitor
app.kubernetes.io/managed-by: Helm
stringData:
alertmanager.yaml: |-
global:
resolve_timeout: 5m
receivers:
- name: dingtalk-webhook
webhook_configs:
- send_resolved: true
url: "http://webhook-dingtalk.polardbx-monitor:8060/dingtalk/webhook1/send"
route:
group_by:
- job
group_interval: 5m
group_wait: 30s
receiver: dingtalk-webhook
repeat_interval: 12h
routes:
- receiver: dingtalk-webhook
group_wait: 10s
templates:
- '/etc/alertmanager/config/*.tmpl'
type: Opaque
- 执行如下命令应用报警配置:
kubectl delete -f alertmanger-secret.yaml kubectl apply -f alertmanger-secret.yaml
查看已有告警项
方法 1:参考文档:查看监控 访问Prometheus 控制台,查看 Alerts Tab 页面,即可查看到系统重已配置的告警项。如下图所示:
方法2:
PolarDB-X 的告警项都是通过 PrometheusRule 对象配置的,执行如下命令,看下 PolarDB-X 的 PrometheusRule:
kubectl get prometheusrule -n polardbx-monitor polardbx-alert-rules -o yaml
您也可以通过如下的命令修改 PrometheusRule 中的告警配置或者增加新的告警项:
kubectl edit prometheusrule -n polardbx-monitor polardbx-alert-rules