Сбор статистики с помощью демона CollectD и сервиса Grafana

Сбор статистики с помощью демона CollectD и сервиса Grafana

Для роутеров и контроллеров RTU, имеется возможность активировать сбор и отсылку статистики на заданный сервер с помощью демона CollectD.

CollectD — это гибкая и легко масштабируемая программа для Linux-систем, которая собирает системную и пользовательскую информацию с роутеров и отправляет данные на выбранный сервер. Данные отображаются в режиме реального времени через браузер и могут быть использованы для мониторинга производительности системы и прогнозирования нагрузки на систему.

Преимущества сервиса CollectD:

  1. Легко расширяемое количество собираемых показателей (более 90 плагинов для сбора информации о системе и приложениях);
  2. Сервис не нагружает систему и не снижает ее производительность.

Данные мониторинга передаются в интерпретатор статистики Graphite, а затем отображаются в виде графиков на дашборде для визуализации метрик.

Существует множество средств для визуализации, но мы выбрали редактор графиков Grafana — красиво оформленный и простой в установке дашборд, который может работать с большим количеством устройств, имеет функцию оповещения и большое количество настроек готовых плагинов.



Сбор метрик

Сбор метрик производится с помощью подключаемых плагинов. По умолчанию сервис настроен на вывод следующих параметров:

  • Uptime — Время работы роутера с момента последнего включения.
  • 5 min Load — Средняя загрузка процессора.
  • CPU Usage — Информация о степени загруженности процессора.
  • Memory Usage — Количество свободной и используемой оперативной памяти.
  • Processes — Информация о количестве запущенных процессов, в том числе о некорректно закрытых и нагружающих память и процессор роутера.
  • Network — Трафик на сетевых интерфейсах.
  • Free diskspace — Объем свободного места на диске.

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


1. Настройка роутера RTU

По умолчанию сбор статистики в роутере отключён. Активировать сбор статистики можно, настроив конфигурационный файл по адресу:

/etc/collectd.conf

Укажите в пункте Hostname имя, которое будет отображаться на сервере статистики:

Hostname "nameOfHost"

Укажите адрес сервера, куда будет посылаться статистика:

<Plugin network>
   Server "111.111.111.111"
</Plugin>

Далее активируйте плагины в этом файле, сняв # с плагинов LoadPlugin. Для плагина network можно указать также порт для соединения. Подробнее о настройке плагина network.

После настроек необходимо перезапустить сервис collectd:

/etc/init.d/collectd restart

Внимание! Важно, чтобы время на ПК и в роутере было синхронизировано.


2. Установка сервера

Настройка будет проводиться на примере системы Ubuntu 16.04 LTS.

2.1 Устанавливаем collectd на сервер:

sudo apt install collectd

Настраиваем collectd, для этого в файле /etc/collectd/collectd.conf необходимо привести строки к виду:

Hostname "nameOfServer"
FQDNLookup true
BaseDir "/var/lib/collectd"
LoadPlugin network
LoadPlugin write_graphite

<Plugin network>
   Listen "111.111.111.111"
</Plugin>

<Plugin write_graphite>
   <Carbon>
     Host "localhost"
     Port "2003"
     Prefix "collectd."
     StoreRates true
     AlwaysAppendDS false
     EscapeCharacter "_"
   </Carbon>
</Plugin>

2.2 Устанавливаем Graphite:

sudo apt install graphite-web graphite-carbon

Редактируем файл:

sudo nano /etc/graphite/local_settings.py

В нем необходимо указать:

SECRET_KEY = 'ranDomvALuE'
TIME_ZONE = 'Europe/Moscow'

Создаем базу Graphite:

sudo -u _graphite graphite-manage syncdb --noinput

Включаем автозагрузку carbon:

sudo nano /etc/default/graphite-carbon

И задаем:

CARBON_CACHE_ENABLED=true

Настраиваем сохранение метрик:

sudo nano /etc/carbon/storage-schemas.conf

Указываем параметры:

[collectd]
priority = 100
pattern =^collectd\.*
retentions = 30s:7d,10m:2y

Запускаем carbon:

carbon-cache
Устанавливаем nginx:

sudo apt-get install nginx
Приводим файл default к данному виду:
sudo nano /etc/nginx/sites-available/default
server {
   listen 80;
   root /usr/share/graphite-web/;
   error_log /var/log/nginx/error.log;
   location / {
      uwsgi_pass 127.0.0.1:3031;
      include uwsgi_params;
      add_header Access-Control-Allow-Origin "*";
      add_header Access-Control-Allow-Methods "GET,OPTIONS";    
    }
 }


Устанавливаем uwsgi:
sudo apt install uwsgi uwsgi-plugin-python


Создаем файл с таким содержанием:
sudo nano /etc/uwsgi/apps-enabled/grafite.ini

[uwsgi]
processes = 2
socket = 127.0.0.1:3031
gid = _graphite
uid = _graphite
wsgi-file = /usr/share/graphite-web/graphite.wsgi


Перезапускаем приложения:
sudo service nginx restart
sudo service uwsgi restart

В браузере набираем localhost (или 127.0.0.1) и попадаем на сервер сбора статистики Graphite.


Graphite имеет минимальную функциональность, для его расширения установим надстройку Grafana, которая имеет:

1. Админ-панель

2. Функцию отправки тревожных уведомлений,

3. Большое количество настроек готовых плагинов и более привлекательный вид.

2.3 Устанавливаем Grafana:

Добавляем репозиторий в /etc/apt/sources.list:

sudo nano /etc/apt/sources.list

Добавляем в конце файла:

deb https://packagecloud.io/grafana/testing/debian/ jessie main

Сохраняем файл. После этого выполняем:

curl https://packagecloud.io/gpg.key | sudo apt-key add -
sudo apt update
sudo apt install grafana

Создаем и редактируем файл конфигурации для nginx:

sudo nano /etc/nginx/sites-available/grafana

Приводим его к следующему виду:

server {
   listen 8090;
   root /usr/share/grafana;
   index index.html index.htm;
   location / {
      try_files $uri $uri/ /index.html;
   }
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
      root /usr/share/nginx/html;
   }
}

Активируем конфигурацию:

sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/

Перезапускаем nginx:

sudo service nginx restart

Открываем в браузере http://localhost:3000 (или http://127.0.0.1:3000) и видим интерфейс Grafana.


Логин/пароль: admin/admin.

В веб-интерфейсе выберите Data Source, затем Add Data Source, укажите имя collectD, тип Graphite, URL http://127.0.0.1, затем Save&Test. Должно появиться поле Success.


Затем необходимо:

  1. Зайти в Home.
  2. Выбрать Import, появится окно, нажать кнопку Upload .json File.
  3. Выбрать файл с сохраненным представлением метрик Server_Metrics.json.
  4. Выбрать имя для дашборда.
  5. Выбрать источник данных collectd.

После этого появятся графики со статистикой с устройств.


3. Передача данных мониторинга через сеть Internet

Для передачи данных мониторинга через сеть Internet необходимо, чтобы на сервере был публичный статический IP адрес, либо проброшен udp-порт от Маршрутизатора с публичным статическим IP до сервера, на котором установлен CollectD.

3.1 На роутере в консоли вводим:

nano /etc/collectd.conf

В поле плагина network добавляем IP сервера с collectd и udp-порт:

Server "<servername_or_ip>" "udp-port"

3.2 На сервере добавляем в /etc/collectd/collectd.conf строку в плагине network:

Listen "<ip>" "udp-port"

3.3 На сервере изменяем настройки carbon для прослушивания udp-порта в файле /etc/carbon/carbon.conf:

ENABLE_UDP_LISTENER = True

3.4 На роутере и сервере перезапускаем collectd:

sudo service collectd restart

На сервере также перезапускаем carbon-cache:

sudo service carbon-cache restart