collectd 是 system statistics collection daemon,會定時由多個資料來源收集 metrics 資料,完全由 C 語言編寫,故性能高且移植性好,它也能運作在沒有腳本語言支持或者 cron daemon 的 OS 上,例如嵌入式系統,架構上除了核心程式,其他的部分,包含資料 input/output,發送通知,Logging 等等,都是以 plugin 方式處理。
collectd 通常是用來收集硬體的相關資訊,例如 CPU loading,記憶體及網路使用狀況等等,然後透過 Plugin 寫入 graphite。
安裝
collectd 是在 EPEL repository 中,可直接用 yum 安裝。
yum install -y epel-release
yum install -y collectd
systemctl enable collectd
systemctl start collectd
設定
collectd 主要設定檔在 /etc/collectd.conf,最後一行是直接 Include "/etc/collectd.d"
include 一個目錄裡面的所有設定檔。所有支援的 plugin 是以 so 形式放在 /usr/lib64/collectd 這個目錄中。
以下是要修改的 collecd.conf 設定檔內容
vi /etc/collectd.conf
# 指定主機名稱,也可以寫成IP
Hostname "testserver"
# 是否允許以 DNS 查詢主機名稱,如果 DNS 可能有錯誤,建議不要開啟
FQDNLookup false
# 各種文件、目錄的設置
#BaseDir "/var/lib/collectd"
#PIDFile "/var/run/collectd.pid"
#PluginDir "/usr/lib64/collectd"
#TypesDB "/usr/share/collectd/types.db"
# 設置為true時,可以根據 <Plugin XXX> 自動載入 plugin,而不需要 LoadPlugin
#AutoLoadPlugin false
# 是否同時上傳 collectd 自己的狀態#CollectInternalStats false
# global 的資料收集時間間隔,單位是秒,可以在 plugin 設定中進行覆寫
Interval 1
MaxReadInterval 180
# 單位不是秒,而是次數,實際的時間是timeout*interval
Timeout 2
# 用於配置讀寫線程數
#WriteThreads 5
#ReadThreads 5
# 配置緩存的上下限
WriteQueueLimitLow 8000
WriteQueueLimitHigh 12000
# 建立一個Unix Socket用在命令發送,狀態查看等
LoadPlugin unixsock
<Plugin unixsock>
SocketFile "/var/run/collectd-unixsock"
SocketGroup "collectd"
SocketPerms "0660"
DeleteSocket true # 啟動時如果存在 sock,是否嘗試刪除
</Plugin>
# 設置日誌文件,儲存到文件中,可以通過logrotate管理
LoadPlugin logfile
<Plugin logfile>
LogLevel info
# File STDOUT
File "/var/log/collectd/collectd.log" # 也可以設定為 STDOUT
Timestamp true
PrintSeverity false
</Plugin>
# 收集 CPU 資訊
LoadPlugin cpu
# 收集系統 Loading 資訊
LoadPlugin load
# 收集記憶體資訊
LoadPlugin memory
# 收集網路 interface 資料
LoadPlugin interface
<Plugin interface>
Interface "eth0"
IgnoreSelected false
ReportInactive true
UniqueName false
</Plugin>
# 將資料寫入 graphite
# https://collectd.org/wiki/index.php/Plugin:Write_Graphite
LoadPlugin write_graphite
<Plugin write_graphite>
<Node "graphing">
Host "localhost"
Port "2003"
Protocol "tcp"
ReconnectInterval 0
LogSendErrors true
Prefix "collectd."
# Postfix "collectd"
StoreRates true
AlwaysAppendDS false
EscapeCharacter "_"
SeparateInstances false
PreserveSeparator false
DropDuplicateFields false
</Node>
</Plugin>
# disk 資訊
# https://collectd.org/wiki/index.php/Plugin:DF
LoadPlugin df
<Plugin df>
# Device "/dev/hda1"
# Device "192.168.0.2:/mnt/nfs"
MountPoint "/"
MountPoint "/home"
# FSType "ext3"
# IgnoreSelected false
# ReportByDevice false
# ReportInodes false
# ValuesAbsolute true
# ValuesPercentage false
</Plugin>
要建立 log 的目錄
mkdir /var/log/collectd
因應 collectd 資料,要修改 graphite 的 Carbon 設定,要注意 collectd 的 pattern 要放在 .* 的前面
vi /opt/graphite/conf/storage-schemas.conf
[carbon]
pattern = ^carbon\.
retentions = 60:90d
[collectd]
pattern = ^collectd.*
retentions = 10s:1d,30s:7d,1m:30d,15m:5y
[default_1min_for_1day]
pattern = .*
retentions = 60s:1d
啟動
重新啟動 collectd, graphite
systemctl restart collectd
systemctl restart carbon
systemctl restart graphite
結果
graphite 收到的 collectd metrics 資料為
collectd.testserver.cpu-0.cpu-XXX
collectd.testserver.df-root.df_complex-free
collectd.testserver.df-root.df_complex-reserved
collectd.testserver.df-root.df_complex-used
collectd.testserver.interface-eth0.if_dropped.rx
collectd.testserver.interface-eth0.if_dropped.tx
collectd.testserver.interface-eth0.if_errors.rx
collectd.testserver.interface-eth0.if_errors.tx
collectd.testserver.interface-eth0.if_octets.rx
collectd.testserver.interface-eth0.if_octets.tx
collectd.testserver.interface-eth0.if_packets.rx
collectd.testserver.interface-eth0.if_packets.tx
collectd.testserver.load.load.longterm
collectd.testserver.load.load.midterm
collectd.testserver.load.load.shortterm
collectd.testserver.memory.memory-buffered
collectd.testserver.memory.memory-cached
collectd.testserver.memory.memory-free
collectd.testserver.memory.memory-slab_recl
collectd.testserver.memory.memory-slab_unrecl
collectd.testserver.memory.memory-used
References
StatsD vs collectd vs fluentd and Other Daemons You Should Know 2016/8
沒有留言:
張貼留言