文章目录
- 一、背景介绍
- 二、为什么用这个
- 三、安装Collectd
- 3.1 尝试docker安装
- 3.2尝试执行linux命令一步一步安装
- 安装collectd
- 设置将数据写入日志文件
- 设置将数据写入rrd文件。
一、背景介绍
Collectd官网:https://collectd.org/
Collectd
是一款开源的系统统计守护进程,用于收集、处理和存储各种系统性能指标。它可以在多个操作系统上运行,并且支持许多不同类型的插件来收集各种数据。
Collectd的主要功能包括:
数据收集
:Collectd可以定期地从系统和应用程序中收集各种性能指标,如CPU使用率、内存使用情况、磁盘IO、网络流量等。
插件系统
:Collectd提供了一个可插拔的架构,可以通过各种插件来收集不同类型的数据。这些插件可以用于监控硬件、操作系统和各种应用程序。
数据处理和存储
:Collectd可以对收集到的数据进行处理和转换,如数据聚合、过滤和格式化。它还可以将数据存储到各种后端,如RRD文件、数据库或远程服务器。
监控和告警
:Collectd可以通过与其他监控工具(如Grafana、Prometheus等)的集成来实现实时监控和告警功能。它可以根据预定义的规则触发警报,以便及时采取措施解决问题。
可视化
:Collectd可以与各种可视化工具集成,以创建漂亮的图表和仪表板,帮助用户更直观地了解系统性能和趋势。
总的来说,Collectd是一个强大的系统监控工具,可以提供实时、准确的系统性能指标,并帮助管理员及时发现和解决潜在问题。
它在大型分布式环境和云计算环境中广泛应用,并被认为是一种可靠的解决方案。
二、为什么用这个
需求
:我们项目向监控操作系统的CPU、内存、网络、磁盘等到信息。
我之前用过Sigar,一个jar包,引入就可以直接用,之所以不用它原因是,它于2010年停止维护了,所以显得有点老,就没使用它,于是做了Collectd调研,想用它,但是前提是先安装环境。
三、安装Collectd
3.1 尝试docker安装
先搜索collectd镜像,结果如图。
docker search collectd
2. 从dockerHub上看collectd/ci镜像应该是咱们需要的,下载它。
docker pull collectd/ci
查看镜像是否已经下载好,执行命令,结果如图。
docker images
4. 执行命令运行它
:
docker run --name my-collectd -v /var/collectd/collectd.conf:/etc/collectd/collectd.conf -v /var/collectd/rrd:/var/lib/collectd/rrd -d collectd/ci:fedora38_x86_64
5.结果是:显示启动就停止了,我尝试了好几次发现都不行,不知道为啥,所以只能放弃该方式安装部署了。
3.2尝试执行linux命令一步一步安装
我是参照的这个博主的博客进行尝试安装的 → :CentOS7下collectd简单安装使用
安装collectd
安装collectd和epel:
yum -y install epel*
yum -y install collectd
开启服务并设置开机启动
systemctl start collectd
systemctl enable collectd
设置配置文件,默认的配置文件/etc/collectd.conf,收集的数据通过不同的收集插件定义,默认collectd收集的数据有。
LoadPlugin cpu
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
无注释表示启用了该插件。
#表示该插件开发完毕,可以使用(需要下载相应的插件包,然后取消注释)
##表示该插件还未完成,无法使用。
默认收集间隔是 10s一次
每个插件都有单独的配置,不设置就使用插件的默认配置。
设置将日志写入单独的日志文件,编辑配置文件。
vim /etc/collectd.conf
#LoadPlugin syslog
LoadPlugin logfile
<Plugin logfile>
LogLevel info
File "/var/log/collectd.log"
Timestamp true
PrintSeverity false
</Plugin>
重启collectd
systemctl restart collectd
查看日志
tail -f /var/log/collectd.log
[root@client2 ~]# tail -f /var/log/collectd.log
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:24 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:34 client2 collectd[10794]: Filter subsystem: Built-in target `write': Dispatching value to all write plugins failed with status 2 (ENOENT). Most likely this means you didn't load any write plugins.
Jan 4 14:24:34 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:34 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:34 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:34 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:34 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:34 client2 collectd[10794]: Available write targets: [none]
Jan 4 14:24:34 client2 collectd[10794]: Available write targets: [none]
注意
:collectd必须要设置一个write pulgin 写插件,可以将收集的数据写入日志、rdd文件、server端、influxdb数据库。总之必须设置一个,不然collectd无用。
设置将数据写入日志文件
一般是不会写入日志文件当作write pulgin的。只是用来测试数据收集是否成功。编辑配置文件。
vim /etc/collectd.conf
LoadPlugin write_log
重启collectd
systemctl restart collectd
查看日志
[root@server ~]# tail -f /var/log/collectd.log
[2021-01-04 14:39:37] write_log values:
server.memory.memory-free 248778752 1609742377
[2021-01-04 14:39:37] write_log values:
server.memory.memory-slab_unrecl 41025536 1609742377
[2021-01-04 14:39:37] write_log values:
server.memory.memory-slab_recl 39510016 1609742377
[2021-01-04 14:39:47] write_log values:
server.cpu-0.cpu-user 2452 1609742387
[2021-01-04 14:39:47] write_log values:
server.cpu-0.cpu-system 2868 1609742387
[2021-01-04 14:39:47] write_log values:
server.cpu-0.cpu-wait 2547 1609742387
[2021-01-04 14:39:47] write_log values:
server.cpu-0.cpu-nice 153 1609742387
[2021-01-04 14:39:47] write_log values:
server.cpu-0.cpu-interrupt 0 1609742387
[2021-01-04 14:39:47] write_log values:
server.cpu-0.cpu-softirq 77 1609742387
[2021-01-04 14:39:47] write_log values:
server.cpu-0.cpu-steal 0 1609742387
[2021-01-04 14:39:47] write_log values:
server.cpu-0.cpu-idle 241882 1609742387
[2021-01-04 14:39:47] write_log values:
server.interface-lo.if_packets.rx 0 1609742387
server.interface-lo.if_packets.tx 0 1609742387
可以看到数据成功写入日志文件了。
注意:到这里之前基本很多人都能按照博客执行成功,而后面开始安装rrd插件开始就会出现各种问题了。
设置将数据写入rrd文件。
collectd将数据以rrd文件形式保存,需要相应的rrdtool包。除了基本的几个,其余的collectd插件基本都需要单独安装插件包才能使用。
先介绍下rrd是干啥用的,如图,所以有必要开启
我试过执行命令:yum -y install collectd-rrdtool,这一步我就不成功,报错如图
[root@repository var]# yum -y install collectd-rrdtool.x86_64
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* epel: mirrors.tuna.tsinghua.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 collectd-rrdtool.x86_64.0.5.8.1-1.el7 将被 安装
--> 正在处理依赖关系 librrd_th.so.4()(64bit),它被软件包 collectd-rrdtool-5.8.1-1.el7.x86_64 需要
--> 解决依赖关系完成
错误:软件包:collectd-rrdtool-5.8.1-1.el7.x86_64 (epel)
需要:librrd_th.so.4()(64bit)
您可以尝试添加 --skip-broken 选项来解决该问题
** 发现 21 个已存在的 RPM 数据库问题, 'yum check' 输出如下:
7:device-mapper-1.02.170-6.el7.x86_64 是 7:device-mapper-1.02.158-2.el7.x86_64 的副本
7:device-mapper-event-1.02.170-6.el7.x86_64 是 7:device-mapper-event-1.02.158-2.el7.x86_64 的副本
7:device-mapper-event-libs-1.02.170-6.el7.x86_64 是 7:device-mapper-event-libs-1.02.158-2.el7.x86_64 的副本
7:device-mapper-libs-1.02.170-6.el7.x86_64 是 7:device-mapper-libs-1.02.158-2.el7.x86_64 的副本
device-mapper-persistent-data-0.8.5-3.el7.x86_64 是 device-mapper-persistent-data-0.8.5-1.el7.x86_64 的副本
ipvsadm-1.27-8.el7.x86_64 是 ipvsadm-1.27-7.el7.x86_64 的副本
kubeadm-1.15.3-0.x86_64 有缺少的需求 kubectl >= ('0', '1.13.0', None)
libseccomp-2.4.3-alt1.x86_64 是 libseccomp-2.3.1-4.el7.x86_64 的副本
libselinux-2.5-15.el7.x86_64 是 libselinux-2.5-14.1.el7.x86_64 的副本
libselinux-python-2.5-15.el7.x86_64 是 libselinux-python-2.5-14.1.el7.x86_64 的副本
libselinux-utils-2.5-15.el7.x86_64 是 libselinux-utils-2.5-14.1.el7.x86_64 的副本
7:lvm2-2.02.187-6.el7.x86_64 是 7:lvm2-2.02.185-2.el7.x86_64 的副本
7:lvm2-libs-2.02.187-6.el7.x86_64 是 7:lvm2-libs-2.02.185-2.el7.x86_64 的副本
ntp-4.2.6p5-29.el7.centos.2.x86_64 是 ntp-4.2.6p5-29.el7.centos.x86_64 的副本
ntpdate-4.2.6p5-29.el7.centos.2.x86_64 是 ntpdate-4.2.6p5-29.el7.centos.x86_64 的副本
policycoreutils-2.5-34.el7.x86_64 是 policycoreutils-2.5-33.el7.x86_64 的副本
policycoreutils-python-2.5-34.el7.x86_64 是 policycoreutils-python-2.5-33.el7.x86_64 的副本
selinux-policy-3.13.1-268.el7.noarch 是 selinux-policy-3.13.1-252.el7.1.noarch 的副本
selinux-policy-targeted-3.13.1-268.el7.noarch 是 selinux-policy-targeted-3.13.1-252.el7.1.noarch 的副本
sysstat-10.1.5-19.el7.x86_64 是 sysstat-10.1.5-18.el7.x86_64 的副本
yum-utils-1.1.31-54.el7_8.noarch 是 yum-utils-1.1.31-52.el7.noarch 的副本
报错显示:错误:软件包:collectd-rrdtool-5.8.1-1.el7.x86_64 (epel)需要:librrd_th.so.4()(64bit),然后查询这个“librrd_th.so.4()(64bit)”是啥,如下图:
2. 于是我尝试执行:sudo yum install rrdtool 和 sudo yum install rrdtool-devel,报错如图
[root@repository var]# yum install rrdtool-devel
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* epel: mirrors.tuna.tsinghua.edu.cn
没有可用软件包 rrdtool-devel。
错误:无须任何处理
错误显示
:没有rrdtool包或者rrdtool-devel包,说明自己软库中压根没有叫这个名字的包
3. 因此不能采用yum方式安装rrdtool,只能考虑其他方式,比如自己手动下载包安装方式,如下
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/rrdtool-1.4.8-9.el7.x86_64.rpm
安装rrdtool包
sudo yum install rrdtool-1.4.8-9.el7.x86_64.rpm
再执行安装collectd-rrdtool
yum -y install collectd-rrdtool
验证安装是否成功,如图就代表安装成功了
rrdtool --version
7. 修改配置文件,插件rrdtool设置使用默认的即可
vim /etc/collectd.conf
LoadPlugin rrdtool
#<Plugin rrdtool>
# DataDir "/var/lib/collectd/rrd"
# CreateFilesAsync false
# CacheTimeout 120
# CacheFlush 900
# WritesPerSecond 50
#</Plugin>
重启服务
systemctl restart collectd
rrd数据保存位置/var/lib/collectd/rrd,查看是否有写入rrd文件,发现确实写入了,只不过文件是二进制的编译乱码而已。
到这里就说明Collectd服务已经开启了,且能写入rrd文件了,这个rrd文件就是供其他软件查询使用的,比如grafana、influxdb、Prometheus等等使用。
补充:本来想尝试安装collectd-web插件,也就是可视化的collectd的,结果碰到各种安装问题,比如缺少依赖模块等等,导致最终安装不成功,所以就没写。官网的这个图其实就是可视化插件展示的效果。