Prometheus指标体系与PromQL查询基础
网站运维的监控体系以Prometheus为核心,PromQL是其查询语言。理解指标类型是写好查询的前提:Counter(只增计数器,如http_requests_total)、Gauge(可增减仪表,如node_memory_available_bytes)、Histogram(直方图,如http_request_duration_seconds_bucket)和Summary(分位数摘要)。Histogram类型是性能监控的主力,通过bucket分布可计算任意分位数。
PromQL即时向量查询的几个高频模式:
# 5分钟内HTTP请求速率(每秒)
rate(http_requests_total{job="api-server"}[5m])
# P99延迟(基于Histogram)
histogram_quantile(0.99,
rate(http_request_duration_seconds_bucket{job="api-server"}[5m])
)
# 按状态码分组的错误率
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) * 100
Grafana仪表盘布局设计原则
仪表盘不是图表的堆砌,而是运维决策的信息架构。一套标准的服务仪表盘分层结构:第一行放SLI总览(可用性、延迟P50/P99、吞吐量、错误率),一眼判断系统健康;第二行放资源水位(CPU、内存、磁盘、网络),定位容量瓶颈;第三行放应用层指标(JVM堆、连接池、队列深度),深挖业务异常;第四行放关联依赖(数据库延迟、缓存命中率、下游服务状态),排查级联故障。
面板类型选择:折线图用于时序趋势(CPU、延迟),Stat面板用于关键SLI数值展示,Heatmap用于分布密度可视化(延迟分布),Table面板用于多维度聚合数据。变量(Variables)是仪表盘复用的核心——通过$job、$instance、$namespace变量,一套仪表盘可覆盖所有同类型服务。
高可用服务的关键SLI仪表盘配置
以一个API服务为例,搭建SLI驱动的监控面板。四大黄金指标(Four Golden Signals)是基本盘:
# Latency: P50/P95/P99延迟趋势
label_replace(
histogram_quantile(0.99,
rate(http_request_duration_seconds_bucket{job="$job"}[$__rate_interval])
), "quantile", "p99", "", ""
)
or
label_replace(
histogram_quantile(0.50,
rate(http_request_duration_seconds_bucket{job="$job"}[$__rate_interval])
), "quantile", "p50", "", ""
)
# Traffic: 请求QPS
sum(rate(http_requests_total{job="$job"}[$__rate_interval])) by (method)
# Errors: 5xx错误率
sum(rate(http_requests_total{job="$job",status=~"5.."}[$__rate_interval]))
/ sum(rate(http_requests_total{job="$job"}[$__rate_interval])) * 100
# Saturation: 连接池使用率
hikaricp_connections_active{pool="$pool"}
/ hikaricp_connections_max{pool="$pool"} * 100
每个面板设置阈值颜色:绿色(正常)、黄色(预警,P99超过SLO的50%)、红色(违反SLO)。Grafana 10+支持Value Mappings和Thresholds联动,数值面板颜色随SLI状态自动切换。
告警规则与多级通知路由设计
告警设计遵循”可操作性”原则——每条告警都必须有明确的处置动作,否则就是噪音。告警分级:P0(立即响应,5分钟内)、P1(30分钟响应)、P2(工作时间处理)、P3(定期Review)。
# Alertmanager路由配置示例
route:
group_by: ['alertname', 'namespace', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'default'
routes:
- match:
severity: critical
receiver: 'oncall-pager'
repeat_interval: 15m
- match:
severity: warning
receiver: 'oncall-slack'
repeat_interval: 2h
- match_re:
alertname: ^(NodeDown|KubeNodeNotReady)$
receiver: 'infra-pager'
group_wait: 10s
告警抑制规则减少级联噪音:当K8s节点NotReady告警触发时,自动抑制该节点上所有Pod级别告警:
# 抑制规则
inhibit_rules:
- source_match:
alertname: KubeNodeNotReady
target_match_re:
alertname: ^(KubePodNotReady|KubePodCrashLooping)$
equal: ['node']
仪表盘模板化与多服务复用方案
管理50+服务的仪表盘,逐个手工配置不现实。方案是使用Grafana的Provisioning机制配合JSON模板:将仪表盘定义为JSON文件,通过label值注入变量,Grafana启动时自动加载。配合Jsonnet或Terraform生成仪表盘JSON,一套模板覆盖所有微服务。
Grafana还支持Export/Import机制,导出仪表盘JSON后替换硬编码的job名称为变量$job,通过API批量导入到不同团队目录。配合Folder权限控制,各团队只看到自己的仪表盘,运维全局仪表盘放在General目录对全员可见。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/grafana-yi-biao-pan-yu-promql-cha-xun-yu-ju-she-ji-shi-zhan/