homelab告警规则:Prometheus告警表达式编写指南

homelab告警规则:Prometheus告警表达式编写指南

【免费下载链接】homelab homelab是一个基于Ansible的角色集合,旨在帮助用户快速搭建和管理个人家庭实验室环境,涵盖了服务器、网络设备、容器编排等多种基础设施组件的部署和配置。 【免费下载链接】homelab 项目地址: https://gitcode.com/gh_mirrors/ho/homelab

告警系统架构概览

homelab项目采用Prometheus生态构建监控告警体系,核心配置位于system/monitoring-system/values.yaml。该配置通过kube-prometheus-stack实现Prometheus与Alertmanager集成,采用Webhook Transformer组件(files/webhook-transformer/alertmanager-to-ntfy.jsonnet)实现告警消息格式转换,最终通过ntfy服务推送通知。

告警处理流程

  1. Prometheus采集监控指标并基于规则文件计算告警状态
  2. 触发阈值时向Alertmanager发送告警事件
  3. Alertmanager按路由规则分组、抑制和静默处理
  4. 通过Webhook转发至通知服务(如ntfy)

基础表达式语法

数据类型与操作符

Prometheus支持数值型时间序列数据,核心操作符包括:

  • 比较运算符:> < >= <= == !=
  • 算术运算符:+ - * / % ^
  • 逻辑运算符:and or unless

常用函数

# 计算5分钟内CPU使用率平均值
avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) * 100

# 检测服务可用性
sum(up{job="kube-apiserver"} == 0) > 0

关键告警规则示例

节点资源告警

# 高CPU使用率告警
- alert: HighCPUUsage
  expr: avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) * 100 > 80
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: "节点CPU使用率过高"
    description: "节点 {{ $labels.instance }} CPU使用率超过80% (当前值: {{ $value | humanizePercentage }})"

容器异常告警

# 容器重启告警
- alert: ContainerRestarting
  expr: increase(kube_pod_container_status_restarts_total[15m]) > 3
  for: 2m
  labels:
    severity: critical
  annotations:
    summary: "容器频繁重启"
    description: "Pod {{ $labels.pod }} 容器 {{ $labels.container }} 15分钟内重启超过3次"

存储告警

# 磁盘空间告警
- alert: DiskSpaceLow
  expr: (node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes * 100 > 85
  for: 10m
  labels:
    severity: warning
  annotations:
    summary: "磁盘空间不足"
    description: "设备 {{ $labels.device }} 使用率超过85% (挂载点: {{ $labels.mountpoint }})"

高级告警策略

时间窗口计算

使用rate()irate()函数处理计数器类型指标:

  • rate():适合长期趋势分析,计算指定时间窗口内的平均增长率
  • irate():适合短期突发变化,计算最近两个样本的增长率
# 网络流量突发告警
sum(irate(node_network_transmit_bytes_total[2m])) by (instance) > 10000000

标签匹配与聚合

使用by()without()实现指标聚合:

# 多节点CPU负载均衡告警
max(avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance)) 
/ 
min(avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance)) 
> 2

告警抑制规则

system/monitoring-system/values.yaml中配置抑制规则,避免级联告警风暴:

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']

规则调试与验证

表达式测试方法

  1. 在Prometheus UI的"Graph"页面测试查询
  2. 使用promtool命令行工具验证规则文件:
promtool check rules alerts/*.rules.yml

常见问题排查

  • 告警延迟:检查for子句设置,确保采集间隔合理
  • 误报频繁:调整阈值或增加for持续时间
  • 指标缺失:验证jobinstance标签是否正确

最佳实践与模板

规则文件组织

建议按功能模块拆分规则文件:

monitoring/
├── node-alerts.rules.yml    # 节点级告警
├── k8s-alerts.rules.yml     # Kubernetes集群告警
├── application-alerts.rules.yml  # 应用告警

标准注解模板

annotations:
  summary: "{{ $labels.alertname }}"
  description: "触发条件: {{ $value }}\n影响对象: {{ $labels.instance }}\n开始时间: {{ $labels.startsAt }}"
  runbook_url: "https://homelab-docs.example.com/runbooks/{{ $labels.alertname }}"

内置告警参考

homelab默认配置包含基础看门狗告警(system/monitoring-system/values.yaml第46行):

routes:
  - receiver: ntfy
    matchers:
      - alertname = "Watchdog"

扩展阅读

【免费下载链接】homelab homelab是一个基于Ansible的角色集合,旨在帮助用户快速搭建和管理个人家庭实验室环境,涵盖了服务器、网络设备、容器编排等多种基础设施组件的部署和配置。 【免费下载链接】homelab 项目地址: https://gitcode.com/gh_mirrors/ho/homelab

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值