Kubernetes Dashboard VMAlert Record 规则部署指南
目录
Kubernetes Dashboard VMAlert Record 规则部署指南
本文档说明如何使用VMAlert Recording Rules将Kubernetes dashboard中的所有查询语句按天、周、月维度进行聚合。
概述
通过VMAlert Recording Rules,我们可以将原始的Prometheus指标转换为预聚合的指标,提供以下优势:
- 性能提升:预聚合指标查询速度更快
- 存储优化:减少重复计算,优化存储空间
- 多维度聚合:支持天、周、月等不同时间维度的聚合
- 业务指标:提供增长率、趋势等业务相关指标
规则结构
1. CPU使用率聚合指标 (k8s.cpu.aggregation)
实时指标:
k8s:cpu:usage:rate5m- 5分钟CPU使用率k8s:cpu:usage:rate1h- 1小时CPU使用率k8s:cpu:usage:windows:rate5m- Windows节点5分钟CPU使用率
日级聚合:
k8s:cpu:usage:daily_avg- 24小时平均CPU使用率k8s:cpu:usage:daily_max- 24小时最大CPU使用率k8s:cpu:usage:daily_min- 24小时最小CPU使用率k8s:cpu:usage:daily_p95- 24小时P95 CPU使用率
周级聚合:
k8s:cpu:usage:weekly_avg- 7天平均CPU使用率k8s:cpu:usage:weekly_max- 7天最大CPU使用率k8s:cpu:usage:weekly_min- 7天最小CPU使用率k8s:cpu:usage:weekly_p95- 7天P95 CPU使用率
月级聚合:
k8s:cpu:usage:monthly_avg- 30天平均CPU使用率k8s:cpu:usage:monthly_max- 30天最大CPU使用率k8s:cpu:usage:monthly_min- 30天最小CPU使用率k8s:cpu:usage:monthly_p95- 30天P95 CPU使用率
2. 内存使用率聚合指标 (k8s.memory.aggregation)
实时指标:
k8s:memory:usage:rate5m- 5分钟内存使用率k8s:memory:usage:rate1h- 1小时内存使用率k8s:memory:usage:windows:rate5m- Windows节点5分钟内存使用率
聚合指标:与CPU类似,提供日、周、月三个维度的聚合
3. Kubernetes资源计数聚合指标 (k8s.resources.aggregation)
实时计数:
k8s:resources:namespaces:count- 命名空间数量k8s:resources:running_containers:count- 运行中容器数量k8s:resources:running_pods:count- 运行中Pod数量k8s:resources:services:count- 服务数量k8s:resources:deployments:count- 部署数量k8s:resources:statefulsets:count- StatefulSet数量k8s:resources:daemonsets:count- DaemonSet数量k8s:resources:pvcs:count- PVC数量k8s:resources:hpas:count- HPA数量k8s:resources:configmaps:count- ConfigMap数量k8s:resources:secrets:count- Secret数量k8s:resources:networkpolicies:count- 网络策略数量k8s:resources:nodes:count- 节点数量
聚合指标:提供运行中Pod数量的日、周、月聚合
4. Pod QoS和状态聚合指标 (k8s.pods.aggregation)
QoS分类计数:
k8s:pods:qos:guaranteed:count- Guaranteed QoS Pod数量k8s:pods:qos:burstable:count- Burstable QoS Pod数量k8s:pods:qos:best_effort:count- BestEffort QoS Pod数量k8s:pods:total:count- 总Pod数量
状态原因计数:
k8s:pods:status_reason:evicted:count- 被驱逐的Pod数量k8s:pods:status_reason:preempted:count- 被抢占的Pod数量k8s:pods:status_reason:node_lost:count- 节点丢失的Pod数量
聚合指标:提供各QoS分类的日、周、月聚合
5. 容器重启和OOM事件聚合指标 (k8s.events.aggregation)
实时事件计数:
k8s:events:oom:rate5m- 5分钟OOM事件速率k8s:events:restarts:rate5m- 5分钟重启事件速率k8s:events:oom:rate1h- 1小时OOM事件速率k8s:events:restarts:rate1h- 1小时重启事件速率
聚合指标:
- 日级:
daily_total,daily_avg - 周级:
weekly_total,weekly_avg - 月级:
monthly_total,monthly_avg
6. 网络使用率聚合指标 (k8s.network.aggregation)
实时网络使用率:
k8s:network:receive:rate5m- 5分钟接收速率k8s:network:transmit:rate5m- 5分钟发送速率k8s:network:receive:rate1h- 1小时接收速率k8s:network:transmit:rate1h- 1小时发送速率
网络丢包率:
k8s:network:dropped:receive:rate5m- 5分钟接收丢包率k8s:network:dropped:transmit:rate5m- 5分钟发送丢包率
聚合指标:提供日、周、月三个维度的聚合
7. 按命名空间的网络使用率聚合指标 (k8s.network.namespace.aggregation)
实时按命名空间网络使用率:
k8s:network:namespace:receive:rate5m- 5分钟按命名空间接收速率k8s:network:namespace:transmit:rate5m- 5分钟按命名空间发送速率
聚合指标:提供日、周、月三个维度的聚合
8. 按实例的网络使用率聚合指标 (k8s.network.instance.aggregation)
实时按实例网络使用率:
k8s:network:instance:receive:rate5m- 5分钟按实例接收速率k8s:network:instance:transmit:rate5m- 5分钟按实例发送速率
聚合指标:提供日、周、月三个维度的聚合
9. 业务指标聚合 (k8s.business.aggregation)
日增长率指标:
k8s:business:cpu:usage:daily_growth_rate- CPU使用率日增长率k8s:business:memory:usage:daily_growth_rate- 内存使用率日增长率k8s:business:running_pods:daily_growth_rate- 运行中Pod数量日增长率
周环比增长率:
k8s:business:cpu:usage:week_over_week- CPU使用率周环比增长率k8s:business:memory:usage:week_over_week- 内存使用率周环比增长率k8s:business:running_pods:week_over_week- 运行中Pod数量周环比增长率
月环比增长率:
k8s:business:cpu:usage:month_over_month- CPU使用率月环比增长率k8s:business:memory:usage:month_over_month- 内存使用率月环比增长率k8s:business:running_pods:month_over_month- 运行中Pod数量月环比增长率
趋势指标:
k8s:business:cpu:usage:trend- CPU使用率趋势k8s:business:memory:usage:trend- 内存使用率趋势k8s:business:running_pods:trend- 运行中Pod数量趋势
10. 性能指标聚合 (k8s.performance.aggregation)
资源利用率指标:
k8s:performance:cpu:efficiency- CPU资源利用效率k8s:performance:memory:efficiency- 内存资源利用效率
聚合指标:提供日、周、月三个维度的聚合
部署步骤
步骤1:创建ConfigMap
| |
步骤2:部署VMAlert
| |
步骤3:应用部署
| |
步骤4:验证规则执行
| |
步骤5:验证指标生成
| |
使用示例
1. 创建基于聚合指标的Dashboard
在Grafana中,可以使用这些预聚合指标创建更高效的dashboard:
CPU使用率趋势图:
| |
内存使用率对比图:
| |
业务增长趋势图:
| |
2. 创建告警规则
基于聚合指标创建告警规则:
| |
性能优化建议
1. 规则评估间隔
- 实时指标:30秒评估间隔,适合需要实时监控的指标
- 聚合指标:可以根据需要调整评估间隔,减少计算压力
2. 存储优化
- 使用VictoriaMetrics的压缩功能
- 根据业务需求设置合适的数据保留期
- 考虑使用降采样策略
3. 查询优化
- 优先使用预聚合指标进行查询
- 避免在dashboard中使用复杂的原始指标查询
- 利用聚合指标的标签进行分组查询
监控和维护
1. VMAlert状态监控
| |
2. 指标生成监控
| |
3. 性能监控
| |
故障排除
1. 规则不执行
- 检查VMAlert日志
- 验证规则文件语法
- 检查数据源连接
2. 指标不生成
- 验证原始指标是否存在
- 检查规则表达式语法
- 确认时间范围设置
3. 性能问题
- 调整规则评估间隔
- 优化规则表达式
- 增加VMAlert资源限制
总结
通过VMAlert Recording Rules,我们可以将Kubernetes dashboard中的复杂查询转换为高效的预聚合指标,提供多维度的时间聚合和业务指标。这不仅提升了查询性能,还为业务监控和趋势分析提供了强有力的支持。
建议根据实际业务需求调整规则配置,并持续监控规则执行状态和指标生成情况。