Centos7.9版本安装collectd并开启写入rrd文件功能

在这里插入图片描述

文章目录

  • 一、背景介绍
  • 二、为什么用这个
  • 三、安装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安装

  1. 先搜索collectd镜像,结果如图。
docker search collectd

在这里插入图片描述
2. 从dockerHub上看collectd/ci镜像应该是咱们需要的,下载它。

docker pull collectd/ci
  1. 查看镜像是否已经下载好,执行命令,结果如图。
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

  1. 安装collectd和epel:
yum -y install epel*
yum -y install collectd
  1. 开启服务并设置开机启动
systemctl start collectd
systemctl enable collectd
  1. 设置配置文件,默认的配置文件/etc/collectd.conf,收集的数据通过不同的收集插件定义,默认collectd收集的数据有。
LoadPlugin cpu
LoadPlugin interface
LoadPlugin load
LoadPlugin memory

无注释表示启用了该插件。
#表示该插件开发完毕,可以使用(需要下载相应的插件包,然后取消注释)
##表示该插件还未完成,无法使用。
默认收集间隔是 10s一次
每个插件都有单独的配置,不设置就使用插件的默认配置。

  1. 设置将日志写入单独的日志文件,编辑配置文件。
vim /etc/collectd.conf 
#LoadPlugin syslog
LoadPlugin logfile

<Plugin logfile>
        LogLevel info
        File "/var/log/collectd.log"
        Timestamp true
        PrintSeverity false
</Plugin>
  1. 重启collectd
systemctl restart collectd
  1. 查看日志
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无用。

设置将数据写入日志文件

  1. 一般是不会写入日志文件当作write pulgin的。只是用来测试数据收集是否成功。编辑配置文件。
vim /etc/collectd.conf 
LoadPlugin write_log
  1. 重启collectd
systemctl restart collectd
  1. 查看日志
[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是干啥用的,如图,所以有必要开启

在这里插入图片描述

  1. 我试过执行命令: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
  1. 安装rrdtool包
sudo yum install rrdtool-1.4.8-9.el7.x86_64.rpm
  1. 再执行安装collectd-rrdtool
yum -y install collectd-rrdtool
  1. 验证安装是否成功,如图就代表安装成功了
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>
  1. 重启服务
systemctl restart collectd
  1. rrd数据保存位置/var/lib/collectd/rrd,查看是否有写入rrd文件,发现确实写入了,只不过文件是二进制的编译乱码而已。

在这里插入图片描述

到这里就说明Collectd服务已经开启了,且能写入rrd文件了,这个rrd文件就是供其他软件查询使用的,比如grafana、influxdb、Prometheus等等使用。

补充:本来想尝试安装collectd-web插件,也就是可视化的collectd的,结果碰到各种安装问题,比如缺少依赖模块等等,导致最终安装不成功,所以就没写。官网的这个图其实就是可视化插件展示的效果。
在这里插入图片描述