Частая ситуация, когда какой-то скрипт (например, php) работает с важными данными на сервере, которые не должны быть доступны «внешнему» пользователю. Предметно говоря, требуется запрет доступа на папку с подобными файлами, однако скрипт должен иметь возможность с ними работать. Решение простое, кладём в текущую директорию .htaccess файл с содержимым типа:

Order deny,allow
Deny from all
Allow from 127.0.0.1

Apache Tomcat — популярный сервер для java-приложений. Сам также написан на Java, а потому требуется, чтобы она была уже установлена в системе (см. установка Java в Debian). Начиная с 2011-го года версия Tomcat 6 перешла в разряд устаревших, а потому на момент написания статьи наиболее актуален Tomcat 7, хотя с 2013-го года присутствует и даже работает Tomcat 8. Потому рассмотрим установку седьмой и восьмой версий:
Continue Reading

Вариант 1. Используем lynx. Выводит на экран исходный код страницы (соответственно он отсылается на почту):

/usr/local/bin/lynx --source http://adminunix/index.html

Вариант 2. Используем curl. Также выводит исходный код:

/usr/local/bin/curl --url http://adminunix/index.html

Вариант 3. Используем wget. С выводом на экран:

 wget -O — -q -t 1 http://www.adminunix.ru/cron.php

где основная «хитрость» в том, что ключик "-O — " задаёт вывод в консоль (вместо сохранения в файл), "-q" делает это «тихо» (без вывода на экран), а "-t 1" указывает делать лишь одну попытку соединения. Проще говоря, вместо скачивания получаем именно однократный «вызов скрипта» по заданному адресу.

Как и многие коллеги-администраторы, долгое время я пользовался для мониторинга всего и вся  чем-то самописным. В последнее время стало изрядно лениво лазить по конфигурационным файлам, чтоб добавить хост, сервис и т.п., а потом еще и проверять в веб-интерфейсе, все ли видно хорошо. Захотелось некой удобной софтины для мониторинга, с конфигурацией в БД, удобным веб-интерфейсом. В результате был выбран Zabbix и честно говоря, вполне себя оправдывает, разве что требователен к ресурсам.

Приступим:

# cd /usr/ports/net-mgmt/zabbix-server
# make install
┌────────────────────────────────────────────────────────────────────┐
 │                Options for zabbix-server 1.8.1,2                   │
 │ ┌────────────────────────────────────────────────────────────────┐ │
 │ │         [X] MYSQL   Use MySQL backend                          │ │
 │ │         [ ] PGSQL   Use PostgreSQL backend                     │ │
 │ │         [ ] SQLITE  Use SQLite backend                         │ │
 │ │         [ ] IPV6    Support for IPv6                           │ │
 │ │         [ ] LDAP    Support for checking LDAP servers          │ │
 │ │         [X] JABBER  Use jabber media type                      │ │
 │ │         [X] FPING   Use fping for pinging hosts                │ │
 │ │                                                                │ │
 │ │                                                                │ │
 │ │                                                                │ │
 │ │                                                                │ │
 │ │                                                                │ │
 │ │                                                                │ │
 │ │                                                                │ │
 │ │                                                                │ │
 ├─└────────────────────────────────────────────────────────────────┘─┤
 │                       [  OK  ]       Cancel                        │
 └────────────────────────────────────────────────────────────────────┘

Пока он ставится, немного расскажу о идеологии софтины. Состоит она из нескольких частей: сервера, агента, фронтенда. Сервер умеет опрашивать агентов или сами объекты мониторинга (в случае с последними поддерживаются протоколы SNMP и IPMI). Агент ставится на объект мониторинга (версии агента есть для широкого перечня операционных систем, включая винды) и шлет данные на сервер, также умеет выполнять на объекте заданные команды, фронтенд стоит на веб-сервере и показывает весь процесс. К базе данных обращаются сервер и фронтенд, агентам она не нужна. Создаем ее (исходим из того, что MySQL у нас на том же хосте, где zabbix-сервер):

# mysql
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbixpassword';
GRANT USAGE ON * . * TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbixpassword' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `zabbix` ;
GRANT ALL PRIVILEGES ON `zabbix` . * TO 'zabbix'@'localhost';
quit;
# cd /usr/local/share/zabbix/server/create
# cat schema/mysql.sql data/data.sql data/images_mysql.sql | mysql -uzabbix -pzabbixpassword zabbix
# echo zabbix_server_enable="YES" >> /etc/rc.conf
# cp /usr/local/etc/zabbix/zabbix_server.conf.sample /usr/local/etc/zabbix/zabbix_server.conf
# ee /usr/local/etc/zabbix/zabbix_server.conf

Настройки по умолчанию достаточно разумны, потому файл /usr/local/etc/zabbix/zabbix_server.conf небольшой, для справки потом можно будет заглянуть в дефолтный файл:

# Исходящий IP, с него будут осуществляться соединения с агентами и объектами мониторинга
SourceIP=192.168.1.10

# Лог-файл
LogFile=/var/log/zabbix_server.log

# Размер лог-файла, в мегабайтах, 0 отключает ротацию лога
LogFileSize=10

# Уровень дебага, 0 - отключить, 1 - критические ошибки, 2 - ошибки, 3 - предупреждения, 4 - дебаг
DebugLevel=3

# Хост БД
DBHost=localhost

# Название БД
DBName=zabbix

# Пользователь БД
DBUser=zabbix

# Пароль БД
DBPassword=zabbixpassword

# Путь к Mysql-сокету
DBSocket=/tmp/mysql.sock
# Порт SQL-сервера, если используем сокет - не надо
# DBPort=3306

Если заббикс стоит, как в моем случае, в джейле, то на хост-машине надо в /etc/sysctl.conf добавить:

security.jail.sysvipc_allowed=1
kern.ipc.shmall=2097152
kern.ipc.shmmax=2147483648

На этом все, сервер можно запускать:

# touch /var/log/zabbix_server.log
# chown zabbix:zabbix /var/log/zabbix_server.log
# /usr/local/etc/rc.d/zabbix_server start

Теперь займемся фронтендом.

# cd /usr/ports/math/php5-bcmath
# make install
# cd /usr/ports/net-mgmt/zabbix-server/work/zabbix-1.8.1/frontends/php
# cp -R * /usr/local/www/vhosts/zabbix.jared.kiev.ua
# cd /usr/local/www/vhosts/zabbix.jared.kiev.ua/conf/
# cp zabbix.conf.php.example zabbix.conf.php
# ee zabbix.conf.php

Тут вписываем параметры доступа к БД и прочее:

<?php
global $DB;

$DB["TYPE"]             = "MYSQL";
$DB["SERVER"]           = "localhost";
$DB["PORT"]             = "0";
$DB["DATABASE"]         = "zabbix";
$DB["USER"]             = "zabbix";
$DB["PASSWORD"]         = "zabbixpassword";
$ZBX_SERVER             = "localhost";
$ZBX_SERVER_PORT        = "10051";
$ZBX_SERVER_NAME        = "";
$IMAGE_FORMAT_DEFAULT   = IMAGE_FORMAT_PNG;
?>

Все, теперь можно смело заходить в фронтенд с логином Admin и паролем zabbix и заниматься дальнейшей настройкой системы.

Возникла задача мониторить Заббиксом доступность свитчей в сети. Вроде задача тривиальная, однако, пришлось немного потанцевать с бубном, пока нашлось решение. В итоге выкладываю шаблон, он умеет мониторить доступность железки (произвольной), задержку пинга до нее и процент потерь. Желательно установить fping.

Собственно, сам шаблон.

Новая версия Zabbix 2, помимо прочих плюшек, умеет легко и красиво мониторить основные параметры MySQL-серверов. Более того, в ней для этого есть стандартный шаблон Template Default MySQL. И как оказалось, настраивается он в пару нажатий.

Итак, на хосте, который надо мониторить, нам понадобится следующее:

1. Выполняем в MySQL запрос вида
GRANT USAGE ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'superpassword';

2. В zabbix_agentd.conf проверяем подключение дополнительных конфигов и путь к ним:
Include=/etc/zabbix/conf.d/

3. Если при установке агента файл userparameter_mysql.conf не распаковался, создаем его в каталоге из п.2:
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'

UserParameter=mysql.size[*],echo «select sum ($(case „$3“ in both|»") echo «data_length+index_length»;; data|index) echo «$3_length»;; free) echo «data_free»;; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo « where table_schema='$1'»)$([[ "$2" = "all" || ! "$2" ]] || echo «and table_name='$2'»);" | HOME=/var/lib/zabbix mysql -N

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

4. В этом файле обращаем внимание на переменную HOME=/var/lib/zabbix. Именно в этот каталог надо положить файл .my.cnf со следующим содержанием:
[client]
user = zabbix
password = superpassword

5. Все, теперь осталось подключить шаблон к хосту и наблюдать за цифрами и веселыми картинками.

 

 

6.2.2 MySQL

Файл конфигурации misc/conf/zabbix_agentd.conf содержит список пользовательских параметров, которые могут быть использованы для наблюдения за MySQL.

### Set of parameter for monitoring MySQL server (v3.23.42 and later)
### Change -u and add -p if required
#UserParameter=mysql[ping],mysqladmin -uroot ping|grep alive|wc -l
#UserParameter=mysql[uptime],mysqladmin -uroot status|cut -f2 -d":"|cut -f1 -d"T"
#UserParameter=mysql[threads],mysqladmin -uroot status|cut -f3 -d":"|cut -f1 -d"Q"
#UserParameter=mysql[questions],mysqladmin -uroot status|cut -f4 -d":"|cut -f1 -d"S"
#UserParameter=mysql[slowqueries],mysqladmin -uroot status|cut -f5 -d":"|cut -f1 -d"O"
#UserParameter=mysql[qps],mysqladmin -uroot status|cut -f9 d":"
#UserParameter=version[mysql],mysql -V
6.2.2.1 mysql[ping]

Проверить в рабочем ли состоянии MySQL

    Результат: 0 - не запущен 1 - в рабочем состоянии
6.2.2.2 mysql[uptime]

Количество секунд с момента запуска MySQL

6.2.2.3 mysql[threads]

Количество потоков MySQL

6.2.2.4 mysql[questions]

Количество обрабатываемых запросов

6.2.2.5 mysql[slowqueries]

Количество медленных запросов

6.2.2.6 mysql[qps]

Запросов в секунду

6.2.2.7 mysql[version]

Версия MySQL. Пример: mysql Ver 11.16 Distrib 3.23.49, для pc-linux-gnu (i686)