Grafana 使用方式与典型场景
使用方式与典型场景
示例一:错误率告警(PromQL)
# 告警查询:5 分钟窗口内 5xx 占比超过 1%
sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))
> 0.01
# 建议配置
# Evaluate every: 1m
# for: 5m (连续 5 分钟满足才触发,过滤瞬时抖动)
# No Data / Error: 设为 Alerting 或 OK 需谨慎选择,见下文说明
分母用不带 status 过滤的全量请求数,这样「流量掉零」时不会因为分母也是零而算出异常值;如果确实需要区分「无流量」和「有流量但全错」,可以再加一条「QPS 低于某个值则不发错误率告警」的规则,或在 No Data 处理上做文章。
示例二:P95 延迟面板
# 用直方图桶算 P95 延迟(单位秒,面板单位设为 ms 需自行换算)
histogram_quantile(
0.95,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le)
)
# 按服务拆分,便于发现是哪个服务拖慢了整体
histogram_quantile(
0.95,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service)
)
rate(...[5m]) 算的是每秒增长率,时间窗口不能小于两次采集间隔的若干倍,否则曲线会剧烈锯齿;histogram_quantile 必须保留 le 标签做聚合分组,否则算出来的分位数没有意义。分位数由桶边界近似而来,桶的划分决定了精度,具体设置以官方文档与客户端库说明为准。
示例三:变量与典型查询组合
# 变量 service(Query 类型,从指标里取标签值)
label_values(http_requests_total, service)
# 变量 env(Custom 类型)
prod,staging,test
# 面板查询里引用变量
sum(rate(http_requests_total{env="$env", service="$service"}[5m])) by (status)
# 做「所有服务」选项时用多选 + All,查询要写成正则匹配
sum(rate(http_requests_total{service=~"$service"}[5m]))
多选变量会在查询里展开成正则,所以引用时要用 =~ 而不是 =,这是新手最常踩的一个坑。
适合与不适合
- 适合:统一查看多源指标与日志、按环境或服务切换视图、把「发布—指标变化—告警」串在同一条时间轴上、给不同角色做不同层级的大盘。
- 不太适合:做需要复杂关联与多维下钻的 BI 分析(那是数据仓库与 BI 工具的领域);做高频写入的原始数据存储(Grafana 不存数据);做需要精确到单条记录的检索(用日志系统或数据库)。

