Мониторинг домашнего сервера

Встал вопрос о том, что хорошо бы иметь какое-то наблюдение за домашним сервером-NAS-ом. Примерно представил, что было полезно видеть:

  • Нагрузка CPU
  • Температура CPU
  • Нагрузка и температура винтов
  • Нагрузка на интерфейсы по приложениям (портам?)
  • Фрагментация дисков (btrfs и ext4)

Наскоро полистав интернеты, представил себе ситуацию по системам мониторинга. Вкратце - есть "монстрообразные" cacti, nagios (теперь Icinga в опен-сорс), zabbix и Zenoss. Они более предназначены для мониторинга множества распределенных серверов, и для установки на единственный сервер не подходят. Подходящими мне показались два - Munin и collectd.

Я планирую установить и попробовать в работе их обе, но первой была выбрана collectd по следующим причинам:

  • Плагины можно писать на Python (как в Munin пока не знаю)
  • Работает демоном (Munin запускается кроном)
  • Написан на С жрет меньше ресурсов

Минус collectd - он не имеет собственной рисовалки, Munin же рисует графики из коробки.

Приступаем к установке. Тестовый стенд - Ubuntu 12.10 x64.

Не забываем сделать апдейт

$ apt-get update && apt-get -y upgrade

Ставим зависимости

$ apt-get install -y libhtml-parser-perl libconfig-general-perl librrds-perl \
libregexp-common-perl
$ apt-get install -y collectd

Конфиг находится /etc/collectd/collectd.conf

Так как collectd не имеет своих средств отрисовки, а только собирает данные, нам нужна рисовалка графиков. Список фронтэндов есть на сайте collectd. Попробую поставить несколько конфигов. Самые распространненые - это Collectd-Web и Visage.

Устанавливаем collectd и фронтенд

collectd в Quantal устаревший

Проверив версии, оказалось, что в Ubuntu 12.10 ставится collectd версии 4.10.1, хотя на сайте уже 5.2.1. Гнаться за последними новинками не будем, поставим пакет из upcoming Ubuntu Raring Ringtail 13.04, он имеет версию 5.1.0-3ubuntu1. Как это сделать, читать тут http://www.linux.org.ru/forum/admin/8947333

Collection3 + Apache2 (built-in)

$ apt-g install apache2
$ cd /etc/apache2/sites-available
$ touch collection3
$ nano collection3

ScriptAlias /collectd/bin/ /usr/share/doc/collectd-core/examples/collection3/bin/
Alias /collectd/ /usr/share/doc/collectd-core/examples/collection3/

<Directory /usr/share/doc/collectd-core/examples/collection3/>
    AddHandler cgi-script .cgi
    DirectoryIndex bin/index.cgi
    Options +ExecCGI
    Order Allow,Deny
    Allow from all
</Directory>

$ a2ensite collection3
$ service apache2 reload

Сервис должен быть доступен по <IP>/collectd/. Это самый простой фронтэнд, идет в комплекте с collectd. [PIC]

Visage + Apache2

Для Visage нужен Ruby, соответственно, тянет много пакетов (мешок). Делал по этому мануалу - http://linuxdrops.com/install-visage-for-collectd-on-centos-rhel-debian-ubuntu/

$ apt-get install build-essential librrd-ruby ruby ruby-dev rubygems libcurl4-openssl-dev \
apache2-prefork-dev libapr1-dev libaprutil1-dev apache2

Installed required gems

$ gem install librrd passenger visage-app

Устанавливаем модуль apache passenger (проверяем версии в путях)

$ /var/lib/gems/1.8/gems/passenger-3.0.19/bin/passenger-install-apache2-module

Редактируем /etc/apache2/mods-available/passenger.conf и прописываем то, что выдал скрипт на предыдущем шаге, типа

LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-3.0.19/ext/apache2/mod_passenger.so
PassengerRoot /var/lib/gems/1.9.1/gems/passenger-3.0.19
PassengerRuby /usr/bin/ruby1.9.1

Change the permissions. В мануле совсем неправильный путь(устаревший видимо), пишем правильный

#неправильный
$ chown -R www-data:www-data /usr/lib/ruby/gems/1.8/gems/visage-app-2.1.0/lib/visage-app/public
#правильный
$ chown -R www-data:www-data /var/lib/gems/1.9.1/gems/visage-app-2.1.0/lib/visage-app/public

Enable module and create virtual host definition

$ a2enmod passenger

Тут a2enmod не срабатывает, делаю линк руками:

$ ln -s /etc/apache2/mods-available/passenger.conf /etc/apache2/mods-enabled/

Редактируем конфиг

$ nano /etc/apache2/sites-available/visage

Пастим то, что выдал скрипт passenger-install-apache2-module:

<VirtualHost *:80>
  ServerName www.yourhost.com
  # !!! Be sure to point DocumentRoot to 'public'!
  DocumentRoot /somewhere/public
  <Directory /somewhere/public>
     # This relaxes Apache security settings.
     AllowOverride all
     # MultiViews must be turned off.
     Options -MultiViews
  </Directory>
</VirtualHost>

Редактируем под наши условия. Путь к public у меня такой /var/lib/gems/1.9.1/gems/visage-app-2.1.0/lib/visage-app/public Включаем конфиг

$ a2dissite 000-default
$ a2ensite visage 
$ service apache restart

Вдыхаем, и указываем браузером на наш IP... О чудо, что-то изменилось - открылся Phusion Passenger - модуль Apache для развертывания Ruby-приложений.

Но снова не завелось - не хватает RRD! Error message: cannot load such file -- RRD Кстати, [на гитхабе] есть issue по этому поводу двухлетней давности. Вроде бы пофиксилось установкой

$ apt-get install librrd-ruby1.9.1

Далее мы сталкиваемся с такой ошибкой Permission denied - Couldn't write /var/lib/gems/1.9.1/gems/visage-app-2.1.0/lib/visage-app/config/profiles.yaml. Do you have CONFIG_PATH set? Вроде бы пофиксилось с установкой прав:

$ chown nobody:nogroup /var/lib/gems/1.9.1/gems/visage-app-2.1.0/lib/visage-app/config/

Далее нас поджидает такая беда

`no implicit conversion from nil to integer`

Эта проблема также существует в виде issue на github. profiles.yaml создается, но в него ничего не пишется, хотя права есть. Фиксим:

$ cp /var/lib/gems/1.9.1/gems/visage-app-2.1.0/features/support/config/default/profiles.yaml \
    /var/lib/gems/1.9.1/gems/visage-app-2.1.0/lib/visage-app/config/profiles.yaml

Пробуем зайти - алилуя, работает и даже рисует графики!!! В целом, Visage мне очень понравился, он умеет зумить графики, показывать точные значения на графике, есть удобный конструктор для объеденения графиков в логические связки. Видно, что это цельный и проработанный продукт. Минус один - оно все тяжелое и тянет очень много пакетов.

Пробуем запустить Visage на lighttpd.

$ apt-get install lighttpd
$ lighttpd-enable-mod 10-cgi.conf

Читаем дальше эту статью http://redmine.lighttpd.net/projects/1/wiki/LighttpdOnRails

$ apt-get install lighttpd-mod-magnet
$ cd /etc/lighttpd
$ wget http://nordisch.org./cleanurl.lua

Где Руби?

$ which ruby
/usr/bin/ruby

пишем это в lighttpd.conf:

server.modules  += ( "mod_cgi" )
cgi.assign = (
    ".rb"  => "/usr/bin/ruby" # or whatever your path to Ruby is
)

Возможно стоит поставить fcgi для ruby

$ apt-get install libfcgi-ruby1.9.1

Нифига не запускается, пока оставляем lighttpd.

Visage + Thin

Обновляемся

$ apt-get update && apt-get upgrade -y

Cтавим collectd и collectd-core - пока не из raring, там трабла с зависимостями

$ apt-get install collectd collectd-core

Ставим зависимости Ruby:

$ apt-get install -y build-essential librrd-ruby ruby ruby-dev rubygems ruby-bundler libxml2-dev libxslt-dev librrd-dev librrd-ruby1.9.1 
$ gem install visage-app

На этом этапе все уже должно запуститься:

$ cd /var/lib/gems/1.9.1/gems/visage-app-2.1.0/
$ ./bin/visage-app start

заходим браузером на порт 9292 (изменяется в visage-app) и любуемся графиками.

Может не запускатся с такой ошибкой no implicit conversion from nil to integer. Эта проблема также существует в виде issue на github. profiles.yaml создается, но в него ничего не пишется, хотя права есть. Фиксим:

$ cp /var/lib/gems/1.9.1/gems/visage-app-2.1.0/features/support/config/default/profiles.yaml \
    /var/lib/gems/1.9.1/gems/visage-app-2.1.0/lib/visage-app/config/profiles.yaml

Теперь прикручиваем Thin - маленький вебсервер для Ruby-приложений, чтобы Visage мог работать как демон.

$ gem install thin

Thin умеет запускать ruby-приложения на своем встроеном веб-сервере. Для этого можно просто из директории ~/visage/lib/visage-app выполнить команду thin start -p 8282, и visage запустится на 8282 порту. Устанавливаем thin в автозапуск:

$ thin install
$ /usr/sbin/update-rc.d -f thin defaults

Генерим конфиг для приложения visage-app

$ thin config -C /etc/thin/visage.yml -c /var/lib/gems/1.9.1/gems/visage-app-2.1.0/lib/visage-app

Редактируем /etc/thin/visage.yml, ставим нужный порт. Запускаем:

$ /etc/init.d/thin start

Можно сделать рестарт системы, чтобы проверить что после рестрта Visage заводится.

Collectd-web + Apache2

Доустанавливаем перловский модуль JSON, HTML::Entities, RRDs

$ apt-get install perl libjson-perl libhtml-parser-perl librrds-perl

Забираем collectd-web с git

$ cd ~
$ git clone https://github.com/httpdss/collectd-web.git
$ cd collectd-web

Запускаем проверку, она проверит зависимости:

$ ./check_deps.sh
Carp looks ok
CGI looks ok
CGI::Carp looks ok
HTML::Entities looks ok
URI::Escape looks ok
RRDs looks ok
Data::Dumper looks ok
JSON looks ok

Фронтэнд имеет встроенный вебсервер, его можно использовать для тестирования. Скрипт настроен только на localhost, по сетки не зайти. Поэтому подправляем в файле runserver.py IP адрес, делаем его исполняемям и запускаем. Порт по-умолчанию 8888.

$ python runserver.py

Графики рисует, но как то глюкаво, в консоль сыплет ошибками, временами перестает отображать, приходится рефрешить через F5. Выбор временных интервалов сделан неудобно (имхо). Как настроить на отображение только нужных графиков - непонятно. График можно удалить, нет возможности вернуть его назад.

Настройка apache

$ cd /etc/apache2/sites-available
$ nano collectd-web

Пишем конфиг

ScriptAlias /collectdweb/cgi-bin/ /home/swasher/collectd-web/cgi-bin/
Alias /collectdweb/ /home/swasher/collectd-web/

<Directory /home/swasher/collectd-web/cgi-bin>
    AddHandler cgi-script .cgi
    DirectoryIndex index.html
    Options +ExecCGI
    Order Allow,Deny
    Allow from all
</Directory>

Включаем

$ a2ensite collectd-web
$ service apache2 force-reload

Заходим браузером по /collectdweb. Вместо графиков вижу одни плейсхолдеры картинок.

Настройка lighttpd

Включаем мод mod_cgi

$ lighttpd-enable-mod cgi

В конфиге lighttpd.conf прописываем алиас на директорию с collectd-web и указываем cgi обработчик:

alias.url += ( "/collectd/" => "/home/swasher/collectd-web/" )

cgi.assign = (
    ".cgi" => "/usr/bin/perl",
    ".pl" => "/usr/bin/perl",
)

Презапускаем lighttpd, захожу браузером. Вместо графиков вижу одни плейсхолдеры картинок.

Настройка Collectd

Начал с того, что составил более подробно список датчиков, которые мне нужны. Список буду пополнять и уточнять.

  • CPU - разобраться
  • CPU Freq - наблюдаем за частотой проца (если он умеет ее менять)
  • df - следим за свободным место. Для рейда на btrfs нужно что-то другое
  • disk - octets ( запись/чтение байт/сек), operations/sec, и time - среднее время доступа, зависит от загрузки диска
  • filecount - считает кол-во файлов по заданым критериям. Можно считать например, кол-во фильмов, или кол-во статей в блоге
  • hdd temp - температура через Smart
  • interface - трафик через интерфейсы, можно делить по MAC-адресам
  • mbmon - инфа с сенсоров материнки
  • interface - трафик на интерфейсах
  • NUT - информация о состоянии УПСа
  • ping - можно использовать для мониторинга хостов, например конторы
  • Processes - можно наблюдать за деятельностью процессов, например, смотреть дисковую активность btrfs balance
  • python - позволяет писать свои плагины на питоне
  • RouterOS - сбор информации с Mikrotik-а
  • Sensors - plugin uses lm-sensors to read hardware sensors.
  • SNMP - можно собирать инфу о домашних компах
  • uptime - просто uptime

Что бы еще хотелось

  • Инфа о рагментированности btrfs

[на гитхабе] https://github.com/auxesis/visage/issues/76

Comments !

blogroll

social