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>