PromQL 常用查询语句示例
· 阅读需 9 分钟
本文收集整理了在 Prometheus 监控中最常用的 PromQL 查询语句,方便日常查询和告警规则编写时参考。
系统监控
CPU 相关查询
# CPU 使用率
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# CPU 各个状态占比
rate(node_cpu_seconds_total[5m]) * 100
# 按核心统计 CPU 使用率
avg by (cpu) (rate(node_cpu_seconds_total{mode!="idle"}[5m]) * 100)
# CPU 负载
node_load1 # 1分钟负载
node_load5 # 5分钟负载
node_load15 # 15分钟负载
内存相关查询
# 内存使用率
(1 - node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes) * 100
# 可用内存
node_memory_MemAvailable_bytes / 1024 / 1024 / 1024
# 内存使用量前五的进程
topk(5, sum by (name) (container_memory_usage_bytes{container!=""}))
# Swap 使用率
(1 - node_memory_SwapFree_bytes/node_memory_SwapTotal_bytes) * 100
磁盘相关查询
# 磁盘使用率
100 - ((node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes)
# 磁盘读写速率
rate(node_disk_read_bytes_total[5m])
rate(node_disk_written_bytes_total[5m])
# 磁盘 IO 使用率
rate(node_disk_io_time_seconds_total[5m]) * 100
# 预测磁盘满的时间(小时)
predict_linear(node_filesystem_free_bytes[1h], 4 * 3600) < 0
网络相关查询
# 网络接口流量
rate(node_network_receive_bytes_total[5m])
rate(node_network_transmit_bytes_total[5m])
# 网络接口错误率
rate(node_network_receive_errs_total[5m])
rate(node_network_transmit_errs_total[5m])
# TCP 连接状态
node_netstat_Tcp_CurrEstab
容器监控
容器资源使用
# 容器 CPU 使用率
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (container) * 100
# 容器内存使用量(GB)
sum(container_memory_usage_bytes{container!=""}) by (container) / 1024^3
# 容器网络 IO
sum(rate(container_network_receive_bytes_total[5m])) by (container)
sum(rate(container_network_transmit_bytes_total[5m])) by (container)
应用监控
HTTP 服务监控
# 请求速率(QPS)
sum(rate(http_requests_total[5m])) by (handler)
# 错误率
sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m])) * 100
# 平均响应时间
rate(http_request_duration_seconds_sum[5m])
/
rate(http_request_duration_seconds_count[5m])
# P90/P95/P99 延迟
histogram_quantile(0.90, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
JVM 监控
# 堆内存使用率
jvm_memory_bytes_used{area="heap"}
/
jvm_memory_bytes_max{area="heap"} * 100
# GC 次数
rate(jvm_gc_collection_seconds_count[5m])
# GC 耗时
rate(jvm_gc_collection_seconds_sum[5m])
# 线程数
jvm_threads_current
告警规则示例
系统告警
# CPU 使用率过高
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
# 内存使用率过高
(1 - node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes) * 100 > 90
# 磁盘使用率过高
100 - ((node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes) > 85
# 磁盘将在 4 小时内满
predict_linear(node_filesystem_free_bytes[1h], 4 * 3600) < 0
应用告警
# 服务实例不可用
up{job="my-service"} == 0
# 错误率过高
sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m])) * 100 > 5
# 响应延迟过高
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) > 1
性能优化查询
# 查找高基数的指标
topk(10, count by (__name__) ({__name__=~".+"}))
# 查找最活跃的 targets
topk(10, count by (job) (up))
# 查找采集速率最高的指标
topk(10, rate(prometheus_tsdb_head_samples_appended_total[5m]))
高级监控场景
Kubernetes 集群监控
# 节点 Ready 状态
kube_node_status_condition{condition="Ready",status="true"}
# Pod 运行状态统计
sum by (namespace) (kube_pod_status_phase{phase="Running"})
# 容器重启次数
sum by (namespace, pod) (kube_pod_container_status_restarts_total)
# 节点资源压力
sum by (node) (
kube_pod_container_resource_requests{resource="cpu"}
) / sum by (node) (
kube_node_status_allocatable{resource="cpu"}
) * 100
# 命名空间资源配额使用率
sum by (namespace) (
kube_resourcequota{type="used"}
) / sum by (namespace) (
kube_resourcequota{type="hard"}
) * 100
数据库监控
MySQL 监控
# 连接数使用率
mysql_global_status_threads_connected
/
mysql_global_variables_max_connections * 100
# 慢查询统计
rate(mysql_global_status_slow_queries[5m])
# InnoDB 缓冲池使用率
mysql_global_status_innodb_buffer_pool_pages_total
-
mysql_global_status_innodb_buffer_pool_pages_free
# 事务统计
rate(mysql_global_status_commands_total{command="commit"}[5m])
Redis 监控
# 内存使用率
redis_memory_used_bytes / redis_memory_max_bytes * 100
# 命令执行率
rate(redis_commands_total[5m])
# 键过期率
rate(redis_expired_keys_total[5m])
# 连接数
redis_connected_clients
消息队列监控
RabbitMQ 监控
# 队列消息堆积
rabbitmq_queue_messages_ready
# 消费者数量
rabbitmq_queue_consumers
# 消息处理率
rate(rabbitmq_queue_messages_delivered_total[5m])
# 未确认消息数
rabbitmq_queue_messages_unacknowledged
Kafka 监控
# 主题消息率
rate(kafka_topic_partition_current_offset[5m])
# 消费组延迟
sum by (topic) (
kafka_consumergroup_lag
)
# Broker 活跃连接数
kafka_server_socket_server_metrics_connection_count
# 副本同步延迟
kafka_replica_lag