查看规则选择器

在部署 kube-prometheus 时候,manifests/setup 目录下定义资源类型包括 prometheusRule,也就是告警规则配置文件。这里部署的版本是 v0.13.0。

先使用 kubectl -n monitoring get promtheus,查看 prometheus 这个自定义资源类型的名字,这个是 prometheus 主配置文件

再查看它的详细信息,kubectl -n monitoring describe prometheus k8s,需要关注的点是 Rule Selector,它也是通过 label 去关联 prometheusRule 告警规则的。

v0.13.0 版本的 kube-prometheus 默认没有选择标签。他会从 monitoring 这个 namespace 去获取 prometheusRule 告警规则。

编写告警文件

$ cat prometheus-rules.yaml
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  #labels:      # 没有 ruleSelect,不需要填写 label
  # prometheus: k8s
  #  role: alert-rules
  name: prometheus-k8s-rules
  namespace: monitoring
spec:
  groups: 
  - name: 主机状态-监控告警
      rules:
        - alert: 节点内存
          expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes)))* 100 > 85
          for: 1m
          labels:
            severity: warning
          annotations:
            summary: "内存使用率过高!"
            description: "节点{{$labels.instance}} 内存使用大于85%(目前使用:{{$value}}%)"
        - alert: 节点TCP会话
          expr: node_netstat_Tcp_CurrEstab > 1000
          for: 1m
          labels:
            severity: warning
          annotations:
            summary: "TCP_ESTABLISHED过高!"
            description: "{{$labels.instance }} TCP_ESTABLISHED大于1000%(目前使用:{{$value}}%)"
        - alert: 节点磁盘容量
          expr: max((node_filesystem_size_bytes{fstype=~"ext.?|xfs"}-node_filesystem_free_bytes{fstype=~"ext.?|xfs"}) *100/(node_filesystem_avail_bytes {fstype=~"ext.?|xfs"}+(node_filesystem_size_bytes{fstype=~"ext.?|xfs"}-node_filesystem_free_bytes{fstype=~"ext.?|xfs"})))by(instance) > 80
          for: 1m
          labels:
            severity: warning
          annotations:
            summary: "节点磁盘分区使用率过高!"
            description: "{{$labels.instance }} 磁盘分区使用大于80%(目前使用:{{$value}}%)"
        - alert: 节点CPU
          expr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{job=~".*",mode="idle"}[5m])) * 100)) > 85
          for: 1m
          labels:
            severity: warning
          annotations:
            summary: "节点CPU使用率过高!"
            description: "{{$labels.instance }} CPU使用率大于80%(目前使用:{{$value}}%)"

有多个告警规则,你可以在上面文件添加其他的告警组或者编写其他的 PrometheusRule 文件。

创建该 规则 文件,

kubectl create -f prometheus-rules.yaml

查看 prometheus 的 Alerts,可以看见我们创建的告警规则

部署 钉钉 插件

v0.3.0 版本的钉钉插件配置模板有问题,部署 v2.1.0 版本的钉钉插件查看这个文档

kubectl create -f dingtalk.yaml,你只需要修改下面的 token。

~ cat dingtalk.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: dingtalk
  name: webhook-dingtalk
  namespace: monitoring
spec:
  replicas: 1
  template:
    metadata:
      labels:
        run: dingtalk
    spec:
      containers:
      - name: dingtalk
        image: timonwong/prometheus-webhook-dingtalk:v0.3.0  # 建议使用此版本的镜像
        imagePullPolicy: IfNotPresent
        # 设置钉钉群聊自定义机器人后,使用实际 access_token 替换下面 xxxxxx部分
        args:
          - --ding.profile=webhook1=https://oapi.dingtalk.com/robot/send?access_token=你的token
        ports:
        - containerPort: 8060
          protocol: TCP
 
---
apiVersion: v1
kind: Service
metadata:
  labels:
    run: dingtalk
  name: webhook-dingtalk
  namespace: monitoring
spec:
  ports:
  - port: 8060
    protocol: TCP
    targetPort: 8060
  selector:
    run: dingtalk
  sessionAffinity: None

编写 alertManager 的配置文件

~ cat alertmanager.yaml
global:
  resolve_timeout: 5m
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
  wechat_api_secret: '*****'
  wechat_api_corp_id: '*******'
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: '你的邮箱'
  smtp_auth_username: '邮箱用户名'
  smtp_auth_password: '密码或授权码'
  smtp_require_tls: false

 
route:
  group_by: ['alertname','job']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 12h
  receiver: 'wechat'
  routes:
  - match:
      job: 'prometheus'
    receiver: 'wechat'
 
receivers:
- name: 'email'
  email_configs:
  - to: '邮件接收人'
- name: 'wechat'
  wechat_configs:
  - send_resolved: true
    to_party: '2'
    agent_id: '1'
- name: 'webhook'
  webhook_configs:
  # 和插件不同 namespace 请填写 http://webhook-dingtalk.monitoring.svc.cluster.local:8060/dingtalk/webhook1/send
  - url: 'http://webhook-dingtalk:8060/dingtalk/webhook1/send' 
    send_resolved: true

先将之前的 secret 对象删除

$ kubectl delete secret alertmanager-main -n monitoring

secret "alertmanager-main" deleted

创建新的secret对象

$ kubectl create secret generic alertmanager-main --from-file=alertmanager.yaml -n monitoring

secret "alertmanager-main" created

kube-prometheus 配置告警规则和钉钉告警已完成

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐