天天看点

prometheus operator告警规则(一):你的cpu够用吗?

ack-prometheus-operator就像一把瑞士军刀,包含非常丰富的功能,安装后会自动部署prometheus、grafana、alertmanager等组件,并会下发很多的监控相关的规则,包括metric采集规则、告警规则和grafana dashboard。但是很朋友看到这些指标和规则后,只能感受到他的强大,却不知道如何发挥它强大的功能,我们这一系列文章就是描述如何快速上手使用ack-prometheus-operator,让这把瑞士军刀发挥出强大的作用

背景知识

开始之前

  • 你需要有一个ACK集群,以及配置好可以管理这个集群的kubectl,集群上还要有ingress controller和helm tiller,如果你还没有集群,可以 使用ACK快速部署kubernetes集群
  • 安装ack-prometheus-operator,参考 这里

CPUThrottlingHigh

很多Kubernetes的用户都会苦恼如何配置cpu的limit,并且不知如何确认自己当前的配置是否合理,这里就来演示如何利用ack-prometheus-operator自带的告警规则发现cpu limit的不合理配置

ack-prometheus-operator部署后默认带有个叫CPUThrottlingHigh的rule,expr如下:

100
  * sum by(container_name, pod_name, namespace) (increase(container_cpu_cfs_throttled_periods_total{container_name!=""}[5m]))
  / sum by(container_name, pod_name, namespace) (increase(container_cpu_cfs_periods_total[5m]))
  > 25           

这个表达式的作用是查出最近5分钟,超过25%的CPU执行周期受到限制的container,这里用到了来自kubelet的两个重要指标:

  1. container_cpu_cfs_periods_total:container生命周期中度过的cpu周期总数
  2. container_cpu_cfs_throttled_periods_total:container生命周期中度过的受限的cpu周期总数

下面我们就用一个例子来验证这个告警规则的可靠性:

apiVersion: v1
kind: Pod
metadata:
  name: cpu-demo
spec:
  containers:
  - name: cpu-demo
    image: vish/stress
    resources:
      limits:
        cpu: "2"
      requests:
        cpu: "2"
    args:
    - -cpus
    - "3"           

这个pod,我们给他的cpu limit配置成2,然后容器的进程配置申请3个cpu核心的用量,这个pod下发下去,不久就可以在Prometheus的alert页面看到

CPUThrottlingHigh

这个告警规则变成active

prometheus operator告警规则(一):你的cpu够用吗?

小结

Prometheus为kubernetes提供了丰富的可观测指标,有了这些指标,我们队集群的掌握就告别了盲人摸象的阶段,并且可以利用我们观测到的指标来持续的优化我们的应用配置

继续阅读