categraf 主配置文件解析

逐项解析 Categraf 主配置文件 config.toml,说明 global、log、writer、http、ibex、heartbeat、prometheus 等关键配置的作用、默认部署含义和排查重点。

作者 笨鸟先飞@夜莺社区

内容来自社区热心网友@笨鸟先飞的整理,是一份面向本地化部署场景的 Categraf 主配置说明。

核心要点摘要

  • Categraf 主配置文件决定 Agent 的全局标签、采集频率、日志、数据上报、心跳、HTTP 服务、ibex 和 Prometheus Agent 能力。
  • 这份示例配置使用 providers = ["local"],表示从本地配置目录读取采集插件配置。
  • 采集数据通过 Prometheus Remote Write 协议写入 http://127.0.0.1:17000/prometheus/v1/write
  • heartbeat.enable = true 后,Agent 会向夜莺上报心跳,因此可以在夜莺机器列表中被看到和管理。
  • 示例中 ibex、Prometheus 拉取模式、HTTP 服务和自身 metrics 暴露均未启用,更接近纯 PUSH 模式采集器。

这份配置适合什么场景

这份配置文件描述了一个典型的本地化部署的 Categraf Agent:

  • 配置来源: 从本地文件系统加载采集规则 (providers = ["local"])。
  • 数据去向: 将所有采集到的数据通过 Prometheus Remote Write 协议发送到本地的 17000 端口(夜莺服务端)。
  • 核心功能: 心跳功能已启用 (heartbeat.enable = true),因此这个 Agent 可以在夜莺的 Web 界面上被看到和管理。
  • 禁用功能: 远程执行 (ibex)、作为 Prometheus 拉取数据 (prometheus)、暴露自身 metrics 等高级功能均未启用,使其保持为一个纯粹的 PUSH 模式的采集器。
  • 日志方式: Agent 自身的日志直接输出到指定文件中。

简单来说,这是一个功能纯粹、配置清晰的采集代理,专注于根据本地配置采集数据,并将其推送到夜莺服务端。

主配置模块总览

配置块 作用 这份示例中的状态
[global] 控制主机名、时间戳精度、采集频率、配置来源和并发 本地配置、15 秒采集、hostname 使用 $ip
[log] 控制 Categraf Agent 自身日志输出和轮转 写入 categraf.log
[writer_opt] / [[writers]] 控制数据缓冲、批量发送和 remote write 目标 写入夜莺 17000 端口
[http] 控制 Categraf HTTP 服务,用于接收推送数据等 未启用
[ibex] 控制告警自愈/任务下发能力 未启用
[heartbeat] 向夜莺上报 Agent 心跳和主机元数据 已启用
[prometheus] 让 Categraf 以 Prometheus Agent 方式拉取 exporter 指标 未启用

配置说明:config.toml 示例

[global]
# 启动的时候是否在stdout中打印配置内容
print_configs = false

# 机器名,作为本机的唯一标识,会为时序数据自动附加一个 agent_hostname=$hostname 的标签
# hostname 配置如果为空,自动取本机的机器名;如果不为空,就使用用户配置的内容作为hostname
# 用户配置的 hostname 字符串中,可以包含变量,目前支持两个变量,
# $hostname 和 $ip,如果字符串中出现这两个变量,就会自动替换
# $hostname 自动替换为本机机器名,$ip 自动替换为本机IP
# 建议使用 --test 做一下测试,看看输出的内容是否符合预期
hostname = "$ip"

# 是否忽略主机名的标签,如果设置为true,时序数据中就不会自动附加 agent_hostname=$hostname 的标签
omit_hostname = false

# 时序数据的时间戳使用ms还是s,默认是ms,是因为remote write协议使用ms作为时间戳的单位
precision = "ms"

# 全局采集频率,15秒采集一次
interval = 15

# 全局附加标签,一行一个,这些写的标签会自动附到时序数据上
# [global.labels]
# region = "shanghai"
# env = "localhost"

# 从哪里加载它的采集插件配置: local / http
# local 表示 Categraf 会从本地的配置文件目录(通常是 conf 目录)中读取所有的采集规则
# http 表示 Categraf 会从指定的 HTTP 端点获取采集规则,与夜莺商业版配合使用
providers = ["local"]

# 并发设置。它控制了每个输入插件(input)可以同时运行多少个采集任务(goroutine)。
# 默认值是CPU核心数 * 10
# -1: 通常意味着使用默认值。
# 这个参数在需要同时探测大量目标时非常有用,比如 ping 或 http_response 插件,可以同时检查上百个 IP 或 URL。
concurrency = -1


# 这部分配置的是 Categraf Agent 自身运行日志的输出方式,而不是它采集的业务日志。
# categraf 自身的日志默认输出到 stdout(标准输出),这在容器化环境中是最佳实践。
[log]

# 不输出到 stdout 或 stderr,而是输出到指定的文件。
# 下面的日志轮转(rotation)参数 max_size, max_age, max_backups, compress 等,只有在日志写入到具体文件时才起作用
file_name = "categraf.log"

# 日志轮转大小,默认是 100MB。
max_size = 100

# max_age是根据文件名中编码的时间戳保留旧日志文件的最大天数。
max_age = 5

# max_backups是要保留的旧日志文件的最大数量。
max_backups = 5

# local_time确定用于格式化备份文件中的时间戳的时间是否是计算机的本地时间
local_time = true

# Compress确定是否应使用gzip压缩轮转的日志文件。
compress = false

# [writer_opt]和[[writers]]这部分定义了采集到的监控数据如何以发送及发送到哪里。
# 数据发送的优化选项
# 发给后端的时序数据,会先被扔到 categraf 内存队列里,每个采集插件一个队列
[writer_opt]
# 将采集到的数据点凑够 1000 个再打包一次性发送,以提高网络效率。
batch = 1000
# 内部数据通道(channel)的容量。这是一个内存缓冲区,如果后端接收服务(夜莺服务端)暂时不可用或处理缓慢,数据会先缓存在内存中,防止丢失
chan_size = 1000000

# 定义后端的接收地址。[[...]] toml语法表示这是一个数组,你可以配置多个 writer,将同一份数据发送到多个后端。
# 每个writer可以有不同的url,不同的basic auth信息
[[writers]]
# 这是数据上报的核心地址。这个地址通常是夜莺服务端的地址。
# 路径 /prometheus/v1/write 表明它使用的是 Prometheus Remote Write 协议,这是夜莺接收 remote write 数据的 urlpath。
url = "http://127.0.0.1:17000/prometheus/v1/write"

# TLS 认证相关配置项
# tls_min_version = "1.2"
# tls_ca = "/etc/categraf/ca.pem"
# tls_cert = "/etc/categraf/cert.pem"
# tls_key = "/etc/categraf/key.pem"
## Use TLS but skip chain & host verification
# insecure_skip_verify = true

# Basic auth username,如果时序库开启了 Basic Auth 认证,这里需要填写用户名。
basic_auth_user = ""

# Basic auth password,如果时序库开启了 Basic Auth 认证,这里需要填写密码。
basic_auth_pass = ""

## 调用时序库时的 HTTP 请求头部信息。格式是 Key1, Value1, Key2, Value2
# headers = ["X-From", "categraf", "X-Xyz", "abc"]

# 发送数据的 HTTP 请求超时时间为 5000 毫秒(5秒)。
timeout = 5000
dial_timeout = 2500
max_idle_conns_per_host = 100

# 这部分配置是让 Categraf 监听一个端口,通常用于接收其他系统(如自定义的 cron 脚本)推送的数据。
# 支持多种数据接收协议,具体参考:https://github.com/flashcatcloud/categraf/blob/main/api/server.go#L73
# 注意,categraf 的 HTTP 服务不会暴露 /metrics 接口,如果你想采集 categraf 自身的指标数据,需要使用 input.self_metrics 插件
# input.self_metrics 插件会自动采集 Categraf 自身的指标数据,并将其发送到夜莺服务端。
[http]
# 如果启用 (enable = true),Categraf 会在 9100 端口上启动一个 HTTP 服务
enable = false
address = ":9100"
print_access = false
run_mode = "release"
ignore_hostname = false
agent_host_tag = ""
ignore_global_labels = false

# 任务下发模块,即夜莺中的告警自愈功能
# 夜莺老版本的告警自愈功能是依赖 ibex 模块来实现的。新版本已经把 ibex 功能直接集成到夜莺 n9e 的二进制中了,所以不需要单独部署 ibex 了
[ibex]
# 如果启用,Categraf 将使用 RPC 方式连接到 ibex 服务端(即夜莺服务端),从而可以接收并执行从夜莺 Web 界面下发的脚本任务。
enable = false
## 维持默认不用改
interval = "1000ms"
## 这里的地址要改成夜莺的服务端地址,默认情况下,夜莺服务端监听的 RPC 端口是 20090。
servers = ["127.0.0.1:20090"]
## 维持默认不用改
meta_dir = "./meta"

# 心跳模块
# 这是 Agent 向服务端 "报活" 的关键功能。
# 心跳内容: 心跳包会携带一些主机的元数据,如操作系统版本、CPU、内存等信息。这些信息会展示在夜莺的机器列表中,用于资产管理和概览。
[heartbeat]
# 这是 Agent 能在夜莺“机器列表”中出现的保证。
enable = true

# 心跳上报的地址,同样指向了夜莺的 17000 端口,/v1/n9e/heartbeat 是夜莺服务端处理心跳的接口。
url = "http://127.0.0.1:17000/v1/n9e/heartbeat"

# 每 10 秒发送一次心跳。
interval = 10

# 夜莺配置文件中 ForAgent 部分如果开启了认证,basic_auth_user 和 basic_auth_pass 需要填写相应的用户名和密码。
basic_auth_user = ""
basic_auth_pass = ""

## Optional headers
# headers = ["X-From", "categraf", "X-Xyz", "abc"]

# timeout settings, unit: ms
timeout = 5000
dial_timeout = 2500
max_idle_conns_per_host = 100

# 这部分配置 Categraf 作为 Prometheus Agent 的能力。
[prometheus]
# 如果启用,Categraf 将具备类似 Prometheus 的 "pull"(拉取)模式的能力。
# 它可以读取一个 Prometheus 格式的配置文件(其中配置了 Scrape 的目标地址),然后主动去各个 Exporter(如 node-exporter)拉取指标
enable = false
scrape_config_file = "/path/to/in_cluster_scrape.yaml"
## 日志级别, debug warn info error
log_level = "info"
## 文件存储路径,默认值 ./data-agent
# wal_storage_path = "/path/to/storage"
## wal保留时间,默认值为2小时
# wal_min_duration = 2

关键配置怎么理解

global:决定采集身份和默认行为

hostname 会影响写入时序数据的 agent_hostname 标签。示例中使用 hostname = "$ip",适合希望用主机 IP 作为 Agent 标识的环境。如果你的机器 IP 会变化,或者同一机器存在多网卡,需要先用 --test 检查替换结果是否符合预期。

providers = ["local"] 表示 Categraf 从本地目录读取采集插件配置。这个模式简单、可控,适合文件方式部署和批量下发配置的环境。

interval = 15 是全局采集频率。单个插件如果另行配置采集频率,以插件配置为准;没有配置时使用全局值。

writer:决定监控数据写到哪里

[[writers]] 是 Categraf 写入时序数据的核心配置。示例中的 URL:

http://127.0.0.1:17000/prometheus/v1/write

表示把采集结果通过 Prometheus Remote Write 协议推送到夜莺服务端。如果后端地址、Basic Auth、TLS 或请求头配置不正确,最常见的现象是插件采集正常,但夜莺或时序库里查不到数据。

heartbeat:决定夜莺是否能看到 Agent

heartbeat.enable = true 后,Categraf 会周期性向夜莺心跳接口上报主机元数据。夜莺机器列表能否看到 Agent,通常先检查这几项:

  1. heartbeat.url 是否指向正确的夜莺服务端地址。
  2. 夜莺 ForAgent 部分是否开启认证,如果开启,basic_auth_userbasic_auth_pass 是否匹配。
  3. Categraf 所在机器能否访问夜莺 17000 端口。
  4. Categraf 日志中是否有心跳请求失败、超时或认证错误。

http、ibex、prometheus:按需启用

[http][ibex][prometheus] 都不是最小 PUSH 模式的必需项。

  • 需要让 Categraf 接收其他系统推送数据时,再考虑启用 [http]
  • 需要通过夜莺下发脚本任务时,再考虑启用 [ibex]
  • 需要让 Categraf 按 Prometheus scrape 配置主动拉取 exporter 指标时,再考虑启用 [prometheus]

常见问题

Q1:为什么 Categraf 启动了,但夜莺里没有机器?

A:优先检查 [heartbeat]。机器列表依赖心跳上报,确认 heartbeat.enable = trueheartbeat.url 地址正确、认证信息正确,并查看 Categraf 日志中的心跳报错。

Q2:为什么机器能看到,但指标查不到?

A:机器可见通常说明心跳通了;指标查不到要重点检查 [[writers]] 的 remote write 地址、认证、TLS、网络连通性,以及后端接收服务是否正常。

Q3:hostname = "$ip" 一定适合生产环境吗?

A:不一定。它适合希望用 IP 识别 Agent 的场景。如果 IP 会变化、存在多网卡或 NAT,建议改成更稳定的主机标识,并用 --test 验证标签效果。

Q4:这份配置是否会暴露 /metrics

A:不会。文中示例 [http] 未启用,而且 Categraf 的 HTTP 服务不会暴露 /metrics 接口。需要采集 Categraf 自身指标时,应使用 input.self_metrics 插件。

小结

Categraf 主配置的核心不是参数越多越好,而是先把 Agent 身份、采集来源、数据去向和心跳链路配置清楚。对本地化夜莺部署来说,最小可用路径是:providers = ["local"] 读取本地采集配置,[[writers]] 通过 remote write 上报指标,[heartbeat] 让 Agent 出现在夜莺机器列表中。其他能力按场景启用即可。

联系我们交流

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云