
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]
📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,以及文中广告,收藏学习不迷路 😋 。
0x00 前言简述
描述:老粉看过我前面的文章应该都知道,在云原生时代,监控系统是必不可少的。而在开源领域,Prometheus 无疑是最受欢迎的监控解决方案之一,其拥有众多的 exporters 来支持各种场景的监控需求,例如 、
node_exporter、
blackbox_exporter 等。然而如果需要对网站、服务器、数据库等场景下进行监控,需要分别部署多个 exporter 来满足需求,这不仅增加了部署、配置拉取的复杂性,还可能导致资源占用过多。为了解决这个问题,快猫星云(
mysql_exporter)技术团队推出了一个名为 Categraf 的轻量级(ALL-IN-ONE)工具,旨在简化监控系统指标暴露&采集器服务的部署过程。
flashcat
温馨提示:若文章代码块中存在乱码或不能复制,请联系作者,也可通过文末的阅读原文链接,加入知识星球中阅读,原文链接:https://articles.zsxq.com/id_3mq4pasw7x5w.html
此外,快猫星云技术团队同时也是 Open-Falcon 和 Nightingale 创始研发团队,在前面的文章中作者也介绍了 Nightingale 工具的部署安装与使用,大家可简单参考一下。
国产化监控新选择!夜莺Nightingale在OpenEuler上的极简部署指南
云原生监控告警新选择:夜莺(Nightingale)在K8S集群部署与私有镜像构建指南
OK,回到主题,接下来我们一起看看 Categraf 是什么?为什么选择它?以及如何安装部署、配置使用等。
Categraf 是什么?
Categraf 是一款 All-in-One 的数据采集器,支持指标、日志采集;支持物理机、虚拟机、交换机、容器、K8s、多种中间件/数据库的数据采集,支持混合云架构、云原生架构、多云架构。同时,Categraf 期望不止提供采集能力,还附带提供仪表盘和告警规则,力求开箱即用。
项目主页:https://github.com/flashcatcloud/categraf
参考文档:https://flashcat.cloud/docs/content/flashcat-monitor/categraf/1-introduction/
为什么选择 Categraf?
特点
开源免费:开源、开放、遵循 标准
OpenTelemetry
轻量级:采用 Go 语言编写,静态编译依赖少,体积小巧,资源占用低,易于部署和运行
灵活配置:拥抱 开源生态,支持 remote_write 协议推送数据,包括
Prometheus 等时序数据库
Promethues、M3DB、VictoriaMetrics、InfluxDB、Open-Falcon、TDengine
PUSH 推送:采用 PUSH 方式推送数据,对于网络策略要求较高的场景,可以减少对外部网络的依赖
All-in-one:内置支持近百种采集插件,同时支持采集指标和日志,减少 agent 部署数量,降低维护成本
易于扩展:支持自定义指标采集,以及过滤指定指标采集,此外还可轻松添加多个监控对象
另外,categraf 相较于其他监控采集 Agent,其设计目标直指其他方案的痛点:
相对于 Telegraf,它更贴合现代云原生(尤其是Prometheus)的数据规范。
相对于 Exporters 和早期 Grafana-Agent 的碎片化部署模式,它通过一体化设计大幅降低了管理复杂度。
相对于 Datadog-Agent,它更加轻量、开放,无缝融入云原生开源技术栈。
因此,Categraf 可以看作是汲取了 Telegraf 的“一体化插件架构”、Prometheus Exporters 的“标准数据模型”、并旨在解决两者在管理和部署上不足的一个现代化、高性能的替代方案。
监控数据采集代理对比
|
特性维度 |
Categraf | Telegraf | Prometheus Exporters | Grafana-Agent | Datadog-Agent |
|---|---|---|---|---|---|
| 核心定位与生态 |
全生态、高性能、一体化的采集器 |
InfluxDB 生态的核心采集器 |
Prometheus 生态的标准化数据暴露组件 |
Grafana Loki/Tempo/Mimir 生态的采集代理 |
Datadog 商业生态的集大成者 |
| 架构设计 | 单一体进程
,通过插件支持所有采集任务 |
单一体进程,通过插件采集 |
一个Exporter对应一个监控目标或类型
,数量繁多 |
早期版本类似Exporters堆叠,较新版本向一体化演进 |
单一体进程,功能高度集成 |
| 与Prometheus的兼容性 | 原生友好
,数据模型直接对齐OpenMetrics标准 |
兼容性一般,字符串field和动态标签不符合Prometheus数据模型 |
原生标准
,是Prometheus数据来源本身 |
原生兼容
,设计目标之一就是向Prometheus生态写入 |
不兼容
,使用自有数据格式和协议 |
| 资源与管理 | 轻量高效
(Go编译),单进程管理,部署简单 |
轻量级(Go编译) |
管理负担重
,需部署、管理大量独立进程 |
早期版本部署量大,管理复杂;新版本有改进 |
重量级
,包体积大,有一定资源开销 |
| 数据模型特点 |
优先适配Prometheus,强调稳态标签,避免高基数 |
适配InfluxDB,支持字符串字段和动态标签 |
严格遵循Prometheus数据模型,要求稳态指标 |
遵循Prometheus和OpenTelemetry数据模型 |
自有数据模型,支持高基数事件和日志 |
| 灵活性/扩展性 |
高,插件化,支持多种输入、处理和后端输出 |
高,插件生态丰富 |
单一,每个Exporter功能专注固定 |
较高,支持多种集成方式 |
高,但生态封闭,深度功能依赖Datadog |
| 社区与生态 |
拥抱云原生和开源生态,与多种TSDB兼容 |
扎根InfluxDB生态,同时支持其他输出 |
Prometheus事实标准
,社区庞大,是生态基石 |
紧密集成Grafana栈,社区活跃 |
商业产品生态
,与开源社区相对割裂 |
| 总结 | 云原生时代的“集大成者”
。博采众长,兼顾轻量、高效与强大的集成能力,设计上规避了其他方案的历史包袱。 |
InfluxDB生态的“得力干将”
。功能强大灵活,但在Prometheus主导的生态下,数据模型存在隔阂。 |
Prometheus的“螺丝刀”
。标准且专注,但微服务架构下部署碎片化,管理成本高。 |
Grafana可观测性栈的“连接器”
。正从“Exporters聚合体”向更统一的代理演进。 |
商业可观测性的“航母”
。功能全面强大,但封闭、沉重,与云原生标准脱节。 |
0x01 安装部署
环境说明
openEuler release 24.03 (LTS-SP1) amd64 :运维 | 国产操作系统遥遥领先? 新手必备 OpenEuler(欧拉) 开源操作系统快速安装配置指南
Nightingale v8.3.1 :国产化监控新选择!夜莺Nightingale在OpenEuler上的极简部署指南
VictoriaMetrics v1.129.1:
单机部署:https://articles.zsxq.com/id_n0eg5m1h3x1w.html
集群部署:https://articles.zsxq.com/id_vipw363vhqrz.html
Categraf 版本:v0.4.20
温馨提示:作者已针对 openEuler 24.03 LTS-SP1 进行安全加固,满足等保2.0要求,若需要加固脚本请访问【OpenEuler 24.03系统主机安全加固及配置优化实践指南】专栏获取。
温馨提示:作者在 KylinOS V10 SP3 上也进行了测试,发现依赖 glibc-2.34 版本,而其官方更新源默认仅支持到 glibc-2.28-88 ,所以需要自行手动编译 glibc 至 2.34 版本(有宕机的风险,谨慎操作),否则会报错,这一点各位看友在实践时须知。
二进制安装方式
操作步骤
首先,访问 categraf 下载页面[ https://flashcat.cloud/download/categraf/ ]查看到最新版本,使用 wget 命令下载最新版本的二进制文件及插件配置包,并将其解压到指定目录。
# 下载解压
VERSION=v0.4.20
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" --header="Referer: https://flashcat.cloud/download/nightingale/" https://download.flashcat.cloud/categraf-${VERSION}-linux-amd64.tar.gz
tar -zxvf categraf-${VERSION}-linux-amd64.tar.gz -C /opt/ --transform "s/categraf-${VERSION}-linux-amd64/categraf/"
# 或者,使用 --strip-components=1 参数
# tar -zxvf categraf-${VERSION}-linux-amd64.tar.gz -C /opt/categraf --strip-components=1
# 查看目录文件结构
[root@weiyigeek categraf]# ls
categraf (二进制文件) conf(采集器插件配置目录) scripts(Windows 系统下启动批处理脚本目录)
# 查看当前版本所支持的采集器插件:
[root@weiyigeek categraf]# ls conf/
config.toml(主配置文件) input.ipmi input.phpfpm
input.aliyun input.iptables input.ping
input.amd_rocm_smi input.ipvs input.postgresql
input.apache input.jenkins input.processes
input.appdynamics input.jolokia_agent_kafka input.procstat
input.arp_packet input.jolokia_agent_misc input.prometheus
input.bind input.kafka input.rabbitmq
input.cadvisor input.keepalived input.redfish
input.chrony input.kernel input.redis
input.clickhouse input.kernel_vmstat input.redis_sentinel
input.cloudwatch input.kubernetes input.rocketmq_offset
input.conntrack input.ldap input.self_metrics
input.consul input.linux_sysctl_fs input.smart
input.cpu input.logstash input.snmp
input.dcgm input.mem input.snmp_trap
input.disk input.mongodb input.sockstat
input.diskio input.mtail input.sqlserver
input.dns_query input.mysql input.supervisor
input.docker input.nats input.switch_legacy
input.elasticsearch input.net input.system
input.emc_unity input.net_response input.systemd
input.ethtool input.netstat input.tengine
input.exec input.netstat_filter input.tomcat
input.filecount input.nfsclient input.traffic_server
input.gnmi input.nginx input.vsphere
input.googlecloud input.nginx_upstream_check input.whois
input.greenplum input.node_exporter input.x509_cert
input.hadoop input.nsq input.xskyapi
input.haproxy input.ntp input.zookeeper
input.http_response input.nvidia_smi logs.toml (日志采集配置文件)
input.influxdb input.oracle

其次,将 categraf 以 systemd 服务的方式注册到系统服务中,按需求执行如下命令,特别注意默认以root用户执行,若需要以非root用户执行,则需要在 –user 参数中指定非root用户。
# 以服务的方式安装, 相当于添加 service 文件与 systemctl daemon-reload
sudo ./categraf --install
# 以非root用户运行 categraf 服务(请根据需要配置)
sudo ./categraf --install --user monitor
# 查看 categraf,相当于 systemctl status categraf
sudo ./categraf --status
# 卸载 categraf
sudo ./categraf --remove
2025/10/10 11:49:39 I! categraf service status: running
2025/10/10 11:49:39 I! stop categraf service ok
2025/10/10 11:49:39 I! remove categraf service ok
# 查看 categraf 版本信息
./categraf --version
v0.4.20-ddca8e6072f6eca3a81d6b526d06235ce8783558
# 当然,也可手动使用 nohup 方式后台运行 categraf 服务(生产环境不建议,因为服务挂了之后不会自动重启)
# nohup ./categraf &> stdout.log &
然后,根据实际情况修改 主配置(Metrics 指标)文件, 看友们可参考作者的配置文件示例,此处不再赘述。
conf/config.toml
例如,使用时需将下面的上报数据的地址修改为 n9e 的实际地址或者时序数据库地址,其次作者简单整理了配置参数含义:
## 全局配置
[global]
# 是否打印配置信息(缺省即可)
print_configs = false
## 主机名标签设置策略,用以确定 agent_hostname 标签值
# "" -> 自动检测
# "xx" -> 使用自定义主机名称
# "$hostname" -> 使用系统主机名
# "$ip" -> 使用IP地址(通常使用)
# "$sn" -> 使用BIOS序列号
# "$hostname-$ip" -> 即主机名称-IP地址
hostname = "$hostname"
# 是否忽略主机名标签,若为true,时序数据中就不会自动附加 agent_hostname=$hostname 的标签
omit_hostname = true
# 全局数据采集间隔(缺省:秒),如果配置成字符串,就要给出单位 "1m"
interval = 30
# 配置提供方式(local=本地文件,http=HTTP接口)
providers = ["local"]
# 配置并发任务数(缺省 -1 = 自动设置为CPU核心数×10)
concurrency = -1
## 全局标签设置,此处设置的标签将被附加到所有插件采集的数据点上,支持变量。
# 若禁用报告自定义标签,则将 http.ignore_global_labels 设置为 true
[global.labels]
job = "categraf_linux"
instance = "$ip"
ident = "$hostname"
company = "it"
region = "chongqing"
env = "prod"
# sn = "$sn"
## 日志配置 (可选)
[log]
# 日志输出(stdout=控制台,文件路径=文件输出)
# file_name = "stdout"
file_name = "/var/log/categraf.log"
# 日志文件最大大小(MB)
max_size = 100
# 日志保留天数
max_age = 1
# 最大备份文件数
max_backups = 1
# 是否使用本地时间
local_time = true
# 是否压缩备份日志
compress = false
## 写入器配置
[writer_opt]
# 批量写入大小
batch = 1000
# 通道缓冲区大小
chan_size = 1000000
## 写入目标配置,在toml中 [[]] 表示数组,所以可以配置多个writer,每个writer可以有不同的url,不同的basic auth信息
[[writers]]
# 方式1.通过 Nightingale 中转指标数据,路径 /prometheus/v1/write 表明它使用的是 Prometheus Remote Write 协议
# url = "http://127.0.0.1:17000/prometheus/v1/write"
# 方式2.直接上传到 VictoriaMetrics 时序数据库(单实例)
url = "http://10.20.172.213:8428/api/v1/write"
# 方式3.通过 Prometheus Remote Write 方式上传指标数据到 vm 集群,若有认证请设置后续 Basic 认证凭据
# url = "http://10.20.172.212:8427/insert/0:0/prometheus/api/v1/write"
## TLS CA证书、客户端证书等安全设置(可选)
# tls_min_version = "1.2" # 可选值是 1.0 1.1 1.2 1.3 分别对应 TLS1.0 到TLS1.3 。 SSLv3 不支持
# tls_ca = "/etc/categraf/ca.pem"
# tls_cert = "/etc/categraf/cert.pem"
# tls_key = "/etc/categraf/key.pem"
# 自签证书,避免 X509: certificate signed by unknown authority 错误需设置为 true
# insecure_skip_verify = true
# Basic 认证凭据设置(可选)
basic_auth_user = ""
basic_auth_pass = ""
# 自定义HTTP头
# headers = ["X-From", "categraf", "X-Xyz", "abc"]
# 写入超时设置(毫秒)
timeout = 5000
dial_timeout = 2500
max_idle_conns_per_host = 100
## 开启指标 push gateway HTTP 服务配置(可选)
# 通常用于接收其他系统(如自定义的 cron 脚本)推送的数据。
# 特别注意:categraf 的 HTTP 服务不会暴露 /metrics 接口,如果你想采集 categraf 自身的指标数据,需要使用 input.self_metrics 插件
[http]
enable = false
address = ":9100"
# 是否打印访问日志
print_access = false
# 运行模式(release=生产模式)
run_mode = "release"
# 是否忽略主机名标签
ignore_hostname = false
# 自定义主机名标签(可选)
agent_host_tag = ""
# 是否忽略全局标签
ignore_global_labels = false
## 配置是否启用Ibex(任务下发模块,即夜莺中的告警自愈功能,可选)
[ibex]
enable = false
# Ibex 执行间隔(毫秒)
interval = "1000ms"
# Ibex服务器地址
servers = ["127.0.0.1:20090"]
# 脚本临时目录
meta_dir = "./meta"
## 心跳检测配置
# 通过 Nightingale 进行心跳上报,由于 categraf 使用 PUSH 机制上报,无法直接通过指标判断是否采集失败,所以建议需要开启心跳上报功能。
[heartbeat]
enable = true
# 夜莺心跳上报地址(请根据实际情况修改)
url = "http://127.0.0.1:17000/v1/n9e/heartbeat"
# 心跳间隔(秒)
interval = 10
# Basic 认证凭据设置(可选)
basic_auth_user = ""
basic_auth_pass = ""
# 自定义HTTP头
# headers = ["X-From", "categraf", "X-Xyz", "abc"]
# 超时设置
timeout = 5000
dial_timeout = 2500
max_idle_conns_per_host = 100
## 配置启用 Prometheus 模式,它可以把 prometheus 的采集配置直接拿来使用(可理解为 Prometheus Agent,可选)
[prometheus]
enable = false
# 抓取配置文件路径
scrape_config_file = "/path/to/in_cluster_scrape.yaml"
# 日志级别
log_level = "info"
# WAL文件存储路径
# wal_storage_path = "/path/to/storage"
# 内存中最小保留时间, 默认10m
# min_block_duration = "5m"
# 内存中最大保留时间,超过这个时间会刷新到磁盘,默认20m
# max_block_duration = "20m"
# wal文件清理时间,默认24h
# retention_time = "24h"
# wal文件最大size,超过就开始清理, 默认1GB
# retention_size = "512MB"
最后,启动并查看 categraf 服务状态。
# 启动 categraf 服务
./categraf -start
# 或者
systemctl start categraf
# 停止 categraf 服务
./categraf -stop
# 或者
systemctl stop categraf
# 查看 categraf 服务状态
./categraf --status
2025/10/11 16:09:35 I! show categraf service status: running # 正常运行状态
温馨提示:Remote Write 是一个基于 HTTP 的协议,允许 Prometheus 或其兼容的代理(如 categraf)将采集的时间序列数据批量发送到远程存储端点。
温馨提示:更多 categraf 命令行参数帮助信息。
./categraf --help
Usage of ./categraf:
-configs string # 指定配置目录 或 通过 CATEGRAF_CONFIGS 环境变量设置,缺省 conf
-debug # 开启调试模式,打印更多日志信息
-debug-level int # 设置调试级别,默认为 0 (不显示调试信息)
-inputs string # 指定要生效的插件,例如 cpu:mem:system
-install # 安装 categraf 服务
-interval int # 采集间隔,单位秒
-remove # 卸载 categraf 服务
-start # 启动 categraf 服务
-status # 查看 categraf 服务状态
-stop # 停止 categraf 服务
-test # 测试模式,打印指标到标准输出
-update # 更新 categraf 二进制文件
-update_url string # 指定更新 categraf 的下载地址
-user # 使用用户模式安装 categraf 服务,默认为 root 模式
-version # 打印版本信息
至此,在 OpenEuler 24.03 TLS 系统中进行二进制方式安装 categraf 完成。
0x02 小试牛刀
描述:在 OpenEuler 24.03 TLS 系统上 categraf 启动成功之后,便通过 等插件采集 Linux 主机相关指标数据,并通过 Remote Write 协议将指标转发到 VictoriaMetrics 进行存储,此外还将监控主机信息通过心跳检测上报到夜莺平台,从而实现监控对象的数据采集、存储和展示。
cpu、mem、disk、diskio、net...
操作步骤
步骤 01.使用 以及
-test 参数测试 categraf 采集指标是否正常。
-inputs
cd /opt/categraf
./categraf -test -inputs cpu:mem:disk:diskio:net # 指定要采集指标的插件(继承)
2025/10/11 17:40:20 metrics_agent.go:324: I! input: local.cpu started
2025/10/11 17:40:20 metrics_agent.go:324: I! input: local.disk started
2025/10/11 17:40:20 metrics_agent.go:324: I! input: local.diskio started
2025/10/11 17:40:20 metrics_agent.go:324: I! input: local.mem started
2025/10/11 17:40:20 metrics_agent.go:324: I! input: local.net started

步骤 02.验证没有问题时,重启 categraf 服务,并查看日志是否正常。
systemctl restart categraf;systemctl status categraf
步骤 03.若一切正常,我们在中可以看到采集的主机信息,此时它是未归组机器,如下图所示:
夜莺平台>基础设施>业务组

步骤 04.我们可将其归类到某个业务组,例如 测试组,便于后续管理,另外还可以给它打上标签 ,便于后续筛选。
role=test

步骤 05.由上结果 categraf 采集指标数据正常,并被夜莺平台成功识别,我们可在中查询到采集的指标数据,例如,查看
夜莺平台>数据查询>指标指标数显示主机核心数,如下所示:
system_n_cpus

步骤 06.此外,夜莺平台还提供了可视化仪表盘功能,其中内置了各种场景的监控模板,例如,我们可以通过内置的模板快速搭建 Linux 主机监控仪表盘,如下所示:
Linux

导入后,点击仪表盘名称,便可查看 Linux 主机监控仪表盘,此时选中 categraf 采集的主机 ident 标识,即可显示采集的系统指标数据,如下所示:

至此,我们完成了 categraf 在 OpenEuler 24.03 TLS 系统上的安装与使用,至此,我们便可对 Linux 主机的各项指标进行监控与管理。
温馨提示:在 categraf 采集的 Linux 系统指标数据名称与 采集的指标名称略有不同,在进行数据查询、可视化时需要注意,当然 categraf 社区的一些小伙伴已经关注到这一问题,所以在 categraf 插件目录中提供
Prometheus node_exporter 插件适配了
input.node_exporter 指标以解决采集指标名称不统一的问题;另外,不同版本的 node_exporter 指标名称也是略有不同,建议各位道友采集 linux 指标时最好选择
node_exporter 最新版本。
node_exporter
温馨提示:作者考虑到各位看友需要对多台 Linux 主机进行监控,所以特意整理编写了 Categraf 一键安装升级脚本,亦可使用 ansible 进行批量安装, 有需要的童鞋请加入到知识星球《Categraf | 国产化云原生采集工具:初识部署与Linux主机监控可视化实战: https://articles.zsxq.com/id_3mq4pasw7x5w.html》获取网盘地址,执行效果如下图所示:


END
加入:作者【全栈工程师修炼指南】知识星球
『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。
Q: 加入作者【全栈工程师修炼指南】星球后有啥好处?
✅ 将获得作者最新工作学习实践文章以及网盘资源。
✅ 将获得作者珍藏多年的全栈学习笔记(需连续两年续费及以上老星球友,也可单次购买)
✅ 将获得作者专门答疑学习交流群,解决在工作学习中的问题。
✅ 将获得作者远程支持(在作者能力范围内且合规)。

获取:作者工作学习全栈笔记
作者整理了10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者微信或者回复【工作学习实践笔记】,当前价格¥299,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

知识推荐 往期文章
🔥【最新】VictoriaMetrics | 云原生监控新宠: 使用 vmagent 工具采集 VM 集群指标实战
🔥【最新】VictoriaMetrics | 云原生监控新宠: 以二进制方式部署VM高可用集群实践
🔥【最新】VictoriaMetrics | 云原生监控新宠: 10倍性能碾压Prometheus?单机一键部署实战
💡【相关】云原生监控告警新选择:夜莺(Nightingale)在K8S集群部署与私有镜像构建指南
💡【相关】国产化监控新选择!夜莺Nightingale在OpenEuler上的极简部署指南
若文章对你有帮助,请将它转发给更多的看友,若有疑问的小伙伴,可在评论区留言你想法哟 💬!
