指标分析Skill metrics-analysis

这个技能用于监控和分析系统性能,通过Prometheus和Grafana进行时间序列指标查询和处理,包括延迟、错误率和资源使用情况。适用于DevOps、系统监控和性能优化,关键词包括Prometheus、Grafana、指标分析、监控、PromQL、USE方法、RED方法。

DevOps 0 次安装 0 次浏览 更新于 3/15/2026

名称: 指标分析 描述: Prometheus/Grafana指标分析和PromQL查询。用于调查延迟、错误率、资源使用或任何时间序列指标。 允许工具: Bash(python *)

指标分析

认证

重要: 凭据通过代理层自动注入。不要检查环境变量中的GRAFANA_API_KEYPROMETHEUS_URL——它们不会对您可见。直接运行脚本即可;认证是透明处理的。


核心原则: USE & RED方法

USE方法(用于基础设施):

  • Utilization - 资源有多忙?
  • Saturation - 有多少工作排队?
  • Errors - 是否有错误事件?

RED方法(用于服务):

  • Rate - 每秒请求数
  • Errors - 错误率
  • Duration - 延迟分布

可用脚本

所有脚本都在.claude/skills/metrics-analysis/scripts/

query_prometheus.py - 执行PromQL查询

python .claude/skills/metrics-analysis/scripts/query_prometheus.py --query PROMQL [--time-range MINUTES] [--step STEP]

# 示例:
python .claude/skills/metrics-analysis/scripts/query_prometheus.py --query "up"
python .claude/skills/metrics-analysis/scripts/query_prometheus.py --query "rate(http_requests_total[5m])" --time-range 60
python .claude/skills/metrics-analysis/scripts/query_prometheus.py --query "histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))"

list_dashboards.py - 查找Grafana仪表板

python .claude/skills/metrics-analysis/scripts/list_dashboards.py [--query SEARCH_TERM]

# 示例:
python .claude/skills/metrics-analysis/scripts/list_dashboards.py
python .claude/skills/metrics-analysis/scripts/list_dashboards.py --query "api"

get_alerts.py - 检查触发警报

python .claude/skills/metrics-analysis/scripts/get_alerts.py [--state STATE]

# 示例:
python .claude/skills/metrics-analysis/scripts/get_alerts.py
python .claude/skills/metrics-analysis/scripts/get_alerts.py --state alerting

PromQL快速参考

基本查询

# 瞬时向量 - 当前值
http_requests_total{service="api"}

# 范围向量 - 时间内的值(用于速率计算)
http_requests_total{service="api"}[5m]

# 每秒增长率
rate(http_requests_total{service="api"}[5m])

常见运算符

# 速率(计数器→仪表,每秒)
rate(http_requests_total[5m])

# 增量(时间范围内的总增量)
increase(http_requests_total[1h])

# 时间平均
avg_over_time(cpu_usage[5m])

# 直方图分位数(p95, p99)
histogram_quantile(0.95, rate(http_request_duration_bucket[5m]))

聚合

# 跨所有实例求和
sum(rate(http_requests_total[5m]))

# 按标签分组
sum by (service) (rate(http_requests_total[5m]))

# 按标签平均
avg by (instance) (cpu_usage)

# 按值前5
 topk(5, sum by (service) (rate(http_requests_total[5m])))

标签匹配

# 精确匹配
http_requests_total{status="500"}

# 正则匹配
http_requests_total{status=~"5.."}

# 不等于
http_requests_total{status!="200"}

# 多标签
http_requests_total{service="api", status=~"5.."}

调查工作流程

1. 延迟调查

# 步骤1: 检查整体延迟趋势
python query_prometheus.py --query 'histogram_quantile(0.95, rate(http_request_duration_seconds_bucket{service="api"}[5m]))' --time-range 60

# 步骤2: 比较p50与p99
python query_prometheus.py --query 'histogram_quantile(0.50, rate(http_request_duration_seconds_bucket{service="api"}[5m]))'

# 步骤3: 按端点细分
python query_prometheus.py --query 'histogram_quantile(0.95, sum by (endpoint) (rate(http_request_duration_seconds_bucket{service="api"}[5m])))'

2. 错误率调查

# 步骤1: 整体错误率
python query_prometheus.py --query 'sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))'

# 步骤2: 按状态码错误
python query_prometheus.py --query 'sum by (status) (rate(http_requests_total{status=~"[45].."}[5m]))'

# 步骤3: 按服务错误
python query_prometheus.py --query 'sum by (service) (rate(http_requests_total{status=~"5.."}[5m]))'

3. 资源调查(CPU/内存)

# CPU使用率
python query_prometheus.py --query 'avg by (instance) (rate(container_cpu_usage_seconds_total{pod=~"api-.*"}[5m]))'

# 内存使用百分比
python query_prometheus.py --query 'container_memory_usage_bytes{pod=~"api-.*"} / container_spec_memory_limit_bytes{pod=~"api-.*"}'

快速命令参考

目标 命令
请求速率 query_prometheus.py --query "sum(rate(http_requests_total[5m]))"
错误速率 query_prometheus.py --query "sum(rate(http_requests_total{status=~'5..'}[5m]))"
P95延迟 query_prometheus.py --query "histogram_quantile(0.95, ...)"
CPU使用率 query_prometheus.py --query "rate(container_cpu_usage_seconds_total[5m])"
查找仪表板 list_dashboards.py --query "api"
检查警报 get_alerts.py --state alerting

常见指标模式

请求指标

http_requests_total                    # 计数器
http_request_duration_seconds_bucket   # 直方图
http_requests_in_flight               # 仪表

Kubernetes指标

container_cpu_usage_seconds_total
container_memory_usage_bytes
kube_pod_container_status_restarts_total
kube_pod_status_phase

应避免的反模式

  1. 使用rate()没有范围向量 - 总是包含[5m]或类似
  2. 直接比较计数器 - 先使用rate()increase()
  3. 错误的分位数计算 - histogram_quantile需要_bucket指标
  4. 缺少标签过滤器 - 没有过滤器的查询返回所有系列
  5. 时间范围太短 - 使用至少2倍的抓取间隔用于rate()