Мониторинг домашнего сервера
Встал вопрос о том, что хорошо бы иметь какое-то наблюдение за домашним сервером-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
Заходим браузером по
Настройка 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 !