首页>软件资讯>常见问题

常见问题

grafana 告警

发布时间:2026-01-21 11:49:49人气:75


一、Grafana 告警核心架构(V9+ 统一告警)

从 Grafana 9.0 开始,Grafana 采用了统一的告警系统,支持多种数据源:


1. 数据源类型

Grafana 管理型告警:直接基于数据源(Prometheus、MySQL、InfluxDB 等)查询创建告警规则


数据源管理型告警:告警规则存储在外部系统(如 Prometheus Alertmanager、Loki Ruler)


2. 核心概念

text

数据源查询 → 告警规则 → 告警策略 → 联系点 → 通知模板 → 静默/抑制规则

二、配置告警的完整流程

步骤 1:创建告警规则

方法 A:从面板创建(推荐新手)

在已有仪表板中,编辑面板


切换到 Alert 选项卡


点击 Create alert rule from this panel


方法 B:直接创建告警规则

左侧菜单:Alerting → Alert rules


点击 New alert rule


步骤 2:配置告警规则详情

yaml

# 示例:CPU 使用率告警规则

Rule name: "High CPU Usage"

Evaluation group: "default"  # 评估组,控制评估频率

步骤 3:设置查询条件

sql

-- 对于 Prometheus 数据源

Query A: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle", job="$job"}[5m])) * 100)


-- 对于 MySQL 数据源

SELECT AVG(cpu_usage) FROM metrics WHERE host = '$host'

步骤 4:配置告警条件

yaml

条件表达式: "WHEN avg() OF query(A, 5m, NOW) IS ABOVE 80"

评估间隔: "每30秒"

持续时间: "5分钟"  # 持续5分钟才触发告警,避免抖动

步骤 5:添加标签和注解

yaml

# 标签 - 用于路由和分组

标签:

  severity: warning

  team: infrastructure

  resource: cpu


# 注解 - 告警通知中的详细信息

注解:

  summary: "高CPU使用率: {{ $labels.instance }}"

  description: "CPU使用率已达到 {{ $value }}%,持续5分钟"

  runbook_url: "https://wiki.company.com/runbook/high-cpu"

步骤 6:配置通知策略

左侧菜单:Alerting → Contact points


添加联系点(通知渠道):


Email


Slack


Webhook


PagerDuty


Microsoft Teams


钉钉/企业微信


步骤 7:配置通知策略

yaml

策略名称: "紧急告警策略"

匹配标签: severity = critical

组等待时间: 30秒  # 同组告警等待时间

重复间隔: 4小时   # 重复发送间隔

联系点: "PagerDuty-OnCall"

三、告警规则配置示例

1. CPU 使用率告警

yaml

名称: CPU使用率超过80%

数据源: Prometheus

查询: 

  A: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100)

条件:

  WHEN avg() OF A IS ABOVE 80

  FOR 2m

标签:

  severity: warning

  metric: cpu

2. 内存不足告警

yaml

名称: 内存可用率低于10%

查询:

  A: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100

条件:

  WHEN last() OF A IS BELOW 10

  FOR 1m

标签:

  severity: critical

3. 服务宕机告警

yaml

名称: 服务不可用

查询:

  A: up{job="api-service"}

条件:

  WHEN min() OF A IS BELOW 1

  FOR 30s

标签:

  severity: critical

4. 错误率告警

yaml

名称: HTTP错误率超过5%

查询:

  A: rate(http_requests_total{status=~"5.."}[5m])

  B: rate(http_requests_total[5m])

  C: (A / B) * 100  # 使用表达式

条件:

  WHEN avg() OF C IS ABOVE 5

  FOR 2m

四、通知渠道配置示例

1. Slack 配置

json

{

  "url": "https://hooks.slack.com/services/XXX/YYY/ZZZ",

  "title": "{{ template "slack.default.title" . }}",

  "text": "{{ template "slack.default.text" . }}",

  "channel": "#alerts",

  "username": "Grafana Alert",

  "icon_emoji": ":warning:"

}

2. Email 配置

yaml

地址: team-alerts@company.com

主题: "[{{ .Status | toUpper }}] {{ .GroupLabels.alertname }}"

正文模板: 自定义HTML模板

3. Webhook(对接内部系统)

json

{

  "url": "http://internal-api.company.com/alerts",

  "method": "POST",

  "headers": {"Authorization": "Bearer xyz"},

  "body": {

    "alert": "{{ .GroupLabels.alertname }}",

    "severity": "{{ .CommonLabels.severity }}",

    "value": "{{ .CommonAnnotations.value }}"

  }

}

五、高级功能

1. 告警分组

yaml

分组依据: [severity, region]  # 按严重性和地区分组

组等待时间: 30秒              # 同一组告警等待30秒聚合

组间隔: 5分钟                # 组间发送间隔

2. 抑制规则

防止告警风暴,当更严重的告警触发时抑制次要告警:


yaml

源匹配:

  severity: critical

目标匹配:

  severity: warning

条件: 

  source和target的[instance]标签相等

3. 静默规则

临时屏蔽告警(用于维护期间):


yaml

匹配标签:

  instance: "server-.*"

  或 alertname: "HighCPU"

时间: 

  开始: 2024-01-01 00:00

  结束: 2024-01-01 06:00

创建者: "zhangsan"

注释: "计划性维护"

4. 告警模板

自定义通知格式:


gotemplate

{{ define "custom.message" }}

告警名称: {{ .GroupLabels.alertname }}

状态: {{ .Status }}

实例: {{ .CommonLabels.instance }}

值: {{ .CommonAnnotations.value }}

时间: {{ .StartsAt }}

{{ end }}

六、最佳实践

1. 告警分级原则

yaml

P0/Critical (立即响应):

  - 服务不可用

  - 数据丢失

  - 安全漏洞


P1/Warning (当天处理):

  - 性能下降

  - 容量预警

  - 错误率上升


P2/Info (关注):

  - 趋势性异常

  - 日志模式变化

2. 有效告警的 SMART 原则

Specific:明确具体


Measurable:可度量


Actionable:可操作


Relevant:相关性强


Timely:及时性


3. 避免告警疲劳

设置合理的阈值(避免过于敏感)


使用持续时间过滤抖动


合理分组减少通知数量


设置告警升级策略


4. 告警生命周期管理

告警生命周期管理.png

七、常见问题排查

1. 告警不触发

text

检查步骤:

1. 数据源是否正常查询到数据?

2. 告警规则是否已保存并启用?

3. 评估间隔是否合适?

4. 持续时间设置是否过长?

2. 通知未发送

text

检查步骤:

1. 联系点配置是否正确?

2. 通知策略是否匹配标签?

3. 静默规则是否生效?

4. 查看 Alerting → Notifications 查看发送状态

3. 告警状态查看

Alert rules:所有告警规则状态


Alert groups:分组后的告警


Silences:当前生效的静默


Notification policies:通知策略树


八、与外部系统集成

1. 对接 Prometheus Alertmanager

yaml

# 在 Grafana 配置中

[alerting]

enabled = true


[external_alertmanagers]

urls = "http://alertmanager:9093"

2. 通过 Webhook 触发自动化

python

# 示例:自动扩容

@app.route('/webhook/scale', methods=['POST'])

def scale_service():

    alert = request.json

    if alert['status'] == 'firing' and alert['labels']['metric'] == 'high_cpu':

        scale_up(alert['labels']['service'])

    return 'OK'

总结

Grafana 告警的核心流程:


定义规则:基于数据查询设置条件


配置通知:设置联系点和通知策略


管理告警:使用分组、抑制、静默优化体验


持续优化:定期复盘告警有效性


关键建议:


从少量关键告警开始,逐步完善


告警消息必须包含具体问题和操作建议


建立告警响应 SOP(标准作业程序)


定期清理无效告警规则


Grafana 告警的强大之处在于其与可视化仪表板的紧密集成,让你可以在看到图表异常的同时,立即配置相应的告警规则。



上一条:grafana模板

下一条:没有了!