【问题标题】:Alert when docker container pod is in Error or CarshLoopBackOff kubernetes当 docker 容器 pod 处于 Error 或 CarshLoopBackOff kubernetes 时发出警报
【发布时间】:2018-09-03 11:18:40
【问题描述】:

我在 AWS 上设置了我的 kubernetes 集群,我尝试使用 cAdvisor + Prometheus + Alert manager 监控多个 pod。如果容器/pod 出现故障或卡在 Error 或 CarshLoopBackOff 状态或 stcuk 处于运行之外的任何其他状态,我想要做的是启动电子邮件警报(带有服务/容器名称)。

【问题讨论】:

    标签: docker kubernetes prometheus prometheus-alertmanager


    【解决方案1】:

    我正在使用这个:

        - alert: PodCrashLooping
      annotations:
        description: Pod {{ $labels.namespace }}/{{ $labels.pod }} ({{ $labels.container }}) is restarting {{ printf "%.2f" $value }} times / 5 minutes.
        summary: Pod is crash looping.
      expr: rate(kube_pod_container_status_restarts_total{job="kube-state-metrics",namespace=~".*"}[5m]) * 60 * 5 > 0
      for: 5m
      labels:
        severity: critical
    

    【讨论】:

      【解决方案2】:

      普罗米修斯收集a wide range of metrics。例如,您可以使用指标 kube_pod_container_status_restarts_total 来监控重启,这将反映您的问题。

      它包含您可以在警报中使用的标签:

      • 容器=container-name
      • 命名空间=pod-namespace
      • 吊舱=pod-name

      因此,您需要做的就是通过添加正确的 SMTP 设置、接收器​​和类似的规则来配置您的 alertmanager.yaml config

      global:
        # The smarthost and SMTP sender used for mail notifications.
        smtp_smarthost: 'localhost:25'
        smtp_from: 'alertmanager@example.org'
        smtp_auth_username: 'alertmanager'
        smtp_auth_password: 'password'
      
      receivers:
      - name: 'team-X-mails'
        email_configs:
        - to: 'team-X+alerts@example.org'
      
      # Only one default receiver
      route:
        receiver: team-X-mails
      
      # Example group with one alert
      groups:
      - name: example-alert
        rules:
          # Alert about restarts
        - alert: RestartAlerts
          expr: count(kube_pod_container_status_restarts_total) by (pod-name) > 5
          for: 10m
          annotations:
            summary: "More than 5 restarts in pod {{ $labels.pod-name }}"
            description: "{{ $labels.container-name }} restarted (current value: {{ $value }}s) times in pod {{ $labels.pod-namespace }}/{{ $labels.pod-name }}"
      

      【讨论】:

      • 您的意思是,如果一个 pod 卡在 Crashloopbackoff 中,这意味着它将重新启动多个以从“Crashloopbackoff”状态中恢复?还有如何监控 Prometheus pods(server,alertmanager) 本身是否卡在这个状态?
      • 1.是的,这是该情况下的状态示例 - nfs-web-fdr9h 0/1 CrashLoopBackOff 8 16m。因此,这里的 8 - 是重新启动的计数。 2. 是的,它会监控自己,因为它们也是 pod。但是,当然,Prometheus 和 Alertmanager 可以监视自己并在工作时发送警报。如果他们宕机了——谁会发送警报?:)
      • 当我在 prometheus 数据库中运行 kube_pod_container_status_restarts_total 时,它给了我“没有数据”,但我已经杀死了 kube-dns pod 并重新创建了一个新的
      • 不应该pod-name 而只是podcontainer-name 等也一样...?
      • 难道“计数”不考虑重新启动 pod 的所有“EVER”事件吗? sum by (pod) (increase(kube_pod_container_status_restarts_total[5m])) > 2 会不会更好,因为它可能已经重新启动,但如果它恢复了 - 一切都很好。
      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 2021-09-27
      • 2019-09-12
      • 2022-01-17
      • 2020-09-22
      • 2017-08-25
      • 2016-06-06
      • 1970-01-01
      相关资源
      最近更新 更多