K8S监控报警设计

基础知识看上一篇文章:基于Prometheus的K8S监控报警设计

这篇文章的主题是汇总k8s相关的所有监控项和报警项的设计

 

控制面-etcd-监控报警

控制面-apiserver-监控报警

控制面-scheduler-监控报警

控制面-controller-manager-监控报警

node面-监控报警


kubelet

kube-proxy

集群-k8s对象状态-监控报警


数据来源是:kube-state-metrics

addon-插件-监控报警


coredns

cni

ingress nginx?

 

基础通用-监控报警

 

其他组件-监控报警

CPU 使用率
100 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100

内存利用率
1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)

磁盘剩余百分比
(node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) < 0.1

HTTP 错误率
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))

P95 响应时间
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))

目标失联告警
up == 0
absent(up{job="my-job"})

 

7.1 CPU 使用率
promql
# 节点CPU使用率 (1 - 空闲时间 / 总时间)
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100)
7.2 内存使用率
promql
# 节点内存使用率
(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
7.3 磁盘使用率
promql
# 节点磁盘使用率
(1 - node_filesystem_free_bytes / node_filesystem_size_bytes) * 100
7.4 服务 QPS (Queries Per Second)
promql
# 按 job 和 status 统计的QPS
sum(rate(http_requests_total[5m])) by (job, status)
7.5 错误率
promql
# 计算错误率(假设5xx为错误)
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))

 

示例1:Pod 资源使用分析
promql
# 计算每个Pod在过去一小时内消耗的总CPU时间
sum_over_time(
container_cpu_usage_seconds_total[1h]
)

# 计算每个Pod在过去15分钟的平均内存使用量
avg_over_time(
container_memory_usage_bytes[15m]
)
示例2:节点级别资源统计
promql
# 计算每个节点过去24小时的平均CPU使用率
avg_over_time(
(1 - avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance))[1d]
)

# 计算每个节点过去一小时的磁盘IO总量
sum_over_time(
node_disk_read_bytes_total[1h]
) +
sum_over_time(
node_disk_written_bytes_total[1h]
)
示例3:应用性能监控
promql
# 计算过去30分钟API的平均响应时间
avg_over_time(
http_request_duration_seconds_sum[30m]
) /
avg_over_time(
http_request_duration_seconds_count[30m]
)

# 计算过去一小时内服务的总错误数
sum_over_time(
http_requests_total{status=~"5.."}[1h]
)
4. 与其他函数的组合使用
与 rate() 组合
promql
# 计算过去一小时的每秒平均请求率
avg_over_time(
rate(http_requests_total[5m])[1h]
)
与 histogram_quantile() 组合
promql
# 计算过去30分钟的P95延迟平均值
avg_over_time(
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[2m]))[30m]
)
多层聚合
promql
# 计算所有命名空间在过去24小时的平均CPU使用率
avg(
avg_over_time(
sum(rate(container_cpu_usage_seconds_total[5m])) by (namespace)[1d]
)
)