Translation(s): - Русский
Сollectd - Cистема сбора статистики
Этот раздел поможет наглядно в пошаговом режиме поможет подготовить Debian к полноценному использованию системы сбора статистики. Каждый блок проверен, теория, практика и описания подаются кратко, без излишеств. Если мало, подробности ищите в Google.
Страница находится в разработке, подробности добавляются по мере их изучения и отладки
Если есть что добавить, то смело дополняйте разделы новой информацией. Наши опечатки и ошибки в статье также правте смело, не нужно сообщать об этом на почту, просьба соблюдать стилевое оформление этой страницы и использовать разделители разделов (серые линии различной толщины).
Contents
Теория
Для установки системы в ниже рассмотренном варианте нам понадобятся
- Дистрибутив collectd из официального репозитория.
- Web сервер Lighttpd
- Модули Perl librrds-perl libconfig-general-perl libhtml-parser-perl libregexp-common-perl
Базовая установка
Устанавливаем collectd: - основной пакет.
aptitude install сollectd
collectd сразу начнёт сбор статистики для плагинов включённых по-умолчанию.
Просмотр статистики
Подсистема отображения собранных данных в collectd отсуnствует. Для этого создано множество отдельных front-end. Полный список здесь
Сollection3
Достоинства:
- Показывает данные любых модулей
- Установка без "костылей"
- Идет в комплекте с collectd
- Гибкое масштабирование
Недостатки
- Требует Web сервер с поддержкой CGI
- Требует Perl + 4 модуля к нему
- Архаичный интерфейс
- Не умеет объединять графики
- Не показывает мгновенные значения
- Не запоминает настройки масштабирования
- Нет автообновления
Устанавливаем Web-сервер
aptitude install lighttpd
Копируем файлы Web-интерфейса
cp -r /usr/share/doc/collectd/examples/collection3 /var/www/
Включаем исполнение CGI скриптов в Lighttpd
lighttpd-enable-mod cgi
Указываем обработчик для cgi файлов
echo "cgi.assign = (\".cgi\" => \"/usr/bin/perl\")" >> /etc/lighttpd/conf-available/10-cgi.conf
Перезапускаем Lighttpd
/etc/init.d/lighttpd force-reload
Устанавливаем модули perl
aptitude install librrds-perl libconfig-general-perl libhtml-parser-perl libregexp-common-perl
Теперь смотрим статистику по адресу
http://адрес_сервера/collection3/bin/
Настройки модулей
Правим основной файл конфигурации
nano /etc/collectd/collectd.conf
Подробно о плагинах смотрим на официальном сайте
Для очистки всех графиков можно сделать так:
/etc/init.d/collectd stop rm -fr /var/lib/collectd/rrd /etc/init.d/collectd start
Проверенно рабочий конфиг для материнки Sapphire IPC-E350M1W:
/etc/collectd/collectd.conf
Примечание - у меня сбоили показания через hddtemp, пришлось организовыывать сбор данных о температуре через плагин exec и утилитку smartctl
FQDNLookup true
LoadPlugin syslog
<Plugin syslog>
LogLevel info
</Plugin>
LoadPlugin cpu
LoadPlugin cpufreq
LoadPlugin df
LoadPlugin disk
LoadPlugin dns
LoadPlugin exec
LoadPlugin filecount
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
LoadPlugin rrdtool
LoadPlugin sensors
LoadPlugin uptime
LoadPlugin notify_email
<Plugin notify_email>
SMTPServer "smtp.yandex.ru"
SMTPPort 25
SMTPUser "user@yandex.ru"
SMTPPassword "password"
From "ot-kogo-posilaem@yandex.ru"
Subject "[collectd] %s on %s!"
Recipient "tot-komu-posilaem@yandex.ru"
</Plugin>
<Plugin df>
Device "/dev/mapper/sda2_crypt"
Device "/dev/mapper/data"
Device "/dev/mapper/cache"
</Plugin>
<Plugin disk>
Disk "sda"
Disk "sdb"
Disk "sdc"
</Plugin>
<Plugin dns>
Interface "eth0"
</Plugin>
<Plugin exec>
Exec smart "/usr/local/bin/collsmart.sh"
</Plugin>
<Plugin filecount>
<Directory "/mnt/cache/backup/private">
Instance "backups"
</Directory>
</Plugin>
<Plugin interface>
Interface "eth0"
Interface "eth1"
</Plugin>
<Plugin rrdtool>
DataDir "/var/lib/collectd/rrd"
</Plugin>
Include "/etc/collectd/filters.conf"
Include "/etc/collectd/thresholds.conf"
Сбор данных из любых источников
Иногда нужно собирать данные из собственного скрипта. На примере рассмотрим вариант сбора данных о температуре жёстких дисков через не поддерживаемый hddtemp контроллер. Подобные данные можно собрать c помощью smartctl. К сожалению, для работы smartctl требует права root.
Сперва решаем проблему прав с помощью sudo. В теории это не безопасно.
aptitude install sudo smartmontools
Создаём "пустого" пользователя и для надёжности выставляем ему пароль
useradd -c "smart" -M -g users smart -s /bin/bash passwd smart
Разрешаем пользователю smart запускать smartctl. Добавляем строки
nano /etc/sudoers ... Cmnd_Alias SMARTCTL = /usr/sbin/smartctl -A /dev/sda, /usr/sbin/smartctl -A /dev/sdb, /usr/sbin/smartctl -A /dev/sdc smart ALL = (root) NOPASSWD: SMARTCTL
Возможно следует перезагрузить компьютер.
Создаём скрипт сбора данных
nano /usr/local/bin/collsmart.sh
#!/bin/bash
HOSTNAME="${COLLECTD_HOSTNAME:-`hostname -f`}"
INTERVAL="${COLLECTD_INTERVAL:-60}"
while sleep "$INTERVAL"
do
TEMP=$((sudo smartctl -A /dev/sda | grep Temperature_Celsius | awk '{ print $10; }') 2>/dev/null);
if [ $? -ne 0 ]
then
TEMP="U"
fi
echo "PUTVAL $HOSTNAME/exec-smart/temperature-sda interval=$INTERVAL N:$TEMP"
TEMP=$((sudo smartctl -A /dev/sdb | grep Temperature_Celsius | awk '{ print $10; }') 2>/dev/null);
if [ $? -ne 0 ]
then
TEMP="U"
fi
echo "PUTVAL $HOSTNAME/exec-smart/temperature-sdb interval=$INTERVAL N:$TEMP"
TEMP=$((sudo smartctl -A /dev/sdc | grep Temperature_Celsius | awk '{ print $10; }') 2>/dev/null);
if [ $? -ne 0 ]
then
TEMP="U"
fi
echo "PUTVAL $HOSTNAME/exec-smart/temperature-sdc interval=$INTERVAL N:$TEMP"
doneДелаем скрипт исполняемым
chmod +x /usr/local/bin/collsmart.sh
Настраиваем модуль exec
nano /etc/collectd/collectd.conf
LoadPlugin exec
<Plugin exec>
Exec smart "/usr/local/bin/collsmart.sh"
</Plugin> Перезапускаем collectd
/etc/init.d/collectd restart
Если что-то не работает, то нужно смотреть syslog
Уведомления на e-mail
В случаем выхода указанного параметра за рамки диапазона мы получим на почту письмо WARNING или FAILURE, и когда значение вернётся к нормальным значением получим письмо OKAY
Устанавливаем библиотеку для отпрaвки почты
aptitude install libesmtp5
Настраиваем параметры почтового соединения - добавляем в конец файла строки
Например, так:
nano /etc/collectd/collectd.conf
LoadPlugin notify_email
<Plugin notify_email>
SMTPServer "smtp.yandex.ru"
SMTPPort 25
SMTPUser "login"
SMTPPassword "password"
From "mailbox@yandex.ru"
# # <WARNING/FAILURE/OK> on <hostname>.
# # Beware! Do not use not more than two placeholders (%)!
Subject "[collectd] %s on %s!"
Recipient "mailbox@yandex.ru"
</Plugin>Добавляем простейшую новую реакцию на событие (триггер) - например, процессор загружен пользовательским процессом свыше 85 % - добавляем в конец файла строки.
nano /etc/collectd/thresholds.conf
<Threshold>
<Type "cpu">
Instance "user"
WarningMax 85
Hits 6
</Type>
</Threshold>Перезапускаем collectd
/etc/init.d/collectd restart
Нагрузить процессор очень просто - ставим cpuburn:
aptitude install cpuburn
Грузим процессор
burnP6
И проверяем почту - письмо-уведомление должно быть.
Далее не забываем отключить нагрузку Ctrl+C
Или варианты оповещения посложнее - нигде в интернет подобных работоспособных примеров найдено не было, нащупал сам 8)
Отсылаем письмо, если скорость передачи данных на сервер (rx) превысит 9 мегабит в секунду (грубо) или если температура процессора на материнке Sapphire IPC-?E350M1) превысит 50 градусов.
nano /etc/collectd/thresholds.conf
<Threshold>
<Host "gtx.home">
<Plugin "interface">
<Type "if_octets">
Instance "eth0"
DataSource "rx"
WarningMax 9000000
</Type>
</Plugin>
<Plugin "sensors">
instance "k10temp-pci-00c3"
<Type "temperature">
instance "temp1"
DataSource "value"
WarningMax 50
</Type>
</Plugin>
</Host>
</Threshold>Проверенно рабочий конфиг для материнки Sapphire IPC-E350M1W:
/etc/collectd/thresholds.conf
<Threshold>
<Plugin "cpu">
<Type "cpu">
Instance "user"
WarningMax 85
# 10 hits - 2 min
Hits 50
</Type>
</Plugin>
<Plugin "df">
<Type "df">
instance "mnt-data"
#Если занято свыше 400ГБ
WarningMax 429496729600
#Percetage false
</Type>
<Type "df">
instance "mnt-cache"
# Если занято свыше 500ГБ
WarningMax 536870912000
#Percentage false
</Type>
<Type "df">
instance "root"
# Если занято свыше 80%
WarningMax 80
Percentage true
</Type>
</Plugin>
<Plugin "sensors">
instance "k10temp-pci-00c3"
<Type "temperature">
instance "temp1"
DataSource "value"
# Если температура процессора свыше 75 градусов по Цельсию
WarningMax 75
</Type>
instance "f71808e-isa-0290"
<Type "temperature">
instance "temp1"
DataSource "value"
WarningMax 65
</Type>
<Type "temperature">
instance "temp2"
DataSource "value"
WarningMax 55
</Type>
<Type "voltage">
instance "in0"
DataSource "value"
WarningMax 3.4
WarningMin 3.2
</Type>
<Type "voltage">
instance "in1"
DataSource "value"
WarningMax 1.35
WarningMin 0.55
</Type>
<Type "voltage">
instance "in3"
DataSource "value"
WarningMax 1.65
WarningMin 1.55
</Type>
<Type "voltage">
instance "in4"
DataSource "value"
WarningMax 1.15
WarningMin 1.05
</Type>
<Type "voltage">
instance "in5"
DataSource "value"
WarningMax 1.85
WarningMin 1.75
</Type>
<Type "voltage">
instance "in7"
DataSource "value"
WarningMax 3.45
WarningMin 3.25
</Type>
<Type "voltage">
instance "in8"
DataSource "value"
WarningMax 3.25
WarningMin 3.05
</Type>
</Plugin>
<Plugin "exec">
# Температура жёских дисков по Цельсию
instance "smart"
<Type "temperature">
instance "sda"
DataSource "value"
WarningMax 50
</Type>
<Type "temperature">
instance "sdb"
DataSource "value"
WarningMax 43
</Type>
<Type "temperature">
instance "sdc"
DataSource "value"
WarningMax 43
</Type>
</Plugin>
<Plugin "memory">
<Type "memory">
Instance "used"
# Если занято свыше 1ГБ
WarningMax 1073741824
</Type>
</Plugin>
</Threshold>
