Установка Collectd в Unix/Linux

Установка 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

Система инициализации Systemd

Пишем systemd Unit файл

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

Настройка Grafana с Graphite/Zabbix/Prometheus/MySQL/InfluxDB/Elasticsearch/CloudWatch для сбора и отображения метрик в 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» завершена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.