Collectd 介绍与选型指南

Collectd 是 C 语言编写的系统统计采集守护进程,本文基于 collectd.org 与 GitHub 官方源梳理其插件化架构与功能特性,并给出与 Telegraf、Netdata、Prometheus node_exporter 的量化选型对比。

CollectdCollectd监控系统监控可观测性2026/10/30

Collectd 介绍与选型指南

目标:讲清楚 Collectd 是什么、架构如何设计、能做什么与不能做什么,并给出一组可与 Telegraf、Netdata、Prometheus node_exporter 对照的量化选型结论。本文事实信息溯源自 collectd.org 与 GitHub 官方仓库(查询日期 2026-10-30),安装与配置实测基于 Ubuntu 22.04 服务器(详见环境信息)。

一、环境信息

本篇为介绍与选型文档,官方信息溯源渠道与实测环境如下:

  • 官方信息来源:collectd.org 官网、GitHub collectd/collectd 仓库(含 Releases、LICENSE、仓库统计),溯源查询日期 2026-10-30
  • 实测环境:Ubuntu 22.04 服务器(jammy),amd64 架构
  • 实测软件版本:collectd 5.12.0-10ubuntu0.1(Ubuntu jammy-updates/universe 仓库,apt policy collectd 实查)
  • 源码版本:collectd 5.12.0(官方 tar 包 collectd-5.12.0.tar.bz2,2020-09-03 发布)
  • 数据落盘:/var/lib/collectd/rrd/(rrdtool 插件默认输出目录)

💡 说明:溯源类数据(版本号、Star 数、发布日期等)均标注官方来源与查询日期;实测类数据(安装、配置、数据流出验证)在本机 Ubuntu 22.04 服务器逐条执行并留存回显,详见本专栏安装、配置与命令各篇。

二、软件概述

collectd 的官方自我定位是「the system statistics collection daemon」——一个周期性采集系统与应用性能指标的守护进程(collectd.org 首页原文,查询日期 2026-10-30)。它从操作系统、应用程序、日志文件、外部设备等各类来源采集指标,然后把这些数据存储起来(如写入 RRD 文件)或通过网络转发出去(如转发给 Graphite、InfluxDB)。官方给出三类典型用途:

  1. 系统监控:持续观测 CPU、内存、磁盘、网络等主机资源水位;
  2. 性能分析(performance analysis):定位性能瓶颈;
  3. 容量规划(capacity planning):基于历史趋势预测未来负载。

collectd 项目由 Florian octo Forster 创建,核心用 C 语言编写。官网在「Why collectd?」一节给出的差异化理由是(原文转述):

  • C 编写带来高性能与可移植性,可以运行在没有脚本语言、没有 cron 的系统上(例如嵌入式环境,collectd 在 OpenWrt 路由器发行版上很流行);
  • 内置针对数十万级指标量化的优化与特性;
  • 自带超过 100 个插件,覆盖从常规场景到非常专门化的高级主题;
  • 提供强大的网络特性(采集端与接收端可以分层组网),且扩展方式多样;
  • 项目活跃维护、文档完善。

同时官网明确写出两条 Limitations(能力边界),选型时必须正视:

  • 不生成图表:collectd 可以写 RRD 文件,但不会根据这些文件画图,画图要交给 Graphite/Grafana 等(官网建议 kcollectd、drraw 等前端,或直接对接现代时序库);
  • 监控告警能力有限:4.3 版本加入了简单的阈值检查(threshold),但「so far limited to simple threshold checking」,复杂告警需要对接 Nagios 等外部系统。

💡 技术拓展:collectd 的数据落地方式不止 RRD 文件一种。常见「write 系列」输出插件对比——

输出插件落地方式适用场景
rrdtool本地 RRD 环形数据库文件单机自持、离线查看,无需额外组件
csv本地 CSV 文件调试、导出给脚本处理
write_graphiteTCP 明文协议推给 Graphite/Carbon经典 Graphite 栈
write_httpHTTP POST(JSON/KairosDB 格式)推给接收端对接自研接收端或云网关
write_influxdb_udpUDP 推给 InfluxDBInfluxDB 栈
networkcollectd 专用二进制协议,多播/单播转发分层采集:边缘节点 → 汇聚节点

本文实验采用 rrdtool(默认本地落地)+ write_graphite/write_http(验证转发),理由:前者零依赖开箱即用,后两者是验证「数据确实流出去」最直观的手段。

三、核心架构

collectd 的架构可以概括为「读插件 → 内部值缓存 → 写插件」的三段流水线,外加围绕这条流水线的辅助机制。

  1. 插件体系(核心设计)。collectd 把所有功能都做成插件(.so 动态库),通过配置文件里的 LoadPlugin 指令加载。按职责分五类:
    • 读插件(read):从数据源采集指标,如 cpu、memory、load、disk、interface、df、processes;以及采集第三方应用的插件,如 nginx、apache、mysql、redis、memcached;
    • 写插件(write):把指标写出去,如 rrdtool、csv、write_graphite、write_http、write_influxdb_udp;
    • 过滤/匹配插件(filter/match):在读写之间对数据流做处理,如 match_regex、target_set;
    • 日志插件(logging):logfile、syslog、log_logstash,决定日志去哪里;
    • 通知插件(notification):把阈值告警事件发出去,如 notify_email、notify_desktop。 插件以 C 语言实现,还有 Java(GenericJMX)、Python、Perl 语言绑定插件可以写自定义采集逻辑(官网 Development Information 页列出插件架构文档,查询日期 2026-10-30)。
  2. 采样模型:守护进程常驻 + 固定间隔轮询。collectd 是一个常驻守护进程,主循环按全局 Interval(默认 10 秒)周期性调用各读插件的 read 回调。每个插件把自己产出的「值」连同「主机名/插件名/插件实例/类型/类型实例」五元组标识交给核心。
  3. 数据模型。每条指标由五元组定位:host(主机名)、plugin(插件名,如 cpu)、plugin_instance(插件实例,如 cpu-0)、type(数据类型,如 cpu-idle)、type_instance(类型实例,如 user 状态)。类型的具体定义(数据源个数、DS 类型、取值范围)记录在 TypesDB 文件(/usr/share/collectd/types.db)里,这是 collectd 区别于普通 agent 的一个特色——类型系统是共享的「字典」。
  4. 配置机制。单一主配置文件 /etc/collectd/collectd.conf,全局段配置守护进程行为(Interval、Hostname、BaseDir 等),<Plugin xxx> 块配置各插件参数,Include 指令支持引入 conf.d 目录片段(Ubuntu 包默认启用 /etc/collectd/collectd.conf.d/*.conf)。
  5. 网络分层。network 插件既可作客户端(把本机数据转发出去)也可作服务端(接收其他节点的数据),支持多播与单播,天然支持「边缘采集 → 汇聚存储」的两层部署拓扑。
  6. 本地工具面。除守护进程本体 collectd 外,Ubuntu 包还附带 collectdctl(通过 unixsock 查询/控制)、collectd-nagios(给 Nagios 做指标检查)、collectd-tg(测试数据生成器)、collectdmon(守护进程看护)等实用工具(dpkg -L collectd-utils 实查清单)。

💡 技术拓展:指标采集的传输模型有「推(push)」与「拉(pull)」两大流派,collectd 属于推模型——agent 主动把数据发往存储端,不需要存储端能反向访问每台被采集机器,适合跨网段、边缘节点与 NAT 后的主机;拉模型(如 Prometheus node_exporter)由服务端定时来抓,便于服务端控制节奏与做服务发现,但要求存储端可达每台机器。选型时网络可达性往往是第一决策因素——本方案在「被采集机器无法被监控端反向访问」的场景下优先选 collectd 这类推模型 agent。

四、功能特性

结合官网 Features 页与插件表(Table of Plugins),collectd 的功能特性可归纳为(官方信息,查询日期 2026-10-30):

  1. 系统级指标全覆盖:CPU(含逐核与频率)、内存、swap、负载、磁盘(IO/容量)、文件系统、网络接口流量、连接数、中断、用户/进程数、entropy 等;Ubuntu 22.04 默认配置就启用了 battery/cpu/df/disk/entropy/interface/irq/load/memory/processes/rrdtool/swap/users 十余个读插件(collectd.conf 实查)。
  2. 应用与中间件指标:nginx、apache、mysql、postgresql、redis、memcached、mongodb、rabbitmq(amqp)、bind、varnish 等都有读插件,通过各自协议(统计页、unix socket、客户端协议)拉取状态。
  3. 硬件与传感器:ipmi、sensors、thermal、smart(disk 温度)、apcups/nut(UPS)、battery。
  4. 网络与分层采集:network 插件(UDP 多播/单播)、ping 插件(探测时延)、tcpconns、conntrack、dns(报文解析统计)、iptables。
  5. 多种输出目标:rrdtool、rrdcached、csv、write_graphite、write_http、write_influxdb_udp、write_kafka、write_prometheus(6.0 系列)、write_redis、write_mongodb、write_tsdb、amqp 等(configure 汇总与插件表实查)。
  6. 轻量阈值告警:threshold 机制 + 通知插件(notify_email/notify_desktop),可做最简单的越限通知(官网明示能力有限,复杂告警应外置)。
  7. 可编程扩展:exec(执行脚本取数)、tail/logparser(解析日志)、curl/curl_json/curl_xml(主动拉 HTTP 指标)、table、filecount,以及 Java/Python/Perl 绑定。
  8. 运维友好工具:collectdctl 实时查询值缓存、collectd-nagios 输出 Nagios 兼容退出码、collectd-tg 生成压测数据流。

五、快速开始(最小可用示例)

在 Ubuntu 22.04 服务器上,两条命令即可得到一个采集本机、RRD 落盘的可用采集守护进程:

# 安装(Ubuntu jammy-updates/universe 仓库,实测版本 5.12.0-10ubuntu0.1)
apt-get install -y collectd collectd-utils

# 启动并查看状态
systemctl start collectd
systemctl is-active collectd

实测回显:

active

等一个采集间隔(默认 10 秒)后,检查默认输出目录里的 RRD 文件:

# 查看 rrdtool 插件落盘的指标文件(输出节选,实测首部)
find /var/lib/collectd/rrd -name "*.rrd" | head -12

实测回显(本机 6 颗逻辑核,输出节选):

/var/lib/collectd/rrd/collectd-server/disk-loop2/disk_octets.rrd
/var/lib/collectd/rrd/collectd-server/disk-loop2/disk_ops.rrd
/var/lib/collectd/rrd/collectd-server/disk-loop2/disk_io_time.rrd
/var/lib/collectd/rrd/collectd-server/disk-loop2/disk_time.rrd
/var/lib/collectd/rrd/collectd-server/cpu-2/cpu-steal.rrd
/var/lib/collectd/rrd/collectd-server/cpu-2/cpu-softirq.rrd
/var/lib/collectd/rrd/collectd-server/cpu-2/cpu-wait.rrd
/var/lib/collectd/rrd/collectd-server/cpu-2/cpu-user.rrd
/var/lib/collectd/rrd/collectd-server/cpu-2/cpu-system.rrd
/var/lib/collectd/rrd/collectd-server/cpu-2/cpu-nice.rrd
/var/lib/collectd/rrd/collectd-server/cpu-2/cpu-interrupt.rrd
/var/lib/collectd/rrd/collectd-server/cpu-2/cpu-idle.rrd

目录名 collectd-server 即本机主机名,cpu-2 是 cpu 插件实例(第 3 颗逻辑核)。至此一个最小的采集守护进程已经在工作。完整的从零安装步骤(含源码编译方案、systemd 托管与验证)见本专栏《Ubuntu 22.04 安装 Collectd 指南》篇。

💡 说明:RRD 是 Round-Robin Database(环形数据库)的缩写——文件在创建时就固定了尺寸与保留窗口,新数据循环覆盖旧数据,文件大小恒定不随时间增长。这与「无限追加」的普通时序库相反,是 collectd 默认落地方式磁盘占用可预估的原因。

六、适用场景与限制

适用场景(结合官方定位与实测经验):

  1. 大规模主机群的轻量指标采集:C 语言、低资源占用、纯推模型,适合成百上千台 Linux 服务器统一安装;
  2. 弱环境/嵌入式设备:无脚本运行时、无 cron 也能跑(官网点名 OpenWrt 场景);
  3. 网络受限的边缘节点:推模型不要求监控端反向可达,network 插件还支持多播汇聚;
  4. 已有 Graphite/InfluxDB/RRDtool 栈的团队:写插件现成,即插即用;
  5. 需要自研采集逻辑的场景:exec/Python/Java 绑定可以快速把业务指标接入同一条数据管道。

限制与注意(官网 Limitations 原文转述 + 实测):

  1. 不负责可视化:只落数据不画图,展示层需自建(Graphite+Grafana)或换 Netdata 这类自带面板的方案;
  2. 告警能力停留在简单阈值检查,规则引擎、告警分组、静默等需外部系统(Nagios/Prometheus Alertmanager)承担;
  3. 5.x 稳定版最后一次发布是 2020-09-03 的 5.12.0,6.0 系列自 2024 年初起只有 rc 预发布版(GitHub Releases 实查,查询日期 2026-10-30)——核心功能稳定但大版本演进缓慢,新特性诉求多的团队要评估;
  4. 配置是自有的类 Apache 语法(非 YAML/TOML),<Plugin> 块参数随插件各异,学习成本略高于同类的 TOML/ini 配置。

七、同类选型对比

下面把 collectd 与三款常见同类组件做量化对比。社区数据溯源自 GitHub API(查询日期 2026-10-30);语言与许可以各仓库 LICENSE/README 为准。

维度collectdTelegrafNetdataPrometheus node_exporter
定位系统统计采集守护进程(C)通用指标采集 agent(Go)实时监控 agent + 自带面板(C 内核)主机指标 exporter(Go,配合 Prometheus 拉取)
语言CGoC(agent 内核)Go
许可证GPL-2.0+(主体,个别文件 MIT/BSD/LGPL)MITGPL-3.0Apache-2.0
GitHub Stars3369178898122413884
插件/采集面官网称 100+ 插件,读/写/过滤/日志/通知五类官方口径 300+ input + 100+ output/处理插件千余个开箱即用指标点,自动发现单一主机指标面(含 40+ collector 子开关)
数据传输模型推(网络/写插件主动外发)推(output 插件外发)推+拉(本机实时流,可对接云)拉(由 Prometheus 定时抓 /metrics)
存储与可视化不含,落 RRD/外发不含,外发到 InfluxDB 等自带内嵌 TSDB + Web 面板不含,存储查询依赖 Prometheus
部署体感单进程,配置类 Apache 语法单二进制,TOML 配置单进程 + Web UI(默认 19999 端口)单二进制,几乎零配置
最近代码活跃仓库 push 2026-10-27;5.12.0(2020-09-03)后无稳定版,6.0 rc3(2024-02-21)仓库 push 2026-10-30,月度发版节奏仓库 push 2026-10-30,高频发版仓库 push 2026-10-29,随 Prometheus 节奏发版
典型归宿Graphite/InfluxDB/RRDtool 栈InfluxDB/多目的地管道单机实时观测/自助面板Prometheus 生态

表解读:四个工具不是完全互斥关系,而是「采集内核 + 传输模型 + 生态归宿」三种差异的组合。

  1. 纯采集、自己有存储/展示栈 → collectd 或 Telegraf 都合适:Telegraf 插件生态更新、配置现代;collectd 更省资源、推模型网络适配性一样好,但配置语法老派、稳定版演进慢;
  2. 想要开箱即用面板、逐秒级实时观测单机/小规模集群 → Netdata,代价是资源占用与数据面组件更重;
  3. 已经或计划落地 Prometheus → node_exporter 是事实标准,但要求 Prometheus 能拉到每台机器;被采集机在 NAT/防火墙后时,node_exporter 不可用而 collectd/Telegraf 这类推模型 agent 仍可用;
  4. 嵌入式/极端资源受限 → collectd 的 C 实现与体积优势明显,这是官网自己强调的差异化场景;
  5. 需要从旧 RRD 资产平滑过渡 → collectd 天然读写 RRD,兼容成本最低。

💡 技术拓展:上面四个都属于「指标(metrics)」观测面。完整的可观测性还有日志(logs,如 Loki/Graylog/ELK)与链路追踪(tracing,如 Jaeger/Tempo)两大支柱,通常与指标采集 agent 并行部署而非互相替代。本文对比只在指标面内进行。

八、参考链接