
Установка Collectd в Unix/Linux
Collectd — это легковесный демон, который собирает статы (каждые 10 сек) о использовании системных ресурсов. Он позволяет собирать данные с нескольких хостов и отправлять их на централизованный сервер для дальнейшего использования (Например, можно использовать influxDB и потом с данной БД, строить графики в grafana). Главное отличие данного ПО, — это в том, что работает как push (а не poll/pull). Это означает что он находится в ожидании и ждет пока другие хосты пришлют ему данные по серверу.
Установка Collectd в Unix/Linux
Сейчас я, расскажу как можно установить данную утилиту на различные Unix/Linux ОС.
Установка Collectd в CentOS/Fedora/RedHat
Я приведу несколько способов по установке данного ПО.
-===СПОСОБ 1===-
Подключаем EPEL репозиторий —включить EPEL репозиторий и потом выполняем:
# yum install collectd -y
-===СПОСОБ 2===-
Поскольку мы собираем CollectD из исходного кода, нам нужен компилятор:
# yum install -y bzip2 wget # yum install -y make automake gcc gcc-c++ kernel-devel perl-devel
Загружаем CollectD (на момент написания статьи, я использовал самую новую версию):
# cd /usr/local/src/ && wget https://collectd.org/files/collectd-5.7.2.tar.bz2 # tar -jxf collectd-*.tar.bz2 # cd collectd-5.5.0
PS: Компилятор Fedora может выдать ошибку, которая выглядят следующим образом:
error: #warning “_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE” [-Werror=cpp]
Для этого стоит выключить «warning»:
export CFLAGS="-Wno-error"
Ну что, пришло время компиляции:
# ./configure && make all install
Чтобы менеджить CollectD на CentOS/Fedora с использованием systemd, можно следующим образом:
# cd /etc/systemd/system/ && wget https://raw.githubusercontent.com/martin-magakian/collectd-script/master/collectd.service # chmod +x collectd.service
CollectD теперь будет запускаться при запуске ОС, но вы все равно сможете управлять им вручную:
# systemctl start collectd.service # systemctl stop collectd.service # systemctl status collectd.service # systemctl restart collectd.service
Полезное чтиво по systemd:
Система инициализации в Unix/Linux
PS: Так же можно найти init.d скрипт в архиве и его можно использовать:
# cp -r /usr/local/src/contrib/redhat/init.d-collectd /etc/init.d/collectd # chmod +x /etc/init.d/collectd
И для запуска будет служить следующая команда:
# service collectd start
По умолчанию, вы можете найти:
- Конфиг-файл — /opt/collectd/etc/collectd.conf
- Бинарник с collectd — /opt/collectd/sbin/collectd
Можно добавить службу в автозагурзку ОС:
# chkconfig collectd on # chkconfig --level 5 collectd on
Или, если используете systemd:
# systemctl enable collectd
Вот и все.
Установка Collectd в Debian/Ubuntu
Я приведу несколько способов по установке данного ПО.
-===СПОСОБ 1===-
Установка очень простая, нужно выполнить:
# apt-get install collectd -y
Если имеется Debian, можно использовать репозиторий, т.к в дебиановских стандартных портах, collectd — нет, для этого нам надо подключить backports:
# vim /etc/apt/sources.list.d/backports.repo
Добавляем строчку:
deb http://backports.debian.org/debian-backports squeeze-backports main
В нашем случае это будет выглядеть как
# apt-get -t squeeze-backports install "collectd"
-===СПОСОБ 2===-
Поскольку мы собираем CollectD из исходного кода, нам нужен компилятор:
# apt-get install build-essential
Загружаем CollectD (на момент написания статьи, я использовал самую новую версию):
# cd /usr/local/src/ && wget https://collectd.org/files/collectd-5.7.2.tar.bz2 # tar -jxf collectd-*.tar.bz2 # cd collectd-* && ./configure && make all install
По умолчанию, вы можете найти:
- Конфиг-файл — /opt/collectd/etc/collectd.conf
- Бинарник с collectd — /opt/collectd/sbin/collectd
Чтобы менеджить CollectD на Debian/Ubuntu, можно следующим образом:
# wget -O /etc/init.d/collectd https://raw.githubusercontent.com/martin-magakian/collectd-script/master/collectd.init # chmod 744 /etc/init.d/collectd
CollectD теперь будет запускаться при запуске ОС, но вы все равно сможете управлять им вручную:
service collectd start service collectd stop service collectd status service collectd restart
Можно добавить службу в автозагурзку ОС:
# update-rc.d collectd enable # update-rc.d rc.local enable
Вот и все.
Установка Collectd на другие Unix/Linux ОС
Я приведу несколько способов по установке данного ПО.
-===СПОСОБ 1===-
Использовать docker, но мне это не нужно было еще. По этому, я опишу данный процесс немного позже (как прийдет время).
-===СПОСОБ 2===-
Использовать исходный код (я описывал данный процесс выше).
Установка дополнительные компоненты для Collectd
Выполняем установку ПО для Deb’s ОС:
# apt-get install git -y # apt-get install librrds-perl libjson-perl libhtml-parser-perl -y
Выполняем установку ПО для RPM’s ОС:
# yum install git -y # yum install rrdtool rrdtool-devel rrdtool-perl perl-HTML-Parser perl-JSON -y
Скачиваем Collectd-Web:
# cd /usr/local/ && git clone https://github.com/httpdss/collectd-web.git
Выставим права:
# chmod +x /usr/local/collectd-web/cgi-bin/graphdefs.cgi
По умолчанию, веб-сервер будет работать на 127.0.0.1. Чтобы можно было подключаться из-вне, нужно отредактировать скрипт runerver.py и изменить IP-адрес 127.0.1.1 на 0.0.0.0:
# vim /usr/local/collectd-web/runserver.py
PS: Так же, можно изменить порт (по умолчанию используется 8888).
После того как вы изменили скрипт, запустите сервер в фоновом режиме, выпустив следующую команду:
# python /usr/local/collectd-web/runserver.py &
Теперь, можно открыть URL с указанным портом и использовать.
Чтобы легче управлять сервисом (запуск, стоп или просмотр состояния), создайте следующий баш-скрипт:
# vim /usr/local/bin/collectd-server
И прописываем в него:
#!/bin/bash PORT="8888" case $1 in start) cd /usr/local/collectd-web/ python runserver.py 2> /tmp/collectd.log & sleep 1 stat=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"| cut -d":" -f2 | cut -d" " -f1` if [[ $PORT -eq $stat ]]; then sock=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"` echo -e "Server is still running:\n$sock" else echo -e "Server has stopped" fi ;; stop) pid=`ps -x | grep "python runserver.py" | grep -v "color"` kill -9 $pid 2>/dev/null stat=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"| cut -d":" -f2 | cut -d" " -f1` if [[ $PORT -eq $stat ]]; then sock=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"` echo -e "Server is still running:\n$sock" else echo -e "Server has stopped" fi ;; status) stat=`netstat -tlpn 2>/dev/null |grep $PORT| grep "python" | cut -d":" -f2 | cut -d" " -f1` if [[ $PORT -eq $stat ]]; then sock=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"` echo -e "Server is running:\n$sock" else echo -e "Server is stopped" fi ;; *) echo "Use $0 start|stop|status" ;; esac
Начнем юзать его, но нужно еще выставить нужные права:
# chmod +x /usr/local/bin/collectd-server
Использование:
# collectd-server start # collectd-server status # collectd-server stop
Вот и все.
Настройка Collectd в Unix/Linux
И так, уже подошли к настройке данного сервиса. Открываем конфиг-файл:
# cat /etc/collectd.conf
И, изменяем хостнейм:
Hostname "grafana.local" FQDNLookup true
Остальное пока что оставим как есть.
Настройка плагинов для CollectD
У collectd довольно большое количество встроенных плагинов. Я приведу пример некоторых из них.
Плагин для MYSQL
Добавляем (можно раскоментировать) следующую строку (секция LoadPlugin section):
LoadPlugin mysql
И добавляем следующие строки, в секцию «Plugin configuration»:
<Plugin mysql> <Database Your_DB_Name_1> Host "Your_IP_or_HOST" Port "3306" User "Your_User_Name" Password "Your_PassWord_for_Your_User_Name" Database "databasename" MasterStats true </Database> <Database Your_DB_Name_2> Host "Your_IP_or_HOST" Port "3306" User "Your_User_Name" Password "Your_PassWord_for_Your_User_Name" Database "databasename2" MasterStats true </Database> </Plugin>
Нужно изменить некоторые из параметров. Но тут интуитивно все понятно, я не хотел бы заострять внимание на этом шаге.
Плагин для NGINX
Проверяем, установлен ли HttpStubStatusModule с помощью следующей команды:
# nginx -V 2>&1 | grep -o with-http_stub_status_module
В ваш конфиг самого nginx, дописываем следующую секцию:
location /nginx_status { stub_status on; access_log off; allow YOUR_ALLOWED_IP; deny all; }
По аналогии с предыдущим плагином, подключаем плагин для nginx:
LoadPlugin nginx
И прописываем настройки:
<Plugin nginx> URL "https://your_domain_name/nginx_status" VerifyPeer false VerifyHost false </Plugin>
Плагины cpu, uptime, memory, users
В конфиг добавляем строки:
LoadPlugin memory LoadPlugin uptime LoadPlugin users LoadPlugin cpu
Данные плагины не нуждаются в настройках.
Плагин swap
Если юзаете SWAP и нужно отмониторить его, то можете использовать данный плагин для этой цели. Сново, открываем конфиг-файл и прописываем:
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>
Плагин bind
Если используете bind9 в качестве DNS-сервера, то подключите этот плагин. Добавляем:
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
Нужен для проверки места на вашем диске. Загружаем плагин:
LoadPlugin df
Вписываем настройки для плагина:
<Plugin df> Device "/dev/sda1" MountPoint "/" FSType "ext3" 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>
Где:
- Device «/dev/sda1» — стоит указать имя вашего раздела
- MountPoint «/» — служит точкой монтирования раздела
- FSType «ext3» — собственно, тип ФС
Плагин disk
Данный плагин, имеет что-то общее с предыдущим плагином, но выводит др метрики. Сново, загружаем плагин:
LoadPlugin disk
Вписываем настройки для плагина:
<Plugin disk> Disk "sda" Disk "/sda[1,2,3,4,5,6,7,8,9]/" # Список разделов по номерам IgnoreSelected false </Plugin>
Где:
- Disk «sda» — Имя диска
- Disk «/sda[1,2,3,4,5,6,7,8,9]/» — Список разделов по номерам
Плагин 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>
Плагин StatD для CollectD
Загружаем:
LoadPlugin statsd
Вписываем настройки для плагина:
<Plugin statsd> Host "0.0.0.0" Port "8125" DeleteSets true </Plugin>
Собственно, если есть необходимость, то измените 0.0.0.0 чтобы слушал только определенный IP адрес (сейчас слушает все).
Для проверки, можно вызвать:
$ echo "my_first.metric:1|c" | nc -w 1 -u 127.0.0.1 8125 $ echo "my_first.metric:4|c" | nc -w 1 -u 127.0.0.1 8125
Записывать CollectD метрики в InfluxDB
Загружаем плагин:
LoadPlugin network
Вписываем настройки для плагина:
<Plugin network> # # client setup: # Server "ff18::efc0:4a42" "25826" <Server "your_influxdb_server_or_IP" "25826"> # SecurityLevel Encrypt # Username "user" # Password "secret" # Interface "eth0" </Server> # TimeToLive "128" # # # server setup: # Listen "ff18::efc0:4a42" "25826" #<Listen "192.168.13.187" "25826"> # <Listen "your_influxdb_server_or_IP" "25826"> #SecurityLevel Sign #AuthFile "/etc/collectd/passwd" #Interface "eth0" # </Listen> # MaxPacketSize 1024 # # # proxy setup (client and server as above): # Forward true # # # statistics about the network plugin itself # ReportStats false # # # "garbage collection" # CacheFlush 1800 </Plugin>
Где:
- your_influxdb_server_or_IP — Это URL или IP-адрес вашего сервера с InfluxDB.
- 25826 — Это порт на котором InfluxDB будет слушать метрики с CollectD.
Запускаем (перезапускаем):
# service collectd restart
Смотрим чтобы слушался интерфейс:
# netstat -tulpn| grep collectd
Можно настроить шифрованное соединение и весь трафик будет шифроваться, для этого:
# mkdir /etc/collectd && htpasswd -c /etc/collectd/passwd collectd_user
Смотрим какой пользователь и пароль создался ( я имею ввиду в шифрованном виде):
# cat /etc/collectd/passwd
После чего, открываем:
# vim /etc/collectd.conf
И приводим к виду:
<Plugin network> # # client setup: # Server "ff18::efc0:4a42" "25826" <Server "192.168.13.187" "25826"> SecurityLevel Encrypt Username "collectd_user" Password "your_server_passwd_hash_password" # Interface "eth0" </Server> # TimeToLive "128" # # # server setup: # Listen "ff18::efc0:4a42" "25826" #<Listen "192.168.13.187" "25826"> <Listen "0.0.0.0" "25826"> SecurityLevel Sign AuthFile "/etc/collectd/passwd" #Interface "eth0" </Listen> # MaxPacketSize 1024 # # # proxy setup (client and server as above): # Forward true # # # statistics about the network plugin itself # ReportStats false # # # "garbage collection" # CacheFlush 1800 </Plugin>
Перезапускаем службу:
# service collectd restart
PS: У меня это дело не заработала на 1-й машине. Пока что не знаю почему…. Постараюсь выяснить и исправить.
Полезное чтиво:
Установка InfluxDB в Unix/Linux
Открываем конфиг influxdb:
# cat /etc/influxdb/influxdb.conf
и приводим к виду:
[[collectd]] enabled = true #address = "0.0.0.0" # If not set, is actually set to bind-address. #port = 25826 database = "collectd_db" bind-address = "collectd_server:25826" # The collectd service supports either scanning a directory for multiple types # db files, or specifying a single db file. typesdb = "/usr/share/collectd/types.db"
Можно перезапускать службы:
# service influxdb restart
Вот собственно и все, статья «Установка Collectd в Unix/Linux» завершена.