Установка и настройка Collectd для сбора и отправки данных в Graphite (Grafana)

  • Tutorial

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


Полный список плагинов


Полный список плагинов collectd "из коробки" можно посмотреть здесь.


Послесловие


В следующей статье я расскажу о плагинах для Grafana.


Оригинал статьи опубликован на моём блоге

  • +2
  • 15,2k
  • 8
Поделиться публикацией

Комментарии 8

    0
    А подскажите можно-ли настроить collectd для отправки метрик с других ПК? Чтобы сделать эдакий аналог zabbix?
      0

      Да, конечно можно. Установите collectd на нужный ПК и настройте плагины.
      В плагине <Plugin write_graphite> пропишите адрес машины с графаной. И всё. У меня собираются метрики с 4 серверов таким образом.

        0
        т.е. по факту оставляем открытый порт графита на сервере?
        Как -то не очень секьюрно, иначе никак?
        VPN и т.п. не предлагать )))
          0

          А чем Вам плох VPN? Частная сеть. Доступ к серверам ограничен "локалкой", всё прекрасно.

            0
            хотелось мониторить кое-какие рабочие ПК, но не хотелось геммороиться с долго настройкой. Но ок, спасибо и за статью и за объяснения. Поищу может еще варианты будут.
          0
          А что мешает открыв порт разрешить доступ только с определенных ip? (диапазон ваших серверов указать)
      0
      не туда…

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое