Недавно я писал статью о настройке и установке Graphite+Grafana, теперь я расскажу как установить и настроить Collectd для сбора данных о состоянии сервера, отправки их в Grapfite и отображение в Grafana.
Предисловие
Collectd — система сбора, хранения и отправки метрик о состоянии машины, на которой он запущен.
Он имеет множество плагинов "из коробки" и очень гибок в настройке.
И так, приступим.
Установка Collectd
Установка, как и в большинстве случаев, проста:
sudo apt-get install collectd collectd-utilsБазовая настройка Collectd
Для начала нам надо остановить сервис collectd.
sudo service collectd stopЯ предлагаю сделать бэкап стандартного файла конфигурации и написать свой.
sudo mv /etc/collectd/collectd.conf /etc/collectd/collectd.conf.bak
sudo touch /etc/collectd/collectd.confВсе настройки находятся в файле /etc/collectd/collectd.conf, его мы и будем редактировать.
Hostname "graph_host" # Вводим сюда хост (или IP вашего сервера Grafana
# Если Вы вводите хост, добавляем следующую строку
FQDNLookup trueНа этом базовая настройка завершена.
Настройка плагинов
У collectd множество встроенных плагинов.
Рассмотрим самые необходимые.
Плагин mysql
В тот же конфигурационный файл добавляем строку
LoadPlugin mysqlИ ниже вводим его настройки:
<Plugin mysql>
<Database DataBaseName>
Host "HOST.OR.IP"
Port "3306"
User "UserName"
Password "PassWord"
Database "databasename"
MasterStats true
</Database>
<Database DataBaseName2>
Host "HOST.OR.IP"
Port "3306"
User "UserName"
Password "PassWord"
Database "databasename2"
MasterStats true
</Database>
# Так можно добавлять базы до бесконечности
</Plugin>Плагин nginx
Тут всё немного интереснее.
Для начала необходимо настроить сам Nginx, а именно включить страницу nginx_status.
Проверяем наличие необходимого модуля в составе Nginx:
nginx -V 2>&1 | grep -o with-http_stub_status_moduleЕсли вывод команды такой:
with-http_stub_status_moduleто всё отлично. В противном случае необходимо пересобрать Nginx с этим модулем, либо обновиться до последней версии nginx/1.10.1, в составе которой есть этот модуль "из коробки".
Далее настраиваем Nginx, редактируем файл /etc/nginx/conf.d/your.domain.conf:
server {
listen 80;
server_name your.domain.com;
location / {
# Тут настройка на Ваше усмотрение, есть очень много мануалов.
}
location /nginx_status {
stub_status on;
access_log off;
allow IP.AD.DR.ES; # IP с которого будет опрашиваться Nginx
deny all;
}
}Теперь если в браузере открыть http://your.domain.com/nginx_status мы увидим 403 ошибку.
Это значит что левых пользователей сюда не пустят.
Теперь в конфигурационный файл collectd добавляем строку:
LoadPlugin nginxИ прописываем настройки:
<Plugin nginx>
URL "http://your.domain.com/nginx_status"
VerifyPeer false
VerifyHost false
</Plugin>Плагины memory, uptime, users и cpu
В тот же конфигурационный файл добавляем строки
LoadPlugin memory
LoadPlugin uptime
LoadPlugin users
LoadPlugin cpuЭти плагины не требуют настроек.
Думаю из названий понятно, за что отвечают эти плагины.
Плагин openvpn
Если Ваш сервер является сервером OpenVPN, то этот плагин поможет вывести некоторые данные.
В тот же конфигурационный файл добавляем строку
LoadPlugin openvpnИ прописываем настройки:
<Plugin openvpn>
StatusFile "/etc/openvpn/openvpn-status.log"
ImprovedNamingSchema false
CollectCompression true
CollectIndividualUsers true
CollectUserCount false
</Plugin>Со значениями настроек можете поиграться на Ваше усмотрение.
Плагин swap
Если в Вашей системе используется SWAP{target="_bank"}, то этот плагин для Вас.
В тот же конфигурационный файл добавляем строку
LoadPlugin swapИ прописываем настройки:
<Plugin swap>
ReportByDevice false
ReportBytes true
</Plugin>Плагин vmem
В тот же конфигурационный файл добавляем строку
LoadPlugin vmemИ прописываем настройки:
<Plugin vmem>
Verbose false
</Plugin>Плагин syslog
В тот же конфигурационный файл добавляем строку
LoadPlugin syslogИ прописываем настройки:
<Plugin syslog>
LogLevel info
</Plugin>Плагин aggregation
С этим плагином я до конца ещё не разобрался, но судя по содержимому он отдаёт параметры CPU и, возможно, имеет дополнительные настройки. Привожу настройки по умолчанию.
В тот же конфигурационный файл добавляем строку
LoadPlugin aggregationИ прописываем настройки:
<Plugin "aggregation">
<Aggregation>
#Host "unspecified"
Plugin "cpu"
PluginInstance "/[0,2,4,6,8]$/"
Type "cpu"
#TypeInstance "unspecified"
SetPlugin "cpu"
SetPluginInstance "even-%{aggregation}"
GroupBy "Host"
GroupBy "TypeInstance"
CalculateNum false
CalculateSum false
CalculateAverage true
CalculateMinimum false
CalculateMaximum false
CalculateStddev false
</Aggregation>
</Plugin>Плагин bind
Если на Вашем сервере установлен DNS-сервер bind9, то включаем этот плагин.
В тот же конфигурационный файл добавляем строку
LoadPlugin bindИ прописываем настройки:
<Plugin "bind">
URL "http://localhost:8053/"
ParseTime false
OpCodes true
QTypes true
ServerStats true
ZoneMaintStats true
ResolverStats false
MemoryStats true
<View "_default">
QTypes true
ResolverStats true
CacheRRSets true
Zone "your.domain.com/IN" # Тут указываем зону, которую плагин будет проверять
</View>
<View "_default2">
# Таких секций может быть много
</View>
</Plugin>Плагин df
df — отображение свободного и занятого пространства на всех смонтированных разделах.
В тот же конфигурационный файл добавляем строку
LoadPlugin dfИ прописываем настройки:
<Plugin df>
Device "/dev/vda1" # Указываем имя раздела из вывода команды df -h
MountPoint "/" # Точка монтирования раздела
FSType "ext4" # Файловая система раздела
FSType rootfs
FSType sysfs
FSType proc
FSType devtmpfs
FSType devpts
FSType tmpfs
FSType fusectl
FSType cgroup
IgnoreSelected true
ReportByDevice false
ReportReserved false
ReportInodes false
ValuesAbsolute true
ValuesPercentage false
</Plugin>Плагин disk
Работает аналогично плагину выше, но выводит несколько другие метрики
В тот же конфигурационный файл добавляем строку
LoadPlugin diskИ прописываем настройки:
<Plugin disk>
Disk "vda" # Имя диска
Disk "/vda[1,2,3,4,5,6]/" # Список разделов по номерам
IgnoreSelected false
</Plugin>Плагин ping
Проверяет доступность и время ответа от заданного домена
В тот же конфигурационный файл добавляем строку
LoadPlugin pingИ прописываем настройки:
<Plugin ping>
Host "www.google.com"
Interval 1.0
Timeout 0.9
TTL 255
SourceAddress "8.8.8.8"
Device "eth0"
MaxMissed -1
</Plugin>Плагин write_graphite
Основной плагин, ради которого пишется данная статья. Отправка данных в Graphite.
В тот же конфигурационный файл добавляем строку
LoadPlugin write_graphiteИ прописываем настройки:
<Plugin write_graphite>
<Node "Graphite"> # Имя произвольное
Host "127.0.0.1"
Port "2003"
Protocol "tcp"
LogSendErrors true
Prefix "collectd."
Postfix "collectd."
StoreRates true
AlwaysAppendDS true
EscapeCharacter "-"
</Node>
</Plugin>Дополнительные настройки
В тот же конфигурационный файл добавляем строки
<Include "/etc/collectd/collectd.conf.d">
Filter "*.conf"
</Include>Это импорт настроек из директории /etc/collectd/collectd.conf.d с расширением .conf.
Запуск collectd
Запускаем collectd
sudo service collectd startИ если всё прошёл без ошибок — идём в Grafana, добавляем дашборд, и прописываем метрики.
Все метрики от collectd записаны следующим образом:
collectd.MetrikaName.********Строим необходимые графики и наслаждаемся красивым мониторингом.

Полный список плагинов
Полный список плагинов collectd "из коробки" можно посмотреть здесь.
Послесловие
В следующей статье я расскажу о плагинах для Grafana.
Оригинал статьи опубликован на моём блоге