跳到主要内容

验证数据到达

导入的规则不响可能只是数据没到;用集成模板列出的指标名在即时查询里查一次,两分钟就能确认组件指标已经到达。

导进来的告警规则不响,有两种可能:真的没问题,或者数据压根没到。 这两件事看起来一模一样,所以在信任规则之前,先花两分钟确认指标真的进来了。

这页给你三个由近及远的确认点,以及每一步「应该看到什么」。

1. 该查哪个指标​

先知道要找什么。组件抽屉的 指标说明 页签列的就是这个组件会产出的指标: 集成中心 → 模板中心 → 点开组件 → 指标说明,表格里有指标名称、单位和 PromQL。

同一份数据在 数据查询 → 指标 → 指标视图 也能看,那里可以跨组件搜, 列是「组件类型 / 分类 / 指标名称 / 单位 / PromQL / 操作」。

86 个组件里只有 22 个带指标说明。没有的话,用插件名当前缀猜: Categraf 的插件产出的指标基本都以插件名开头——mysql 插件出 mysql_*, redis 插件出 redis_*,nginx 插件出 nginx_*。

2. 在机器上确认采集器在采​

最靠近源头的确认点,在装了 Categraf 的那台机器上:

cd /path/to/categraf
./categraf --configs /path/to/categraf/conf --test --inputs mysql

--test 把采到的指标打到标准输出,不往夜莺发。输出长这样:

1788432166 18:42:46 mysql_global_status_threads_connected agent_hostname=n9e-web-01 instance=n9e-10.2.3.4:3306 5

看到指标行就说明插件配对了。注意两点:这个进程不会自己退出,看到输出就 Ctrl-C; 另外 --test 不会关掉心跳,它照样会往夜莺发心跳,别在生产上随手跑。

一行都没有?看排障。

3. 在夜莺里确认指标到了​

数据查询 → 指标,数据源选存机器指标的那个(默认安装是 embedded-tsdb), 查一条上一步看到的指标名:

mysql_global_status_threads_connected

应该看到:一条或多条曲线,每条带着 agent_hostname 标签, 值就是刚才在机器上看到的那个数量级。

查不出来的话,先把范围放宽,确认是「这个指标没有」还是「这台机器没有」:

# 这个组件的指标一条都没有?
{__name__=~"mysql_.*"}

# 这台机器有没有在上报任何指标?
{agent_hostname="n9e-web-01"}

第二条也空,说明问题不在插件,在写入链路——回到 Categraf 排障。

4. 用采集向导的自动检测​

如果你是从 基础设施 → 设备列表 → 配置采集 走的向导,第四步「验证数据」会替你做上面这些。

它每 5 秒查一次哨兵指标,命令执行后通常 1 分钟内出现。两个可选项:

  • 数据源:默认取服务端按写入配置匹配出来的 Prometheus 数据源。这里查不到的话, 手动切到实际存机器指标的那个;
  • 目标机器(可选):选上你刚执行过命令的机器,可以逐台确认; 不选就监听所有机器的新增上报。

几种结果的含义:

提示含义
正在等待 xxx 指标上报,每 5 秒自动检测一次还在等,正常
已检测到 N 台新机器上报 xxx 指标成了
当前已有 N 台机器在上报该组件指标这些机器在你开始检测前就在上报了
已改按 xxx 前缀匹配确认精确指标一直查不到,退化成前缀匹配,这时区分不出存量机器
该组件的指标名不固定,无法自动验证比如 exec、mtail 这类,指标名由你的脚本决定,只能自己去查
等待超时见下一节

如果你只是修改既有机器的配置,这里不会出现「新增」——指标持续上报就说明生效了。

5. 还是没有​

超时提示里给的三条排查线索,按顺序走:

  1. 命令是不是执行成功了。 向导那条命令会先用 categraf --test 试采, 试采不过就不会生效;
  2. 目标机器上 categraf 还活着吗:
    journalctl -u categraf -n 50
  3. 换个查法:在即时查询里按前缀搜 mysql_, 看是不是指标名和你以为的不一样。

再往上,确认这台机器有心跳:基础设施 → 设备列表,左边概览里有「有心跳 / 无心跳」, 表格里「更新时间」一列是最近一次心跳。心跳都没有,说明 Categraf 还没跑起来或者连不上夜莺。

还有一种情况值得单独说:数据源选错了。指标写进了 A,你在 B 里查。 机器指标默认落在内置时序库(embedded-tsdb),如果你配了 Pushgw.Writers 转发到外部时序库,那就要去对应的那个数据源里查。

下一步​