Недавно я писал статью о настройке и установке 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.
Оригинал статьи опубликован на моём блоге
