通过收集数据并进行可视化处理,我们能够对服务器与项目拥有更为深入的了解。
在上一篇教程我们探讨了如何安装并配置Graphite(http://www.linuxdiyf.com/linux/29287.html),从而对服务器上的数据进行可视化。然而,我们还不具备收集数据并将其发送至Graphite的方案。
在本教程中,我们将探讨如何安装并使用collectd,一套负责收集并整理服务器与运行中服务相关指标的系统。
安装Collectd
首先安装collectd。我们可以从默认库中获取collectd。
更新本地软件包目录而后安装:
sudo apt-get update
sudo apt-get install collectd collectd-utils
其将安装此守护程序与一套帮助控制界面。不过我们还需要配置才能加以使用。
配置Collectd
以root权限打开collectd配置文件:
sudo nano /etc/collectd/collectd.conf
这里我们先要设置所在设备的主机名称。Collectd可用于向远程Graphite服务器发送信息,但本示例中二者将处于同一设备:
Hostname "graph_host"
如果大家已经配置了域名,则可跳过此步骤,直接提供FQDNLookup即可。
大家可能注意到了Interval这项参数,其代表collectd在本主机上查询数据前的等待时间间隔。其默认为10秒,不过我们需要将其与Graphite追踪频率相匹配才能更为可靠地实现数据记录。
下面我们为collectd指定需要收集信息的服务。具体指定依靠插件实现。大部分插件可用于从系统中读取信息,但也有部分插件用于定义信息的发送去向。Graphite正是其中的写入插件之一。
在本示例中,我们将使用以下插件。大家可以注释掉全部其它插件,或者随意尝试以体会其具体作用:
LoadPlugin apache
LoadPlugin cpu
LoadPlugin df
LoadPlugin entropy
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
LoadPlugin processes
LoadPlugin rrdtool
LoadPlugin users
LoadPlugin write_graphite
其中部分插件需要配置,而有些即可开箱即用。
在此文件中,我们推进至各插件的配置部分。我们需要针对各插件定义一个“block”作为配置单元。
在本示例内,我们启用Apache插件,因为我们安装了Apache以支持Graphite。我们可以利用以下内容轻松实现Apache插件配置:
<Plugin apache>
<Instance "Graphite">
URL "http://domain_name_or_IP/server-status?auto"
Server "apache"
</Instance>
</Plugin>
在生产环境中,大家可能希望将服务器状态信息保留在验证层之后。要实现这一目标,大家可以查看该文件对应部分中的注释代码以了解起效方式。出于演示需要,这里我们只使用未经验证的开放设置。
我们为Apache创建server-status页面,并在这里显示全部必要信息。
在负责告知如何使用磁盘资源的df插件中,我们可以使用以下配置:
<Plugin df>
Device "/dev/vda"
MountPoint "/"
FSType "ext3"
</Plugin>
大家应当将该设备指定至系统内驱动器的设备名称,此名称可通过以下命令在终端中找到:
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda 61796348 1766820 56867416 4% /
none 4 0 4 0% /sys/fs/cgroup
udev 2013364 12 2013352 1% /dev
tmpfs 404836 340 404496 1% /run
none 5120 0 5120 0% /run/lock
none 2024168 0 2024168 0% /run/shm
none 102400 0 102400 0% /run/user
选择希望监控的网络接口:
<Plugin interface>
Interface "eth0"
IgnoreSelected false
</Plugin>
最后,让我们看看Graphite插件。其负责告知collectd如何接入我们的Graphite实例:
<Plugin write_graphite>
<Node "graphing">
Host "localhost"
Port "2003"
Protocol "tcp"
LogSendErrors true
Prefix "collectd."
StoreRates true
AlwaysAppendDS false
EscapeCharacter "_"
</Node>
</Plugin>
这样我们的守护程序就了解了如何接入Carbon以传递其数据。我们要求其使用本地计算机的端口2003,Carbon正是利用此端口监听TCP连接。
接下来,我们告知其使用协议向Carbon传递数据,将错误信息记录下来而后为数据设置前缀。由于我们以.作为值结尾,因此全部此主机上的collectd状态都将被保存在“collectd”目录当中。
附加数据源一行在启用后,负责将主机名称附加至指标当中。而Escape character检测其中带有.的特定值,避免Carbon将其拆分至多个目录。
完成后保存并退出。
配置Apache以报告状态
在我们的配置文件中,我们启用Apache状态追踪。我们还需要配置Apache以允许此种操作。
在Apache虚拟主机文件中,我们可以添加位置块以告知Apache将状态报告至哪里。
打开该文件:
sudo nano /etc/apache2/sites-available/apache2-graphite.conf
在“content”位置部分下,我们添加新的部分,这样Apache就会将服务器状态显示在/server-status页面当中:
Alias /content/ /usr/share/graphite-web/static/
<Location "/content/">
SetHandler None
</Location>
<Location "/server-status">
SetHandler server-status
Require all granted
</Location>
ErrorLog ${APACHE_LOG_DIR}/graphite-web_error.log
完成后保存并退出。
现在重载Apache以访问新状态信息:
sudo service apache2 reload
在浏览器中访问/server-status以确保一切正常起效:
http://domain_name_or_IP/server-status
这时显示界面应如下所示:
设置Storage Schema与聚合方式
现在我们的collectd已经能够收集服务的状态信息,接下来调整Graphite以正确处理接收到的数据。
首先创建存储模式定义。打开storage schema配置文件:
sudo nano /etc/carbon/storage-schemas.conf
在其中,我们需要添加定义以指定信息的保留时长,以及如何分级设定数据细节程度。
我们还将告知Graphite每十秒存储一次当天collectd信息,每一分钟存储一次近七天信息,每十分钟存储一次今年信息。
我们可以使用以下行添加上述策略。请注意,将其添加至default策略之上,否则系统会优先执行默认设置:
[collectd]
pattern = ^collectd.*
retentions = 10s:1d,1m:7d,10m:1y
完成后保存并退出。
重载各服务
现在collectd配置完成,而Graphite也知晓了如何处理其数据,下面重载各服务。
首先重载Carbon服务。推荐大家先使用stop命令,隔几秒后再使用start命令。相较于直接restart,这能确保数据得到彻底刷新:
sudo service carbon-cache stop ## wait a few seconds here
sudo service carbon-cache start
在Carbon服务重新上线后,重载collectd。虽然该服务目前可能尚未运行,但手动重载能够确保其正确处理数据:
sudo service collectd stop
sudo service collectd start
此后再访问域名,大家会看到新的collectd信息树:
总结
我们的collectd配置到此完成,各状态也得到了正确记录!
我们也可以配置或者编写其它插件满足特定需求。其它运行有collectd的服务器也能够向我们的Graphite服务器发送信息。Collectd的主要作用就是收集来自常规服务与设备的状态信息。