【监控与可观测性】08-PromQL查询语言速查:30个常用表达式
PromQL 查询语言速查:30个常用表达式
专栏:监控 & 可观测性
难度:入门
标签:PromQLPrometheus查询语言速查监控
前言
PromQL 是 Prometheus 的查询语言,掌握它是用好监控的关键。本文整理30个高频使用的表达式,收藏备用。
一、基础查询
# 1. 查询某个指标的当前值 node_memory_MemTotal_bytes # 2. 按标签过滤 http_requests_total{method="POST", status="200"} # 3. 正则匹配 http_requests_total{status=~"5.."} # 匹配5xx http_requests_total{status!~"2.."} # 排除2xx # 4. 查询某个指标的所有标签值 label_values(node_cpu_seconds_total, instance)二、聚合运算
# 5. 求和(所有实例的总请求数) sum(http_requests_total) # 6. 按维度聚合 sum by(service) (http_requests_total) # 7. 排除某个维度聚合 sum without(instance, pod) (http_requests_total) # 8. 取最大值 max(node_memory_MemTotal_bytes) # 9. 计数(有多少个实例) count(up{job="node"} == 1) # 10. 平均值 avg(node_load1) by (instance)三、速率计算
# 11. 每秒请求速率(常用于QPS) rate(http_requests_total[5m]) # 12. 增量(区间内总增加量) increase(http_requests_total[1h]) # 13. 瞬时速率(比rate更灵敏,适合短时间窗口) irate(http_requests_total[5m]) # 14. 每分钟请求数 rate(http_requests_total[5m]) * 60四、系统资源指标
# 15. CPU使用率 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) # 16. 内存使用率 (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 # 17. 磁盘使用率 (1 - node_filesystem_free_bytes{fstype!="tmpfs"} / node_filesystem_size_bytes) * 100 # 18. 系统负载与CPU核数比值(>1说明过载) node_load1 / count(node_cpu_seconds_total{mode="idle"}) by (instance) # 19. 磁盘I/O利用率 rate(node_disk_io_time_seconds_total[5m]) * 100 # 20. 网络错误率 rate(node_network_receive_errs_total[5m])五、应用指标
# 21. 错误率(5xx比例) sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) * 100 # 22. P99延迟 histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) # 23. P50 / P95 对比 histogram_quantile(0.50, ...) histogram_quantile(0.95, ...) # 24. 活跃连接数变化趋势 delta(nginx_connections_active[1h]) # 25. JVM堆内存使用率 jvm_memory_used_bytes{area="heap"} / jvm_memory_max_bytes{area="heap"} * 100六、告警规则常用
# 26. 实例是否存活(1=存活,0=挂了) up{job="node"} == 0 # 27. 预测磁盘多久打满(predict_linear) predict_linear(node_filesystem_free_bytes[1h], 4*3600) < 0 # 以过去1h速率推算,4小时后磁盘会打满 # 28. 内存急剧下降(可能是内存泄漏反向:OOM后突降) delta(node_memory_MemAvailable_bytes[5m]) < -500*1024*1024 # 29. 进程重启检测(restart_time增大意味着进程重启) changes(process_start_time_seconds[1h]) > 0 # 30. 集群中挂掉的Pod数 kube_pod_status_phase{phase="Failed"} > 0持续更新…如果你有常用的 PromQL 表达式,欢迎评论区分享!
