news 2026/5/30 6:55:29

从PromQL到Categraf指标:搞定Prometheus+Categraf后的数据查询实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从PromQL到Categraf指标:搞定Prometheus+Categraf后的数据查询实战指南

从PromQL到Categraf指标:搞定Prometheus+Categraf后的数据查询实战指南

当你终于完成了Prometheus和Categraf的部署对接,看着两个服务都正常运行,内心或许会涌起一丝成就感。但很快,一个新的挑战摆在面前:在Prometheus的Web UI上,面对那个空白的查询框,你突然意识到——"我该查什么?怎么查?"这就像拿到了一把万能钥匙,却不知道哪扇门值得打开。本文将带你跨越从"部署成功"到"查询自如"的最后一公里。

1. 理解Categraf与Prometheus的数据流

在开始查询之前,我们需要先理清数据是如何从Categraf流向Prometheus的。Categraf作为采集器,会定期从系统中收集各类指标(如CPU、内存、磁盘等),然后通过Remote Write协议将这些指标推送到Prometheus的/api/v1/write接口。

与传统的Prometheus拉取模式不同,这种推送方式带来一个关键变化:指标名称保留了Categraf的原始格式,而不是标准的Prometheus指标命名。例如:

  • 传统Prometheus指标:node_memory_MemFree_bytes
  • Categraf推送的指标:mem_free

这种差异意味着你不能直接照搬PromQL的常见查询语句,而需要先了解Categraf暴露的具体指标名称。

2. 探查Categraf的指标库

2.1 使用--test参数发现可用指标

Categraf提供了一个极其实用的功能:--test模式。通过在启动命令中添加这个参数,你可以查看任意插件采集的具体指标。基本语法如下:

./categraf --test --inputs <插件名>

例如,要查看内存相关的指标:

./categraf --test --inputs mem

输出示例:

12:01:43 mem_used agent_hostname=node1 667467776 12:01:43 mem_commit_limit agent_hostname=node1 3063525376 12:01:43 mem_high_free agent_hostname=node1 0 12:01:43 mem_vmalloc_chunk agent_hostname=node1 0 12:01:43 mem_total agent_hostname=node1 1832091648

每行输出包含三个关键部分:

  1. 指标名称(如mem_used
  2. 标签(如agent_hostname=node1
  3. 指标值(如667467776

2.2 常用插件及其指标

Categraf内置了数十个采集插件,以下是一些最常用的插件及其典型指标:

插件名称关键指标示例用途说明
cpucpu_usage,cpu_userCPU使用率统计
memmem_used,mem_free内存使用情况
diskdisk_used,disk_free磁盘空间监控
diskiodiskio_read_bytes,diskio_write_bytes磁盘I/O统计
netnet_in_bytes,net_out_bytes网络流量监控

提示:可以通过ls conf/input.*命令查看已启用的所有插件配置。

3. 在Prometheus中查询Categraf指标

3.1 基础查询语法

掌握了指标名称后,在Prometheus的Web UI中查询就变得简单了。基本模式是直接输入指标名:

mem_used

如果想按主机过滤,可以添加标签条件:

mem_used{agent_hostname="node1"}

3.2 实用查询示例

以下是一些你可能立即用到的查询示例:

CPU使用率

100 - (avg by(agent_hostname)(irate(cpu_usage_idle[1m])) * 100)

内存使用百分比

(mem_used / mem_total) * 100

磁盘空间使用率

(disk_used / disk_total) * 100

网络流入速率(bytes/s)

irate(net_in_bytes[1m])

3.3 查询技巧与排错

当查询没有返回预期结果时,可以尝试以下排查步骤:

  1. 检查指标是否存在:在Prometheus的Graph页面,输入{__name__=~".*mem.*"}这样的正则表达式,列出所有包含"mem"的指标
  2. 验证数据新鲜度:在Graph页面查看scrape_samples_scraped指标,确认数据是否持续更新
  3. 检查Categraf日志:查看logs/categraf.log文件,确认是否有采集错误

4. 从Prometheus到Grafana的可视化

4.1 创建基础仪表板

在Grafana中创建基于Categraf指标的仪表板时,关键是要正确设置Prometheus数据源。查询语句与在Prometheus UI中使用的完全相同,例如:

CPU面板查询

100 - (avg by(agent_hostname)(irate(cpu_usage_idle[1m])) * 100)

内存面板查询

mem_used{agent_hostname=~"$host"} mem_total{agent_hostname=~"$host"}

4.2 告警规则配置

Grafana的告警也可以直接基于Categraf指标。例如,设置内存不足告警:

alert: HighMemoryUsage expr: (mem_used / mem_total) * 100 > 90 for: 5m labels: severity: warning annotations: summary: "High memory usage on {{ $labels.agent_hostname }}" description: "Memory usage is at {{ $value }}%"

4.3 仪表板变量优化

为了使仪表板更灵活,可以添加以下变量:

  1. 主机选择变量
    label_values(agent_hostname)
  2. 设备选择变量(用于磁盘监控):
    label_values(disk_used, device)

5. 高级技巧与最佳实践

5.1 指标重命名与标准化

如果你希望Categraf的指标更符合Prometheus的命名规范,可以在config.toml中添加重写规则:

[[processors.rename]] metric = "mem_used" new_name = "node_memory_used_bytes"

5.2 长期存储与降采样

对于长期存储需求,考虑将Prometheus数据远程写入到VictoriaMetrics或Thanos等解决方案。在config.toml中添加额外的writer:

[[writers]] url = "http://victoriametrics:8428/api/v1/write"

5.3 性能优化建议

  • 调整采集频率:在config.toml中设置interval = 60(秒)
  • 选择性启用插件:只启用需要的插件,减少资源消耗
  • 使用标签过滤:在查询时合理使用标签,减少处理的数据量

6. 实战案例:构建完整的监控视图

让我们以一个实际的服务器监控为例,展示如何将各个指标组合起来:

CPU监控面板

  • 总使用率:100 - (avg by(agent_hostname)(irate(cpu_usage_idle[1m])) * 100)
  • 各核心使用率:100 - (irate(cpu_usage_idle{cpu="0"}[1m]) * 100)

内存监控面板

  • 使用量趋势:mem_used
  • 使用百分比:(mem_used / mem_total) * 100
  • 缓存与缓冲:mem_cached,mem_buffered

磁盘监控面板

  • 空间使用率:(disk_used / disk_total) * 100
  • IOPS:rate(diskio_reads[1m]),rate(diskio_writes[1m])
  • 吞吐量:rate(diskio_read_bytes[1m]),rate(diskio_write_bytes[1m])

网络监控面板

  • 流量:rate(net_in_bytes[1m]) * 8,rate(net_out_bytes[1m]) * 8(转换为bit)
  • 错误包:rate(net_in_errs[1m]),rate(net_out_errs[1m])

在实际项目中,我发现最常遇到的问题不是查询语法错误,而是对指标含义理解不准确。例如,cpu_usagecpu_usage_idle的关系,或者mem_used是否包含缓存。这时候,回到--test输出的原始指标值,往往能帮助澄清疑惑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 6:55:29

人机交互伦理:为何我们对AI助手粗鲁,以及如何设计更善意的体验

1. 项目概述&#xff1a;一次关于人机交互伦理的深度自省“你对你的虚拟助手粗鲁吗&#xff1f;”——这个看似简单的问题&#xff0c;像一面镜子&#xff0c;突然照见了我们与数字世界互动时&#xff0c;那些被忽略的日常习惯。我们可能从未深思&#xff0c;对着手机喊“嘿Sir…

作者头像 李华
网站建设 2026/5/30 6:55:22

微信小程序数据可视化终极指南:3步完成专业图表开发

微信小程序数据可视化终极指南&#xff1a;3步完成专业图表开发 【免费下载链接】echarts-for-weixin 基于 Apache ECharts 的微信小程序图表库 项目地址: https://gitcode.com/gh_mirrors/ec/echarts-for-weixin Apache ECharts微信小程序版为你提供了一套完整的数据可…

作者头像 李华
网站建设 2026/5/30 6:50:17

STM32F10x+W5500网页远程配置固件:开箱即用的WebSocket参数设置方案

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;这个固件包专为STM32F10x系列MCU搭配W5500以太网芯片设计&#xff0c;烧录后即可通过普通浏览器访问设备IP&#xff0c;实时修改运行参数&#xff0c;无需额外服务器或APP。内置完整WebSocket通信栈&#xff0c…

作者头像 李华
网站建设 2026/5/30 6:50:13

用Python复现Dagum基尼系数分解:一份给数据分析师的避坑指南与完整代码

用Python复现Dagum基尼系数分解&#xff1a;一份给数据分析师的避坑指南与完整代码基尼系数作为衡量收入差距的经典指标&#xff0c;在经济学和社会学研究中广泛应用。但当我们需要分析不同区域或群体间的差异时&#xff0c;传统的基尼系数就显得力不从心。Dagum基尼系数分解方…

作者头像 李华
网站建设 2026/5/30 6:43:02

普及AHA标准化急救,让普通人也拥有救人能力

目前国内急救培训渠道完善&#xff0c;美国心脏协会AHA认证培训、各地红十字会、120急救中心培训部、三甲医院急救培训中心&#xff0c;可全面满足大众、企业及校园的急救学习需求。但国内急救普及现状严峻&#xff0c;全民急救技能普及率仅约1%&#xff0c;多数人缺乏规范施救…

作者头像 李华