kube-prometheus 安装完后每个组件会都有默认配置,但是如果要满足基本的生产可用,默认配置是不够的,如数据持久化存储等。这篇文章介绍一些常见的需要初始化的配置。
- prometheus相关配置
kubectl -n monitoring edit prometheuses k8s
1.1 首先需要修改的就是数据持久化存储。否则pod重启监控数据就没有了。在spec中加入storage配置(以下是以阿里云的storageClassName为例,根据实际情况配置)
storage:
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: alicloud-disk-efficiency
- Alertmanager配置
当生产环境有告警发生,肯定要及时的接收到,以企业微信为例进行配置。
2.1 企业微信
#查看并导出已有配置的方法
kubectl -n monitoring get secret alertmanager-main -o "jsonpath={.data.alertmanager\.yaml}" | base64 -d
#将现有配置另存为一个文件alertmanager.yaml,在此基础上进行修改。
kubectl -n monitoring get secret alertmanager-main -o "jsonpath={.data.alertmanager\.yaml}" | base64 -d > alertmanager.yaml
#先修改alertmanager.yaml 配置,之后重新创建名为alertmanager-main 的 secret
kubectl -n monitoring delete secrets alertmanager-main
kubectl -n monitoring create secret generic alertmanager-main --from-file ./alertmanager.yaml
配置会自动更新并生效。
下面看具体配置
先申请企业微信号,创建应用。这个另外有文章介绍。
修改alertmanager配置文件添加企业微信接口配置,告警i信息模板配置,receivers配置(先修改Default和Watchdog这两个receivers)。按上述描述的方法重建 secret alertmanager-main 使配置生效。
"global":
"resolve_timeout": "5m"
"wechat_api_url": "https://qyapi.weixin.qq.com/cgi-bin/"
"templates":
- "/etc/alertmanager/template/*.tmpl"
"receivers":
- "name": "Default"
"wechat_configs":
- "send_resolved": true
"api_secret": "4nEuU312Sb041212341qF6ogwb4Tkzf7fDdk"
"corp_id": "ww21a123495b76b"
"to_party": "1"
"agent_id": "1000002"
"message": '{{ template "wechat.html" . }}'
- "name": "Watchdog"
"wechat_configs":
- "send_resolved": true
"api_secret": "4nEuU312Sb041212341qF6ogwb4Tkzf7fDdk"
"corp_id": "ww21a123495b76b"
"to_party": "1"
"agent_id": "1000002"
"message": '{{ template "wechat.html" . }}'
创建告警信息模板
#创建一个微信告警模板的configmap (如果修改了模板的内容,alertmanager并不能自动生效,虽然 configmap 能够自动加载到pod 中,但是程序本身还需要另外有机制reload 这个配置才行。)
模板文件alertmanager-wechat.tmpl内容如下
{{ define "wechat.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts.Firing }}
@故障告警
告警类型: {{ .Labels.alertname }}
告警服务: {{ .Labels.service }}
告警主机: {{ .Labels.instance }}
告警信息: {{ .Annotations.summary }}
详细信息: {{ .Annotations.description }}
开始时间: {{ (.StartsAt.Add 28800e9).Format "2023-01-01 00:00:00" }}
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts.Resolved }}
@故障恢复
告警类型: {{ .Labels.alertname }}
告警服务: {{ .Labels.service }}
告警主机: {{ .Labels.instance }}
告警信息: {{ .Annotations.summary }}
详细信息: {{ .Annotations.description }}
开始时间: {{ (.StartsAt.Add 28800e9).Format "2023-01-01 00:00:00" }}
恢复时间: {{ (.EndsAt.Add 28800e9).Format "2023-01-01 00:00:00" }}
{{ end }}{{ end -}}
{{- end }}
创建模板configmap
kubectl -n monitoring create configmap alert-wechat-template --from-file alertmanager-wechat.tmpl
将模板以volume挂载到alertmanager,需要修改CRD alertmanagers
kubectl -n monitoring edit alertmanagers.monitoring.coreos.com main
在spec中添加如下(在这个CRD中volumeMounts与volumes是并列的层级)
volumeMounts:
- mountPath: /etc/alertmanager/template
name: alert-wechat-template
volumes:
- configMap:
name: alert-wechat-template
name: alert-wechat-template
#重启alertmanager pod,以加载template配置文件
kubectl -n monitoring rollout restart statefulset alertmanager-main
- 在Prometheus中查看已发生的告警,有些告警是由于默认配置与环境不匹配造成的,修改配置,消除这些无效告警。(例如:https://chaiyingchao.blog.csdn.net/article/details/121826573 这篇文章说到的问题)
至此基本的使用kube-prometheus监控和告警就可以正常使用了。