• Prometheus Operator 配置报警


    配置报警


    我们知道了如何去添加一个报警规则配置项,但是这些报警信息用怎样的方式去发送呢?前面的课程中我们知道我们可以通过 AlertManager 的配置文件去配置各种报警接收器,现在我们是通过 Operator 提供的 alertmanager 资源对象创建的组件,应该怎样去修改配置呢?

    首先我们去 Alertmanager 的页面上 status 路径下面查看 AlertManager 的配置信息:

    这些配置信息实际上是来自于 Prometheus-Operator 自动创建的名为 alertmanager-main-generated 的 Secret 对象:

    1. ☸ ➜ kubectl get secret alertmanager-main-generated -n monitoring -o json | jq -r '.data."alertmanager.yaml"' | base64 --decode
    2. "global":
    3. "resolve_timeout": "5m"
    4. "inhibit_rules":
    5. - "equal":
    6. - "namespace"
    7. - "alertname"
    8. "source_matchers":
    9. - "severity = critical"
    10. "target_matchers":
    11. - "severity =~ warning|info"
    12. - "equal":
    13. - "namespace"
    14. - "alertname"
    15. "source_matchers":
    16. - "severity = warning"
    17. "target_matchers":
    18. - "severity = info"
    19. - "equal":
    20. - "namespace"
    21. "source_matchers":
    22. - "alertname = InfoInhibitor"
    23. "target_matchers":
    24. - "severity = info"
    25. "receivers":
    26. - "name": "Default"
    27. - "name": "Watchdog"
    28. - "name": "Critical"
    29. - "name": "null"
    30. "route":
    31. "group_by":
    32. - "namespace"
    33. "group_interval": "5m"
    34. "group_wait": "30s"
    35. "receiver": "Default"
    36. "repeat_interval": "12h"
    37. "routes":
    38. - "matchers":
    39. - "alertname = Watchdog"
    40. "receiver": "Watchdog"
    41. - "matchers":
    42. - "alertname = InfoInhibitor"
    43. "receiver": "null"
    44. - "matchers":
    45. - "severity = critical"
    46. "receiver": "Critical"

    我们可以看到内容和上面查看的配置信息是一致的,所以如果我们想要添加自己的接收器,我们就可以直接更改这个文件,但是这里的内容是 base64 编码过后的,如果手动添加内容就非常不方便,为此 Prometheus-Operator 新增了一个 AlertmanagerConfig 的 CRD(专门用来配置altermanager),比如我们将 Critical 这个接收器的报警信息都发送到钉钉进行报警。

    首先在 monitoring 命名空间下面部署一个简单的钉钉 webhook 处理器,前面 Alertmanager 章节已经学习过,这里就不赘述了。

    然后新建一个 AlertmanagerConfig 类型的资源对象,可以通过 kubectl explain alertmanagerconfig 或者在线 API 文档来查看字段的含义

    1. # alertmanager-config.yaml
    2. apiVersion: monitoring.coreos.com/v1alpha1
    3. kind: AlertmanagerConfig
    4. metadata:
    5. name: dinghook
    6. namespace: monitoring
    7. labels:
    8. alertmanagerConfig: example
    9. spec:
    10. receivers:
    11. - name: Critical
    12. webhookConfigs:
    13. - url: http://
    14. sendResolved: true
    15. route:
    16. groupBy: ["namespace"]
    17. groupWait: 30s
    18. groupInterval: 5m
    19. repeatInterval: 12h
    20. receiver: Critical
    21. routes:
    22. - receiver: Critical
    23. match:
    24. severity: critical

    不过如果直接创建上面的配置是不会生效的,我们需要添加一个 Label 标签,并在 Alertmanager 的资源对象中通过标签来关联上面的这个对象,比如我们这里新增了一个 Label 标签:alertmanagerConfig: example,然后需要重新更新 Alertmanager 对象,添加 alertmanagerConfigSelector 属性去匹配 AlertmanagerConfig 资源对象:

    1. # alertmanager-alertmanager.yaml
    2. apiVersion: monitoring.coreos.com/v1
    3. kind: Alertmanager
    4. metadata:
    5. labels:
    6. alertmanager: main
    7. name: main
    8. namespace: monitoring
    9. spec:
    10. image: quay.io/prometheus/alertmanager:v0.21.0
    11. nodeSelector:
    12. kubernetes.io/os: linux
    13. replicas: 3
    14. securityContext:
    15. fsGroup: 2000
    16. runAsNonRoot: true
    17. runAsUser: 1000
    18. serviceAccountName: alertmanager-main
    19. version: v0.21.0
    20. configSecret:
    21. alertmanagerConfigSelector: # 匹配 AlertmanagerConfig 的标签
    22. matchLabels:
    23. alertmanagerConfig: example

    现在我们重新更新上面的资源对象:

    1. kubectl apply -f alertmanager-config.yaml
    2. kubectl apply -f alertmanager-alertmanager.yaml

    更新完成后默认的配置会和我们创建的配置进行合并,我们可以重新查看生成的 Secret 资源对象内容,也可以直接查看 Alertmanager 的 WEB UI 界面的配置内容:

    可以看到我们在 AlertmanagerConfig 里面定义的名为 Critical 的 Receiver,在最终生成的配置中名称了 monitoring-dinghook-Critical,格式为 --

    到这里我们就完成了 Prometheus Operator 的自定义监控和报警。

    如果你之后再想定义一些路由规则和接收器直接在 AlertmanagerConfig 定义就行了,创建之后altermanager通过alertmanagerConfigSelector匹配上就行了,那么就会和原本的配置合并在一起。

  • 相关阅读:
    受了刺激,决定专升本
    ES6 入门教程 3 变量的解构赋值 3.2 对象的解构赋值
    LVS+Keepalived群集
    PaddleX解决分类、检测两大场景问题?实战精讲教程来了!
    Git 入门实用命令
    每日一题 2520. 统计能整除数字的位数(简单)
    DOM知识点总结
    代码随想录打卡第四十八天|动态规划章节 ● 322. 零钱兑换 ● 279.完全平方数
    StableSwarmUI 安装教程(详细)
    如何策划好一场商直播
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/125892280