Всем привет, на волне libc6 с новыми заморочками. Приступаю сразу к делу.
Это легкое средство мониторинга жизни сервера - сетевые интерфейсы, активность жестких дисков, нагрузка cpu, памяти, сканирование активности указанных портов, использование ядра и даже температура устройств через lm-sensors и hddtemp.
- Статья человека по имени monks (больше ничего об авторе не нашел, к сожалению) Tomcat и Perl. Быстрый старт из блога Ворота в Perl, в которой раскрывается, как же указать контексту, что он привилегированный.
Ставим сам monitorix
Последовательность действий: устанавливаем зависимости из репозиториев; если нужно, доустанаволиваем (и настраиваем) lm-sensors и hddtemp; качаем monitorix последней версии, распаковываем, устанавливаем по инструкции без боязни и тут же запускаем сам демон сбора статистики.
sudo aptitude install rrdtool libwww-perl librrds-perl hddtemp lm-sensors
sudo sensors-detect
# type 'yes' several times
cd Downloads
wget http://www.monitorix.org/monitorix-1.4.1.tar.gz
tar -zxvf monitorix-1.4.1.tar.gz
cd monitorix-1.4.1/
sudo ./install.sh
# type 3, i.e. Debian (Ubuntu)
# type y
sudo /etc/init.d/monitorix start
Теперь немного магии с tomcat6
Создадим webapp приложение для monitorix
Теперь создадим виртуальное приложение monitorix под tomcat. Для этого перенесем директорию monitorix из /var/www/monitorix в %CATALINE_HOME/webapps/monitorix и настроим ее под себя - дадим ей права своего юзера (который запускает томкат). В новом доме мониторикса создадим директорию WEB-INF, а в ней директорию cgi.
И теперь самая магия: из /var/www/monitorix делаем ссылку на %CATALINE_HOME/webapps/monitorix, а из %CATALINE_HOME/webapps/monitorix/WEB-INF/cgi создаем ссылку monitorix.cgi на /usr/lib/cgi-bin/monitorix.cgi.
cd /var/www
sudo mv -r monitorix %CATALINE_HOME/webapps
chown -R tomcat:tomcat %CATALINE_HOME/webapps/monitorix
sudo ln -s %CATALINE_HOME/webapps/monitorix /var/www/monitorix
mkdir -p %CATALINE_HOME/webapps/monitorix/WEB-INF/cgi
ln -s /usr/lib/cgi-bin/monitorix.cgi %CATALINE_HOME/webapps/monitorix/WEB-INF/cgi/monitorix.cgi
Если где-то ошибся в командах, исправьте, пожалуйста. Я все делал в mc.
Настроим web.xml в новом приложении
Теперь настроим web.xml в своем виртуальном приложении, добавив в него BASIC авторизацию для стандартной в томкате роли manager. И самое основное - именно для этого приложения активируем cgi функционал.
vi %CATALINE_HOME/webapps/monitorix/WEB-INF/web-xml
#insert following
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd">
<!-- Define where to get tomcat users -->
<resource-env-ref>
<resource-env-ref-name>users</resource-env-ref-name>
<resource-env-ref-type>org.apache.catalina.UserDatabase</resource-env-ref-type>
</resource-env-ref>
<!-- Define secure url-mappings and mapped security role -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Monitorix</web-resource-name>
<url-pattern>*.html</url-pattern>
<url-pattern>*.cgi</url-pattern>
<url-pattern>*.png</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
</security-constraint>
<!-- Define BASIC auth for application -->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Monitorix Application</realm-name>
</login-config>
<!-- Finally define a role on which auth will be based -->
<security-role>
<role-name>manager</role-name>
</security-role>
<!-- Mandatory parameters for app name -->
<display-name>Monitorix</display-name>
<description>Monitor server env</description>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<!-- Setup cgi servlet exactly for this app -->
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
<!-- Setup cgi url mapping exactly for this app -->
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
</web-app>
:wq
Не забудем активировать роль manager в %CATALINA_HOME/conf/tomcat-users.xml, если ее там еще нету:
<role rolename="manager" />
<user roles="manager" username="manager" password="secret" />
Настроим привилегированный контекст для разрешения запуска cgi
Разрешим запуск cgi скриптов только для приложения monitorix. Для этого нужно создать в приложении директорию META-INF и разместить в ней файл context.xml c настройками привилегий контекста.
mkdir %CATALINA_HOME/webapps/monitorix/META-INF
vi %CATALINA_HOME/webapps/monitorix/META-INF/context.xml
Содержимое:
<Context reloadable="true" privileged="true" path="monitorix">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Фуф, с магией вроде всё!
Конфигурация monitorix
Документацию по параметрам конфигурации можно найти здесь Configuration options
Совсем немного подправим файл /etc/monitorix.conf. В нем буквально нужно будет указать имя хоста - $HOSTNAME, загловок для странички с графиками - $TITLE, подправить параметр $MEMORY с указанием количества памяти в мегабайтах. К примеру, у меня $MEMORY = “3903”
Если вы хотите получать графики по температурам от lm-sensors - установите занчение $ENABLE_LMTEMP в Y, подправьте значения для $SENSORS_LIST и $HDDTEMP_LIST, но тут уже см документацию по параметрам самостоятельно.
Дальше я отключил отправку мыла по крону “в случае чего” - $ENABLE_CROND_MAIL = “N” и убрал некоторые порты из прослушивания. Чтобы убрать порт из мониторинга, из переменной просто убирается знак “=” и значение, получается что-то вроде такого
our $PORT03 = "80";
our $PORT03_NAME = "HTTP";
our $PORT04;
our $PORT04_NAME;
То есть 80й слушаем, а то, что было на PORT4 - отключаем от мониторинга. Неудобно то, что на графиках отчетов эти порты будут все равно, но информации и названия порта по ним не будет. Лучше бы уж полностью убрали из отчетов несканируемые порты.
После сборки обработать напильником
Откроем файл /usr/bin/monitorix.pl и в 771й строке заменим путь к cgi от корня на относительный - с точкой:
Было:
<form action="/cgi-bin/monitorix.cgi" method="get">
Сделаем:
<form action="./cgi-bin/monitorix.cgi" method="get">
Тут дело в том, что tomcat воспринимает лидирующий слеш в ссылках, как путь к корню домена, точнее, к root context-у. Получается, что ссылка будет вести не на %HOSTNAME/monitorix/cgi-bin/ .... а просто на %HOSTNAME/cgi-bin . Это мы и исправили.
Enjoy
После правки конфига перегружаем сам демон мониторинга
sudo /etc/init.d/monitorix restart
Перегружаем tomcat штатными средствами (когда вам бизнес позволяет это делать? В три ночи? Ну, так встаньте в три ночи и перегрузите ;)) и наслаждаемся.
http://%HOSTNAME/monitorix
