collectd - 系统信息收集守护进程
关于
collectd 是一个小型守护进程,它定期收集系统信息,并提供各种方式来存储和监控这些值。
特性
-
collectd 能够收集以下数据:
-
apache Apache 服务器利用率:传输的字节数、处理的请求数和详细的记分板统计。
-
apcups APC UPS 守护进程:UPS 充电、负载、输入/输出/电池电压等。
-
apple_sensors 运行 Mac OS X / Darwin 的 Mac 电脑中的传感器:温度、风扇速度和电压传感器。
-
aquaero Aquacomputer 公司生产的 Aquaero 5 水冷板中的各种传感器。
-
ascent 关于 Ascent 的统计信息,Ascent 是"魔兽世界"游戏的一个免费服务器。
-
barometer 读取绝对气压、海平面气压和温度。支持的传感器有飞思卡尔的 MPL115A2 和 MPL3115 以及博世的 BMP085。
-
battery 基于 ACPI 和 PMU 的笔记本电脑电池的电量、电流和电压。
-
bind BIND 9.5、9.6 及更高版本的
statistics-channel
接口中的名称服务器和解析器统计信息。 -
buddyinfo 来自 buddyinfo 文件的内存碎片统计信息。
-
capabilities 从硬件子系统解码的平台功能,例如使用 dmidecode 从 SMBIOS 解码。 https://www.nongnu.org/dmidecode/
-
ceph Ceph 分布式存储系统的统计信息。
-
cgroups Linux 下进程组的 CPU 记账信息。
-
chrony Chrony 守护进程统计:本地时钟漂移、与对等节点的偏移等。
-
connectivity 基于事件的接口状态。
-
conntrack nf_conntrack 条目数。
-
contextswitch 操作系统完成的上下文切换次数。
-
cpu CPU 利用率:系统、用户、nice、空闲和相关状态所花费的时间。
-
cpufreq CPU 频率(适用于具有 speed step 或类似技术的笔记本电脑)
-
cpusleep CPU 睡眠:处于暂停状态的时间(适用于自动进入暂停状态的移动设备)
-
curl 使用正则表达式解析网站统计信息。
-
curl_json 通过 cURL 检索 JSON 数据并根据用户配置进行解析。
-
curl_xml 通过 cURL 检索 XML 数据并根据用户配置进行解析。
-
dbi 在各种数据库上执行 SQL 语句并解释返回的数据。
-
dcpmm 收集英特尔傲腾数据中心级持久内存(DCPMM)性能和健康统计信息。
-
df 挂载点使用情况(基本上是
df(1)
提供的值) -
disk 磁盘利用率:读/写扇区数、读/写操作次数、IO 操作完成的平均时间。
-
dns DNS 流量:查询类型、响应代码、操作码和传输的流量/字节数。
-
dpdkstat 收集 DPDK 接口统计信息。 详细构建说明请参见 docs/BUILD.dpdkstat.md。
此插件应该在启用编译器防御的情况下编译,例如 -fstack-protector。
-
dpdk_telemetry 收集 DPDK 接口、应用程序和全局统计信息。 此插件可用作 dpdkstat 插件的替代品。
此插件依赖于 DPDK 19.08 版本,必须与 DPDK 应用程序一起使用。
此外,该插件依赖 Jansson 库。
-
drbd 收集单个 drbd 资源统计信息。
-
email 电子邮件统计:数量、流量、垃圾邮件得分和检查。 参见 collectd-email(5)。
-
entropy 系统可用的熵量。
-
epics 从 EPICS 消息总线收集数据。 https://epics-controls.org
-
ethstat 网络接口卡统计信息。
-
exec 通过自定义程序或脚本收集的值。 参见 collectd-exec(5)。
-
fhcount 文件句柄统计信息。
-
filecount 统计目录中的文件数量。
-
fscache Linux 基于文件系统的缓存框架统计信息。
-
gmond 接收来自 Ganglia 实例的多播流量。
-
gps 通过 gpsd 监控 GPS 相关数据。
-
gpu_nvidia 通过 NVML 监控 NVIDIA GPU 统计信息。
-
hddtemp 使用 hddtempd 监控硬盘温度。
-
hugepages 报告已使用和空闲的大页数量。有关大页的更多信息可以在这里找到: https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt。
此插件应该在启用编译器防御的情况下编译,例如 -fstack-protector。
-
infiniband 每个 IB 设备上每个端口的属性和计数器。
-
intel_pmu intel_pmu 插件读取 Linux 内核 perf 接口提供的性能计数器。该插件使用 jevents 库将命名事件解析为 perf 事件并访问 perf 接口。
-
intel_rdt intel_rdt 插件收集英特尔资源导向技术(Intel(R) RDT)监控功能提供的信息,如缓存监控技术(CMT)、内存带宽监控(MBM)。这些功能提供有关共享资源利用率的信息,如最后一级缓存占用率、本地内存带宽使用、远程内存带宽使用、每时钟指令数。 https://01.org/packet-processing/cache-monitoring-technology-memory-bandwidth-monitoring-cache-allocation-technology-code-and-data
-
interface 接口流量:每个接口的字节数、数据包数和错误数。
-
ipc IPC 计数器:使用的信号量、共享内存中分配的段数等。
-
ipmi IPMI(智能平台管理接口)传感器信息。
-
ipstats IPv4 和 IPv6 的入站、出站、转发计数器。仅适用于 FreeBSD。
-
iptables Iptables 计数器:某个 iptables 规则匹配的字节数。
-
ipvs IPVS 连接统计(每个服务和目标的连接数、字节数和数据包数)。 参见 http://www.linuxvirtualserver.org/software/index.html。
-
irq IRQ 计数器:特定中断发生的频率。
-
java 集成 Java 虚拟机(JVM)以执行 Java 字节码插件。 详细构建说明请参见 docs/BUILD.java.md。
-
load 过去 1、5 和 15 分钟的系统平均负载。
-
lpar IBM POWER 处理器内置的"逻辑分区"虚拟化技术的详细 CPU 统计信息。
-
lua Lua 插件在 collectd 中实现了一个 Lua 解释器。这使得可以用 Lua 编写插件,由 collectd 执行,而无需在每个间隔都启动一个重量级解释器。 详情请参见 collectd-lua(5)。
-
madwifi 查询使用 Atheros 芯片组和 MadWifi 驱动程序的无线网卡和接口的非常详细的使用统计信息。
-
mbmon 使用 mbmon(1) 获取主板传感器:温度、风扇速度和电压信息。
-
mcelog 监控 mcelog 报告的机器检查异常(硬件检测到并报告给软件的硬件错误),并在检测到机器检查异常时生成适当的通知。
-
md Linux 软件 RAID 设备信息(活动、故障、备用和缺失磁盘的数量)。
-
memcachec 查询和解析来自 memcache 守护进程(memcached)的数据。
-
memcached memcached 分布式缓存系统的统计信息。 http://www.danga.com/memcached/
-
memory 内存利用率:运行进程占用的内存、页面缓存、缓冲区缓存和空闲内存。
-
mic 收集英特尔众核处理器(MIC)的 CPU 使用率、内存使用率、温度和功耗。
-
mmc 读取 eMMC 5.0+ 设备报告的寿命估计,以及一些更详细的健康指标,如坏块和擦除次数或电源循环,适用于 micron 和 sandisk eMMC 以及一些 swissbit mmc 卡(MANFID=0x5D OEMID=0x5342)。
-
modbus 从支持 Modbus/TCP 的设备读取值。支持从多个"从设备"读取值,因此可以使用网关设备。
-
multimeter 串行万用表提供的信息,如
Metex M-4650CR
。 -
mysql MySQL 服务器统计:发出的命令、触发的处理程序、线程使用情况、查询缓存利用率以及发送和接收的流量/字节数。
-
netapp 使用 NetApp 提供的"Manage ONTAP"SDK 从 NetApp 存储系统查询性能值的插件。
-
netlink 非常详细的 Linux 网络接口和路由统计信息。您可以获取(详细的)接口、qdiscs、类别的信息,如果您能利用它们的话,还可以获取过滤器的信息。
-
network 接收由其他主机收集的值。大型设置会希望在一台专用机器上收集数据,这是首选的插件。
-
nfs NFS 过程:各种 NFS 命令被调用的频率。
-
-
nginx 从HTTP和邮件服务器/代理nginx(发音为engine X)收集统计信息。
-
ntpd NTP守护进程统计信息:本地时钟漂移、与对等节点的偏移等。
-
numa 非统一内存访问(NUMA)的相关信息。
-
nut 网络UPS工具:UPS电流、电压、功率、充电、利用率、温度等。参见upsd(8)。
-
olsrd 从"优化链路状态路由"守护进程查询路由信息。
-
onewire(实验性!) 使用owfs项目的owcapu库读取单线传感器。请在collectd.conf(5)中了解为什么这个插件是实验性的。
-
openldap 从OpenLDAP的cn=Monitor子树读取监控信息。
-
openvpn 读取openvpn-status.log(状态版本2)中每个客户端的RX和TX。 http://openvpn.net/index.php/documentation/howto.html
-
oracle 从Oracle数据库查询数据。
-
ovs_events 该插件监控Open vSwitch(OVS)连接接口的链路状态,将值分发给collectd,并在OVS数据库中链路状态发生变化时发送通知。需要安装YAJL库。 有关安装和设置Open vSwitch的详细说明,请参见OVS文档。 http://openvswitch.org/support/dist-docs/INSTALL.rst.html
-
ovs_stats 该插件收集OVS连接的桥接器和接口的统计信息。需要安装YAJL库。 有关安装和设置Open vSwitch的详细说明,请参见OVS文档。 http://openvswitch.org/support/dist-docs/INSTALL.rst.html
-
pcie_errors 从PCI Express设备状态和AER扩展功能读取错误。 https://www.design-reuse.com/articles/38374/pcie-error-logging-and-handling-on-a-typical-soc.html
-
perl perl插件在collectd中实现了一个Perl解释器。您可以用Perl编写自己的插件,并使用这个API返回任意值。参见collectd-perl(5)。
-
pf 查询BSD的数据包过滤器"pf"的统计信息。
-
pinba 接收并分发来自Pinba(一个PHP性能分析扩展)的计时值。
-
ping 网络延迟:到达默认网关或其他给定主机的时间。
-
postgresql PostgreSQL数据库统计信息:活跃服务器连接数、事务数、块IO、表行操作。
-
powerdns PowerDNS名称服务器统计信息。
-
processes 进程计数:运行中、睡眠、僵尸等进程的数量。
-
procevent 通过netlink监听进程的启动和退出。
-
protocols 计算网络协议(如IP、TCP、UDP等)的各个方面。
-
python python插件在collectd中实现了一个Python解释器。这使得可以用Python编写插件,由collectd执行,而无需每个间隔都启动一个重量级解释器。详情请参见collectd-python(5)。
-
ras ras插件收集并计算由RASDaemon提供的错误。
-
redis redis插件从Redis服务器收集信息,包括:运行时间、已用内存、总连接数等。
-
routeros 查询RouterOS的接口和无线注册统计信息。
-
rrdcached RRDtool缓存守护进程(RRDcacheD)统计信息。
-
sensors 使用lm_sensors访问的系统传感器:电压、温度和风扇转速。
-
serial 串行接口的RX和TX。仅限Linux;需要root权限。
-
sigrok 使用libsigrok作为后端,允许将任何sigrok支持的设备的测量结果输入到collectd。这包括万用表、声级计、温度计等多种设备。
-
slurm 使用libslurm收集每个分区的节点和作业状态信息,以及内部健康统计信息。
-
smart 收集SMART统计信息,特别是负载循环计数、温度和坏扇区。
-
snmp 从支持SNMP(简单网络管理协议)的网络设备读取值,如交换机、路由器、温度计、机架监控服务器等。参见collectd-snmp(5)。
-
statsd 作为StatsD服务器,读取从StatsD客户端通过网络发送的值,并根据这些值计算速率和其他聚合数据。
-
sysevent 监听rsyslog事件并提交匹配的值。
-
swap 换出到硬盘或操作系统称为"swap"的页面。
-
table 解析类表格结构的文件。
-
tail 跟踪(尾随)日志文件,按行解析并提交匹配的值。
-
tail_csv 跟踪(尾随)CSV格式的文件,解析每一行并提交提取的值。
-
tape 磁带设备上读写的字节数和操作数。仅限Solaris。
-
tcpconns 特定本地和远程端口的TCP连接数。
-
teamspeak2 TeamSpeak2服务器统计信息。
-
ted 从"the energy detective"(TED)读取值的插件。
-
thermal Linux ACPI热区信息。
-
tokyotyrant 从运行中的Tokyo Tyrant服务器读取记录数和文件大小。
-
turbostat 读取现代Intel支持turbo的处理器的CPU频率和C状态驻留时间。
-
ubi 读取UBI卷上坏物理擦除块的数量和当前最大擦除计数器值。
-
uptime 系统运行时间统计。
-
users 当前登录的用户。
-
varnish 来自HTTP加速器Varnish的各种统计信息。
-
virt 虚拟机的CPU、内存、磁盘和网络I/O统计信息。
-
vmem 虚拟内存统计,例如页面调入/调出次数或页面错误次数。
-
vserver Linux VServers使用的系统资源。 参见http://linux-vserver.org/。
-
wireless 无线网卡的链路质量。仅限Linux。
-
xencpu XEN虚拟机管理程序CPU统计信息。
-
xmms XMMS播放音乐的比特率和频率。
-
zfs_arc ZFS的"自适应替换缓存"(ARC)统计信息。
-
zone 测量Solaris 10及更高版本下每个容器(zone)的CPU负载百分比。
-
zookeeper 从Zookeeper的MNTR命令读取数据。
- 以下插件可以将输出写入或发送到各种目的地:
-
amqp 将JSON编码的数据发送到支持高级消息队列协议(AMQP)0.9.1的服务器,如RabbitMQ。
-
amqp1 将JSON编码的数据发送到支持高级消息队列协议(AMQP)1.0的服务器,如Qpid Dispatch Router或Apache Artemis Broker。
-
csv 写入逗号分隔值(CSV)文件。这需要大量磁盘空间,但非常便携,几乎可以用任何程序分析。甚至Microsoft的Excel也可以。
-
grpc 使用gRPC框架通过网络发送和接收值。
-
lua 可以使用Lua插件在Lua中实现写入插件。详情请参见collectd-lua(5)。
-
mqtt 发布和订阅MQTT主题。
-
network 将数据发送到远程主机以某种方式保存数据。这对于需要由专用机器保存数据的大型设置很有用。
-
perl 当然,这些值也会传播到用Perl编写的插件,所以你可以轻松地用插件做一些我们不敢想象的奇怪事情;) 参见collectd-perl(5)。
-
python 可以使用python插件在Python中实现写入插件。详情请参见collectd-python(5)。
-
rrdcached 使用RRDtool缓存守护进程(RRDcacheD)输出到轮询数据库(RRD)文件 - 参见
rrdcached(1)
。该守护进程提供了rrdtool
插件所做缓存的通用实现。 -
rrdtool 使用librrd输出到轮询数据库(RRD)文件。参见rrdtool(1)。这可能是此类值最流行的目的地。由于更新RRD文件有点昂贵,这个插件可以缓存对文件的更新,并一次性写入一批更新,这大大减轻了系统负载。
-
snmp_agent 接收并处理来自SNMP主代理的查询,并返回由读取插件收集的数据。仅处理配置文件中指定的OID的请求。为处理SNMP查询,插件从collectd获取数据,并将请求的值从collectd的内部格式转换为SNMP格式。
-
unixsock 可以在需要时从unixsock插件查询值。请阅读collectd-unixsock(5)了解如何做到这一点。
-
write_graphite 使用TCP或UDP将数据发送到Carbon,Graphite的存储层。它可以配置为避免记录发送错误(特别是在使用UDP时很有用)。
-
write_http 使用HTTP POST请求将collectd收集的值发送到Web服务器。传输的数据要么是Exec插件可以理解的格式,要么是JSON格式。
-
write_kafka 将数据发送到Apache Kafka,一个分布式队列。
-
write_log 将数据写入日志。
-
write_mongodb 将数据发送到MongoDB,一个NoSQL数据库。
-
write_prometheus 使用嵌入式HTTP服务器以与Prometheus的collectd_exporter兼容的格式发布值。
-
write_redis 将值发送到Redis键值数据库服务器。
-
write_riemann 将数据发送到Riemann,这是一个流处理和监控系统。
-
write_sensu 通过Sensu客户端本地TCP套接字将数据发送到Sensu,这是一个流处理和监控系统。
-
write_syslog 使用TCP以syslog格式发送数据,其中消息包含人类可读或JSON格式的指标。
-
write_tsdb 将数据发送到OpenTSDB,这是一个可扩展的无主节点、无共享状态的时间序列数据库。
-
如同collectd中的所有功能一样,日志记录也是由插件提供的。以下插件让我们了解系统的运行情况:
-
logfile 将日志消息写入文件或标准输出/标准错误。
-
perl 日志消息也会传播到用Perl编写的插件。 参见collectd-perl(5)。
-
python 可以使用python插件在Python中实现日志插件。 详情请参见collectd-python(5)。
-
syslog 记录到标准UNIX日志机制syslog。
-
log_logstash 以logstash JSON事件格式写入日志消息。
-
-
通知可以由以下插件处理:
-
notify_desktop 根据桌面通知规范向通知守护进程发送桌面通知。要实际显示通知,需要notification-daemon。 参见http://www.galago-project.org/specs/notification/。
-
notify_email 向配置的收件人发送包含通知消息的电子邮件。
-
notify_nagios 将通知作为被动检查结果提交给本地nagios实例。
-
exec 执行程序或脚本来处理通知。 参见collectd-exec(5)。
-
logfile 将通知消息写入文件或标准输出/标准错误。
-
network 将通知发送到远程主机进行处理。
-
perl 通知也会传播到用Perl编写的插件。 参见collectd-perl(5)。
-
python 可以使用python插件在Python中实现通知插件。 详情请参见collectd-python(5)。
-
-
可以使用"过滤链"基础设施以及"匹配"和"目标"来控制值处理。以下插件可用:
-
match_empty_counter 匹配当前为零的计数器值。
-
match_hashed 使用主机名的哈希函数匹配值。
-
match_regex 基于正则表达式按标识符匹配值。
-
match_timediff 匹配具有无效时间戳的值。
-
match_value 根据数据源的值选择值。
-
target_notification 创建并发送通知。
-
target_replace 使用正则表达式替换标识符的部分内容。
-
target_scale 通过任意值缩放(乘以)值。
-
target_set 设置(覆盖)标识符的整个部分。
-
-
其他插件:
-
aggregation 基于模式或正则表达式选择多个值列表,并从中创建新的聚合值列表。
-
threshold 根据配置的阈值检查值,并在值超出范围时创建通知。详情请参见collectd-threshold(5)。
-
uuid 将主机名设置为唯一标识符。这适用于每个客户端可能迁移到另一个物理主机的设置,可能在此过程中经历一次或多次名称更改。
-
-
性能:由于collectd作为守护进程运行,它不会花费太多时间反复启动。除了exec插件外,不会创建其他进程。输出插件(如rrdtool和network插件)中的缓存确保了资源的高效利用。此外,由于collectd是多线程编程的,它能够受益于超线程和多核处理器,并确保当只有一个插件等待IO操作完成时,守护进程不会处于空闲状态。
-
一旦设置完成,几乎不需要任何维护。设置保持尽可能简单,默认值对大多数用户来说应该是可以的。
操作
-
collectd的配置文件可以在
sysconfdir/collectd.conf
中找到。运行collectd -h
可以查看内置默认值列表。有关选项列表和语法描述,请参见collectd.conf(5)
。 -
当加载
csv
或rrdtool
插件时,它们会将值写入文件。这些文件通常位于/var/lib/collectd
下。 -
在使用某些插件时,collectd需要以root用户身份运行,因为只有root才能执行某些操作,如创建用于ping其他主机的ICMP包。collectd不应该以setuid root安装,因为它可能被用来覆盖重要文件!
-
用于生成图表的示例脚本位于源码包的
contrib/
目录中,或者在大多数发行版中位于/usr/share/doc/collectd
附近的某个位置。请注意,这些脚本仅作为你自己实验的起点。其中一些脚本需要RRDs
Perl模块。(在Debian上为librrds-perl
)如果你编写了更复杂的解决方案,请与我们分享。 -
自动创建的RRD文件的RRA取决于给定的
step
和heartbeat
设置。如果更改这些设置,你可能需要重新创建文件,这会丢失所有数据。更改这些值时请注意这一点,并仔细阅读rrdtool(1)手册页。
collectd和chkrootkit
如果你使用dns
插件,chkrootkit(1)
会将collectd
报告为数据包嗅探器(<iface>: PACKET SNIFFER(/usr/sbin/collectd[<pid>])
)。该插件捕获所有53端口上的UDP数据包以分析DNS流量。在这种情况下,collectd是一个合法的嗅探器,这个报告应该被视为误报。但是,你可能想要检查一下这确实是collectd而不是其他非法嗅探器。
先决条件
要从源码编译collectd,你需要:
-
常见工具:C编译器、链接器、预处理器、make等...
collectd使用了一些常见的C99特性,例如复合字面量和混合声明,因此需要兼容C99的编译器。
在Debian和Ubuntu上,"build-essential"包应该能够安装所有必要的工具。
-
POSIX线程(pthread)实现。 由于收集某些统计信息比较慢(网络连接、慢速设备等),collectd是并行化的。使用POSIX线程接口,应该可以在各种平台上找到不同的实现。
-
从Git仓库构建时,需要flex(词法分析器)和bison(语法分析器生成器)。发布的tar包中已包含生成的文件 - 在这种情况下不需要这些包。
-
aerotools-ng(可选) 由
aquaero
插件使用。目前,aerotools-ng
工具包使用的libaquaero5
库不是作为共享对象编译的,也没有安装程序。因此,你需要将collectd的配置脚本指向aerotools-ng
项目的源目录。 https://github.com/lynix/aerotools-ng -
CoreFoundation.framework和IOKit.framework(可选) 用于在Darwin上编译,特别是
apple_sensors
插件。 http://developer.apple.com/corefoundation/ -
CUDA(可选) 由
gpu_nvidia
插件使用 https://developer.nvidia.com/cuda-downloads -
libatasmart(可选) 由
smart
插件使用。 http://git.0pointer.de/?p=libatasmart.git -
libcap(可选)
turbostat
插件可以选择性地构建Linux Capabilities支持,这避免了需要完全权限(即以root身份运行)来读取值。 http://sites.google.com/site/fullycapable/ -
libclntsh(可选) 由
oracle
插件使用。 -
libhiredis(可选) 由
redis
插件使用。请注意,你需要0.10.0或更高版本。 https://github.com/redis/hiredis -
libcurl(可选) 如果你想使用
apache
、ascent
、bind
、curl
、curl_json
、curl_xml
、nginx
或write_http
插件。 http://curl.haxx.se/ -
libdbi(可选) 由
dbi
插件用于连接各种数据库。 http://libdbi.sourceforge.net/ -
libesmtp(可选) 用于
notify_email
插件。 http://www.stafford.uklinux.net/libesmtp/ -
libganglia(可选) 由
gmond
插件用于处理从Ganglia接收的数据。 http://ganglia.info/ -
libgrpc(可选) 由
grpc
插件使用。gRPC需要支持C++11标准的C++编译器。 https://grpc.io/ -
libgcrypt(可选) 由
network
插件用于加密和认证。 http://www.gnupg.org/ -
libgps(可选) 由
gps
插件使用。 http://developer.berlios.de/projects/gpsd/ -
libi2c-dev(可选) 用于
barometer
插件,仅提供用户空间i2c开发所需的i2c-dev.h
头文件。 -
libiptc(可选) 用于查询iptables计数器。 http://netfilter.org/
-
libjansson(可选) 解析JSON数据。这用于
capabilities
和dpdk_telemetry
插件。 http://www.digip.org/jansson/ -
libjevents(可选) jevents库被intel_pmu插件用来访问Linux内核性能接口。 注意:该库应使用-fPIC标志构建,以便正确链接到intel_pmu共享对象。 https://github.com/andikleen/pmu-tools
-
libjvm(可选) 封装Java虚拟机(JVM)的库。该库被java插件用来执行Java字节码。 详细构建说明请参阅docs/BUILD.java.md。 http://openjdk.java.net/(及其他)
-
libldap(可选) 被openldap插件使用。 http://www.openldap.org/
-
liblua(可选) 被lua插件使用。目前支持Lua 5.1及更高版本。 https://www.lua.org/
-
libmemcached(可选) 被memcachec插件用于连接memcache守护进程。 http://tangent.org/552/libmemcached.html
-
libmicrohttpd(可选) 被write_prometheus插件用于运行http守护进程。 http://www.gnu.org/software/libmicrohttpd/
-
libmnl(可选) 被netlink插件使用。 http://www.netfilter.org/projects/libmnl/
-
libmodbus(可选) 被modbus插件用于与Modbus/TCP设备通信。modbus插件适用于库的2.0.3版本 - 由于频繁的API变更,其他版本可能无法正常编译。 http://www.libmodbus.org/
-
libmysqlclient(可选) 毫无疑问被mysql插件使用。 http://dev.mysql.com/
-
libnetapp(可选) netapp插件所需。 此库是NetApp发布的"Manage ONTAP SDK"的一部分。
-
libnetsnmp(可选) 用于snmp和snmp_agent插件。 http://www.net-snmp.org/
-
libnetsnmpagent(可选) snmp_agent插件所需。 http://www.net-snmp.org/
-
libnotify(可选) 用于notify_desktop插件。 http://www.galago-project.org/
-
libopenipmi(可选) 被ipmi插件用来探测IPMI设备。 http://openipmi.sourceforge.net/
-
liboping(可选) 被ping插件用来发送和接收ICMP数据包。 http://octo.it/liboping/
-
libowcapi(可选) 被onewire插件用来从单总线传感器(或owserver(1)守护进程)读取值。 http://www.owfs.org/
-
libpcap(可选) 被dns插件用来捕获数据包。 http://www.tcpdump.org/
-
libperfstat(可选) 被各种插件用来在AIX下收集统计信息。
-
libperl(可选) 显然被perl插件使用。该库必须以ithread支持编译(在Perl 5.6.0中引入)。 http://www.perl.org/
-
libpmwapi(可选) 被dcpmm插件使用。 库GitHub:https://github.com/intel/intel-pmwatch 按照dcpmm插件提到的pmwatch构建说明进行操作,并使用安装路径来解决此处的依赖。
-
libpq(可选) 被postgresql插件使用的PostgreSQL C客户端库。 http://www.postgresql.org/
-
libpqos(可选) 被intel_rdt插件使用的Intel(R) Resource Director Technology的PQoS库。 https://github.com/01org/intel-cmt-cat
-
libprotobuf, protoc 3.0+(可选) 被grpc插件用来生成服务存根和处理collectd基于protobuf的网络协议的网络数据包的代码。 https://developers.google.com/protocol-buffers/
-
libprotobuf-c, protoc-c(可选) 被pinba插件用来为Pinba PHP扩展发送的网络数据包生成解析器。 http://code.google.com/p/protobuf-c/
-
libpython(可选) 被python插件使用。目前支持Python 2.6及更高版本和Python 3。 http://www.python.org/
-
libqpid-proton(可选) 被amqp1插件用于AMQP 1.0连接,例如连接到Qdrouterd。 http://qpid.apache.org/
-
librabbitmq(可选;也称为"rabbitmq-c") 被amqp插件用于AMQP 0.9.1连接,例如连接到RabbitMQ。 http://hg.rabbitmq.com/rabbitmq-c/
-
librdkafka(可选;也称为"rdkafka") 被write_kafka插件用于生成消息并将其发送到Kafka代理。 https://github.com/edenhill/librdkafka
-
librouteros(可选) 被routeros插件用于连接运行RouterOS的设备。 http://octo.it/librouteros/
-
librrd(可选) 被rrdtool和rrdcached插件使用。后者需要RRDtool客户端支持,这在RRDtool 1.3版本之后添加。1.0、1.2和1.3版本已知可与rrdtool插件一起使用。 http://oss.oetiker.ch/rrdtool/
-
librt, libsocket, libkstat, libdevinfo(可选) 提供系统功能的各种标准Solaris库。 http://developers.sun.com/solaris/
-
libsensors(可选) 用于读取lm_sensors,参见sensors插件。 http://www.lm-sensors.org/
-
libsigrok(可选) 被sigrok插件使用。此外,libsigrok依赖于glib、libzip,以及可选地(取决于启用的驱动程序)依赖于libusb、libftdi和libudev。
-
libslurm(可选) 被slurm插件使用。 https://slurm.schedmd.com/
-
libsqlite3(可选) 被ras插件使用。 https://sqlite.org/
-
libstatgrab(可选) 被各种插件用来在Linux和/或Solaris以外的系统上收集统计信息。 http://www.i-scream.org/libstatgrab/
-
libtokyotyrant(可选) 被tokyotyrant插件使用。 http://1978th.net/tokyotyrant/
-
libupsclient/nut(可选) 用于nut插件,该插件查询nut的upsd。 http://networkupstools.org/
-
libvirt(可选) 收集虚拟机的统计信息。 http://libvirt.org/
-
libxml2(可选) 解析XML数据。ascent、bind、curl_xml和virt插件需要此库。 http://xmlsoft.org/
-
libxen(可选) 被xencpu插件使用。 http://xenbits.xensource.com/
-
libxmms(可选) http://www.xmms.org/
-
libyajl(可选) 解析JSON数据。ceph、curl_json、ovs_events、ovs_stats和log_logstash插件需要此库。 http://github.com/lloyd/yajl
-
libvarnish(可选) 从Varnish实例获取统计信息。varnish插件需要此库。 http://varnish-cache.org
-
riemann-c-client(可选) 用于write_riemann插件。 https://github.com/algernon/riemann-c-client
配置 / 编译 / 安装
要使用默认设置配置、构建和安装collectd,运行./configure && make && make install
。有关配置选项的完整列表及其描述,运行./configure --help
。
默认情况下,配置脚本将检查所有构建依赖项,并禁用所有无法满足要求的插件(其他插件将被启用)。要启用插件,请安装缺失的依赖项(参见上面的前提条件部分)并重新运行configure
。如果指定--enable-<plugin>
配置选项,脚本将在无法满足指定插件的依赖关系时失败。在这种情况下,您可以使用--enable-<plugin>=force
配置选项强制构建插件。但这很可能会失败,除非您在一个非常不寻常的设置中工作,并且真的知道自己在做什么。如果指定--disable-<plugin>
配置选项,则不会构建该插件。如果指定--enable-all-plugins
或--disable-all-plugins
配置选项,默认情况下将启用或禁用所有插件。显式启用或禁用插件会覆盖指定插件的默认设置。这些选项主要面向软件包维护人员,不应在日常情况下使用。
默认情况下,collectd 将安装到 /opt/collectd
。您可以通过指定 --prefix
配置选项来调整此设置 - 详见 INSTALL。如果您在 make install
时传递 DESTDIR=<路径>
,<路径>
将被添加到所有安装目录的前缀。这在创建 collectd 软件包时可能会有用。
生成配置脚本
Collectd 附带了一个 build.sh
脚本来生成发布版本中的 configure
脚本。
要生成 configure
脚本,您需要以下依赖项:
- autoconf
- automake
- flex
- bison
- libtool
- pkg-config
build.sh
脚本不需要任何参数。
在 Windows 上构建
Collectd 可以使用 Cygwin 在 Windows 上构建,结果是一个可以在 Windows 上原生运行的二进制文件。也就是说,Cygwin 只需要用于构建,而不是运行 collectd。
您需要安装以下 Cygwin 软件包:
- automake
- bison
- flex
- git
- libtool
- make
- mingw64-x86_64-dlfcn
- mingw64-x86_64-gcc-core
- mingw64-x86_64-zlib
- pkg-config
要构建,只需在 Cygwin 终端中运行 build.sh
脚本。默认情况下,它会安装到 "C:/Program Files/collectd"。您可以通过设置 INSTALL_DIR 变量来更改位置:
$ export INSTALL_DIR="C:/some/other/install/directory" $ ./build.sh
或者:
$ INSTALL_DIR="C:/some/other/install/directory" ./build.sh
交叉编译
为了正确编译,collectd 需要能够将静态变量初始化为 NAN(非数字)。一些 C 库,特别是 GNU libc,在这方面存在问题。
幸运的是,使用 GCC 可以解决这个问题:可以将 NAN 定义为 (0.0 / 0.0),将 isnan
定义为 f != f
。然而,为了测试这个"实现",配置脚本需要编译并运行一个简短的测试程序。显然,在进行交叉编译时运行测试程序是具有挑战性的。
如果您遇到这个问题,可以使用 --with-nan-emulation
配置选项强制使用这种实现。我们不能保证编译后的二进制文件实际上会按预期运行,但由于 NAN 可能永远不会传递给 libm,您很有可能会幸运成功。
同样,collectd 需要知道内存中 double 类型的布局,以便在不同架构上创建统一的网络数据包。为此,它需要知道如何将 double 类型转换为 x86 使用的内存布局。配置脚本试图通过编译和运行一些小的测试程序来确定这一点。在交叉编译时,这显然是不可能的。您可以使用 --with-fp-layout
选项告诉配置脚本假设使用哪种转换方法。有效参数为:
* `nothing` (12345678 -> 12345678)
* `endianflip` (12345678 -> 87654321)
* `intswap` (12345678 -> 56781234)
联系方式
请使用 GitHub 报告错误和提交拉取请求: https://github.com/collectd/collectd/。 有关详细信息,请参阅 CONTRIBUTING.md。
如有问题、开发信息以及基本上所有其他事项,请发送电子邮件至 collectd 的邮件列表 (list at collectd.org)。
如需实时讨论和更个人化的联系,请访问我们的 IRC 频道,我们在 freenode 上的 #collectd 频道。
作者
Florian octo Forster (octo at collectd.org), Sebastian tokkee Harl (sh at tokkee.org), 以及许多其他作者和贡献者。