Prometheus_PromQL案例实践(docker、jenkins、集群联邦)
本文摘要介绍了Docker容器监控、Jenkins监控和Prometheus集群联邦模式的关键技术方案。主要内容包括1使用cAdvisor监控Docker容器资源CPU、内存、磁盘、网络详细说明各项指标采集方法和PromQL查询2Jenkins监控方案推荐使用Prometheusmetrics插件3Prometheus联邦模式的工作原理和关键配置包括/federate接口使用和标签处理。文章提供了完整的监控指标说明、Grafana模板ID和告警规则参考是构建容器化监控系统的实用指南。一、Docker 容器监控5.9 节1.1 cAdvisor 介绍cAdvisorContainer AdvisorGoogle 开源的容器监控工具专门用于分析容器的资源使用情况支持导出 Prometheus 兼容的监控指标。特性说明功能监控容器 CPU、内存、磁盘 I/O、网络 I/O部署方式以特权容器方式运行挂载宿主机关键目录Metrics 地址http://宿主机IP:8082/metricsWeb UIhttp://宿主机IP:8082Prometheus 抓取配置job_name: dockertargets: [prom-node03:8082]Grafana 模板 ID11600启动 cAdvisor 容器docker run -dit --namecadvisor \ -p 8082:8080 \ -v /:/rootfs:ro \ -v /var/run:/var/run:ro \ -v /sys:/sys:ro \ -v /dev/disk/:/dev/disk:ro \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v /var/lib/docker/:/var/lib/docker:ro \ --privileged \ cadvisor:latest提示cAdvisor 需要以--privileged特权模式运行并挂载宿主机根目录和 cgroup 目录才能访问所有容器的资源信息。1.2 Docker CPU 指标指标名称类型含义container_cpu_usage_seconds_totalCounter所有 CPU 核心上的累计使用时间秒container_cpu_user_seconds_totalCounteruser 模式下的 CPU 累计使用时间container_cpu_system_seconds_totalCountersystem 模式下的 CPU 累计使用时间计算容器 CPU 使用率3 步推导步骤PromQL说明1. 过滤有名字的容器container_cpu_usage_seconds_total{name!}排除非容器的系统 cgroup2. 转为速率rate(container_cpu_usage_seconds_total{name!}[1m])1 分钟平均 CPU 使用率核3. 聚合并转百分比sum(rate(container_cpu_usage_seconds_total{name!}[1m])) by (instance,name) * 100按实例和容器名分组转为百分比1.3 Docker 内存指标指标名称类型含义container_memory_usage_bytesGauge容器使用内存总量含缓存/swapcontainer_memory_working_set_bytesGauge容器实际使用内存不含缓存更准确container_spec_memory_limit_bytesGauge容器内存限制上限--memory参数machine_memory_bytesGauge宿主机总内存量# 容器实际内存使用量MB sum(container_memory_working_set_bytes{name!}) by (instance, name) / 1024 / 1024 # 容器内存使用率占配置上限的百分比 container_memory_working_set_bytes{name!} / (container_spec_memory_limit_bytes{name!} 0) * 100 # 所有容器内存总和占物理内存比率 sum(container_memory_working_set_bytes{name!}) / sum(machine_memory_bytes) * 100注意container_spec_memory_limit_bytes 0用于过滤掉未设置内存限制值为 0 或宿主机内存的容器避免除以 0。1.4 Docker 磁盘指标指标名称类型含义container_fs_writes_bytes_totalCounter容器写入总字节数container_fs_reads_bytes_totalCounter容器读取总字节数container_fs_writes_totalCounter容器写操作次数IOPScontainer_fs_reads_totalCounter容器读操作次数IOPScontainer_fs_inodes_totalGauge容器 inode 总数container_fs_inodes_freeGauge容器空闲 inode 数量# 每秒磁盘写入吞吐量MB/s sum(rate(container_fs_writes_bytes_total{name!}[1m])) by (instance, name) / 1024 / 1024 # 每秒磁盘读取吞吐量MB/s sum(rate(container_fs_reads_bytes_total{name!}[1m])) by (instance, name) / 1024 / 1024 # inode 使用率 (container_fs_inodes_total{name!} - container_fs_inodes_free{name!}) / container_fs_inodes_total{name!} * 1001.5 Docker 网络指标指标名称类型含义container_network_transmit_bytes_totalCounter容器发送的总字节数container_network_receive_bytes_totalCounter容器接收的总字节数# 容器发送流量总量MB container_network_transmit_bytes_total{name!} / 1024 / 1024 # 容器接收流量总量MB container_network_receive_bytes_total{name!} / 1024 / 1024 # 每秒发送带宽Mbps 兆比特/秒需 * 8 rate(container_network_transmit_bytes_total{name!}[1m]) * 8 / 1024 / 1024 # 每秒接收带宽Mbps rate(container_network_receive_bytes_total{name!}[1m]) * 8 / 1024 / 10241.6 Docker 其他常用指标场景PromQL 表达式查询正在运行的容器数量count(container_tasks_state{name!, staterunning})容器运行时长小时sum(time() - container_start_time_seconds{name!}) by (instance, name) / 3600容器被停止/删除检测sum(time() - container_last_seen{name!}) by (instance, name) 601.7 Docker 告警规则汇总告警名称触发条件严重级别容器 CPU 利用率高容器 CPU 80%warning容器内存利用率高容器内存 / 上限 80%warning容器整体内存利用率过高所有容器内存 / 物理内存 80%warning容器网络发送速率过高发送 50 Mbpswarning容器网络接收速率过高接收 50 Mbpswarning容器停止时间长超过 60s 未被探测到critical二、Jenkins 监控5.10 节2.1 监控方式Jenkins 官方的jenkins_exporter版本老旧不再维护。推荐使用 Jenkins 插件Prometheus metrics方式暴露指标。步骤操作1. 安装插件Jenkins → 插件管理 → 搜索Prometheus metrics→ 安装2. 重启 Jenkins插件不支持动态加载必须重启Jenkins 后才能生效3. 验证 Metrics访问http://Jenkins地址:8080/prometheus/Prometheus 抓取路径metrics_path: /prometheusGrafana 模板 ID9964、9524、12646Prometheus 配置- job_name: jenkins_exporter metrics_path: /prometheus # 注意不是 /metrics是 /prometheus static_configs: - targets: [prom-node04:8080]三、Prometheus 集群联邦模式5.11 节3.1 联邦模式工作原理集群联邦Federation上级 Prometheus联邦汇总节点通过/federate接口从下级 Prometheus数据采集节点拉取指标数据实现分级监控和数据汇聚。典型应用场景数据中心 A、B、C 各有一个 Prometheus一个全局 Prometheus 汇总所有数据中心的指标大规模监控下级采集本地数据上级只汇总关键指标3.2 联邦模式关键配置参数- job_name: prometheus_slave metrics_path: /federate # 必须是 /federate不是 /metrics honor_labels: true # 必须启用抓取到的指标覆盖源指标的标签值防止标签被覆盖 params: match[]: # 指定要抓取哪些指标 - {jobprometheus} # 抓取 jobprometheus 的所有指标 - {__name__~node.*} # 抓取所有以 node 开头的指标 - {__name__!} # 抓取所有指标慎用数据量大 static_configs: - targets: [prom-node01:9090] # 被抓取的 Prometheus 地址三个关键参数说明参数必须说明metrics_path: /federate✅联邦接口不能用/metricshonor_labels: true✅保留源 Prometheus 的标签避免被上层 Prometheus 覆盖match[]✅指定要从下级 Prometheus 抓取哪些指标五、快速参考组件监控工具默认端口Metrics 路径Grafana 模板Docker 容器cAdvisor8082/metrics11600JenkinsPrometheus metrics 插件8080/prometheus9964 / 9524 / 12646Prometheus 联邦Prometheus 自身9090/federate-Docker 监控维度关键指标前缀CPUcontainer_cpu_*内存container_memory_*,container_spec_memory_*磁盘container_fs_*网络container_network_*容器状态container_tasks_state,container_last_seen,container_start_time_seconds