Мониторинг серверов с помощью Zabbix

Думаете, создание больших служб мониторинга - утомительное занятие? Как бы не так, если вы выбрали Zabbix. С ним можно быстро и легко поднять мониторинг больших систем.

Zabbix (www.zabbix.com) - это проект с открытым исходным кодом, но разработчики также предлагают и коммерческую поддержку. Zabbix поддерживает платформы UNIX, Linux, BSD, Mac OS X и Windows и рассчитан на большие системы. Zabbix создан Алексеем Владышевым и его компанией Zabbix SIA. Эта статья написана, когда Zabbix был версии 1.8.1, выпущенной в январе 2010 года. В момент написания статьи в большинстве дистрибутивов Linux в репозиториях содержалась предыдущая версия (1.6). Версия 1.8 существенно от нее отличается, и в этой статье будут упомянуты все основные функции. Вот их краткий список:

  • Распределенный мониторинг.

  • Клиенты для платформ Linux, BSD, Windows, Mac OS X и коммерческих UNIX.

  • Бэкенд в виде базы данных (MySQL, Oracle, PostgreSQL или SQLite).

  • Режим автоматического обнаружения.

  • Веб-интерфейс.

  • Оповещения по электронной почте, SMS или Jabber.

  • Поддержка как методов получения сообщений Zabbix-клиента - как poll, так и trap.

  • Поддержка SNMP.

  • Безагентный мониторинг (пинги, проверка портов и т.п.).

  • Графики.

Хотя рекомендуется устанавливать Zabbix из репозитория вашего дистрибутива Linux, но я соберу Zabbix версии 1.8.1 из исходников на Ubuntu 9.10, для серверной платформы, а бэкендом будет MySQL. Также покажу вам, как настроить Linux-клиента с базовыми функциями мониторинга Zabbix.

Программные требования

Перед тем, как собирать Zabbix из исходников, требуется установить необходимые пакеты:

shell> sudo apt-get install mysql-server apache2 
 ?libapache2-mod-php5 php5-mysql php5-gd 
 ?libmysqlclient15-dev libsnmp-dev libiksemel-dev 
 ?libcurl4-gnutls-dev

Если устанавливаете через графический менеджер пакетов, то имена пакетов - mysql-server, apache2, libapache2-mod-php5, php5-mysql, php5-gd, libmysqlclient15-dev, libsnmp-dev, libiksemel-dev и libcurl4-gnutls-dev.

Установка

Как сервер, так и клиент Zabbix работает от имени пользователя zabbix, поэтому для начала создадим этот аккаунт:

shell> sudo useradd -s /bin/true zabbix

Теперь, создадим базу данных:

shell> mysql -u<username> -p<password>
mysql> create database zabbix;
mysql> quit;

Скачайте исходный код с официального сайта www.zabbix.com/download.php, распакуйте архив и следуйте указанным ниже шагам. Здесь мы создаем схему базы данных и настраиваем начальную конфигурацию. Обратите внимание, что мой бэкенд - MySQL, и я задействую соответствующие файлы схем. Для других баз данных (например, PostgreSQL) имеются другие файлы схем:

shell> sudo tar zxvf zabbix-1.8.1.tar.gz
shell> cd zabbix-1.8.1/create/schema
shell> cat mysql.sql | mysql -u<username> -p<password> zabbix
shell> cd ../data
shell> cat data.sql | mysql -u<username> -p<password> zabbix
shell> cat images_mysql.sql | mysql -u<username> -p<password> zabbix

Чтобы скомпилировать сервер, перейдите (с помощью cd) в корень распакованного каталога с исходными кодами zabbix-1.8, и выполните следующую команду. В этой команде мы задействуем поддержку MySQL, SNMP и Jabber в нашем собираемом сервере:

shell> ./configure --enable-server --with-mysql --with-net-snmp
 ?--with-jabber --with-lib-curl
shell> sudo make install

Рекомендую для клиентов делать статическую сборку. Это упрощает установку клиентов на различных версиях Linux. Команда make install собирает и устанавливает бинарный файл сервера zabbix_server, но не агента. Чтобы собрать клиентский бинарник, перейдите в каталог zabbix-1.8.1/src/zabbix_agent, и выполните еще раз make install. Агент будет установлен в каталог /usr/local/sbin — туда же, куда и сервер:

shell> ./configure --enable-agent --enable-static
shell> cd src/zabbix_agent
shell> sudo make install

Итак, мы собрали два бинарных агентских файла: zabbix_agentd и zabbix_agent. Последний предназначен для запуска агента из суперсервера, такого как inetd, а первый сам работает как демон. Рекомендуется использовать zabbix_agentd.

Настройка сервера и клиента

Zabbix хранит по отдельности настройки сервера и клиента. Примеры конфигурационных файлов лежат в каталоге zabbix-1.8.1/misc/conf. Создайте каталог /etc/zabbix, смените владельца на пользователя zabbix и скопируйте файлы zabbix_server.conf и zabbix_agentd.conf в этот каталог.

Нужно сделать совсем немного изменений в конфигурационные файлы, к тому же они очень хорошо самодокументированы. Главное, что нужно изменить, это два параметра в клиентском конфиге zabbix_agentd.conf, в строках Server= и Hostname=. Первый параметр задает адрес сервера, с которым нужно взаимодействовать, а второй определяет имя хоста клиента.

Еще в серверном конфиге zabbix_server.conf нужно поменять параметры DBUser и DBPassword, и скорее всего, больше ничего не потребуется. Если хотите произвести более тонкую настройку, обратитесь к документации Zabbix, там каждая переменная хорошо описана.

Инициализационные скрипты

В каталоге zabbix-1.8.1/misc/init.d расположено несколько примеров инициализационных скриптов. Скопируйте один из них в /etc/init.d и внесите соответствующие изменения. К примеру, для своей Ubuntu я взял скрипт из каталога debian. Как в серверном, так и в клиентском конфигурационных файлах мне пришлось изменить расположение бинарных файлов, с /home/zabbix/bin на /usr/local/sbin.

Веб-интерфейс Zabbix

Каталог zabbix-1.8.1/frontends/php содержит веб-интерфейс к Zabbix. Скопируйте эту структуру каталогов, например, в DocumentRoot веб-сервера Apache, и откройте соответствующий URL-адрес в своем веб-браузере. Перед вами должно открыться окно Zabbix Introduction (скриншот 1). Этот мастер проверит наличие всех необходимых зависимостей (время выполнения PHP, требования по памяти и т.п.), покажет лицензионное соглашение и проведет вас через все остальные шаги настройки сервера Zabbix.


Скриншот 1. Окно Zabbix Introduction

По завершении конфигурации системы отобразится окно логина. По умолчанию имя пользователя - Admin с паролем zabbix. Конечно, сразу после входа вам нужно поменять этот пароль. Панель веб-интерфейса состоит из двух рядов (см. скриншот 2).


Скриншот 2. Панели веб-интерфейса

Выберите Administration, затем Users. Теперь справа в выпадающем списке выберите Users вместо User Groups. Щелкните по пользователю admin. Отобразится страница настройки пользователя Admin (см. скриншот 3). Сначала поменяйте пароль. Также нужно прописать правильный адрес e-mail (нажмите кнопку Add рядом с надписью Media), потому что в дальнейшем мы настроим оповещения на этот адрес.


Скриншот 3. Страница настроек пользователя Admin

Для удобства можно также поменять язык - выберите в правом верхнем углу Profile, и затем нужный язык.

Добавляем клиента

На клиентскую машину нужно скопировать три файла: клиентский исполняемый файл zabbix_agentd в /usr/sbin, конфигурационный файл zabbix_agentd.conf в /etc/zabbix и скрипт инициализации. Отредактируйте как того требуется zabbix_agentd.conf, в частности присвойте параметру Server= адрес вашего Zabbix-сервера, а параметру Hostname= - имя этой машины. После этого можно запустить Zabbix-агента через скрипт.

Вернитесь на веб-страницу Zabbix-сервера и выберите на панели Настройка (Configuration) > Узлы сети (Hosts). Теперь справа вверху нажмите кнопку Создать узел сети (Create Host). Появится экран Конфигурация узлов сети (Hosts configuration screen, см. скриншот 4). Можно задать вашему хосту любое имя, но я рекомендую оставить короткое имя хоста (то, которое выдается командой hostname -s), а не полное доменное имя. Добавьте хост в группу Linux servers, а в поле DNS имя (DNS name) запишите полное доменное имя. Можно, конечно, выбрать мониторинг по IP-адресу, но я верю, что мой DNS всегда будет работать правильно. Последнее, что нужно сделать на этом экране - это нажать кнопку Добавить (Add) в секции Соединенные шаблоны (Linked templates). Отметьте галочкой Template_Linux и нажмите Выбрать (Select) в нижней части этого выпадающего окна. Вернувшись на экран Конфигурация узла сети, нажмите Сохранить (Save). На вашем клиенте будут мониториться все элементы данных и триггеры, которые присутствуют в шаблоне Template_Linux.


Скриншот 4. Конфигурация узлов сети

Структура мониторинга Zabbix начинается с Элементов данных (Items), они проверяют либо собирают данные. Затем идут триггеры (они отслеживают данные, храняющиеся в Элементах данных), а завершается цепочка Действиями (Actions) - e-mail, SMS или выполнение внешних скриптов.

Элементы данных (Items)

Элементы данных можно назвать "собирателями данных". Некоторые элементы данных уже встроены в бинарный файл агента, другие представляются пользовательскими скриптами. Сразу после установки Zabbix, вы сможете использовать большой набор всевозможных шаблонов, содержащих в себе элементы данных для проверки систем Linux, Solaris, MAC OS X и Windows.

Давайте взглянем на шаблон, который мы использовали с нашим первым клиентом. Введите "Template_Linux" в поле Поиск в правом верхнем углу веб-интерфейса. В результатах поиска вы увидите страницу со ссылками на Группы элементов данных, Элементы данных, Триггеры и Графики (Item Groups, Items, Triggers и Graphs) этого шаблона (см. скриншот 5). Нажмите на ссылку Элементы данных. Все эти элементы данных мониторятся на любом хосте, к которому применен шаблон Template_Linux.


Скриншот 5. Шаблон Template_Linux

Щелкните по элементу данных под названием Free disk space on /. Вы увидите подробности этого элемента данных (см. скриншот 6). Значение большинства полей интуитивно понятно. Самые важные среди них:

  • Описание (Description): это поле описывает суть проверки, в свободной форме. Обратите внимание, что в этом поле присутствует переменная $1. Zabbix подставляет вместо этой переменной значение первого поля в ключе (будет описано далее).

  • Тип (Type): тип Zabbix agent означает, что проверка будет выполнена самим агентом, работающим на клиенте, через определенные промежутки времени. Эта проверка встроена в исполняемый файл агента, примером таких проверок являются определение свободного пространства на диске, количество свободных/задействованных inode, либо внешний пользовательский скрипт. Другой тип элемента данных - Zabbix Trapper. Zabbix Trapper ведет себя как ловушка SNMP. Его значение обновляется только в том случае, когда клиент отправляет новые данные посредством утилиты zabbix_sender. К примеру, у вас есть задание cron, которое занимает 30 минут. По обычному сценарию, Zabbix-сервер бы ожидал ответа от клиента, выполняющего данный скрипт, и до этих пор не рвал бы соединение. Однако лучшим решением является добавление cron-задания так, чтобы программа zabbix_sender сама бы по получению нового значения отправляла бы его на Zabbix-сервер.

    Еще одним типом является Простая проверка (Simple checks). Она используется для безагентных клиентов — к примеру, выполнение пинга хоста или проверки портов (e-mail, SSH и так далее) на внешних хостах.

  • Ключ (Key): в этом поле записано "выражение", которое будет проверяться. Это может быть как встроенный ключ, как например, в нашем случае, так и ваш собственный скрипт, который вы напишете. В официальной документации Zabbix более подробно описаны ключи и выражения.


Скриншот 6. Элемент данных Free disk space on /

Также можно указать Zabbix'у, каков тип возвращаемых данных: текстовый, символьный или числовой, а также множитель для возвращаемого значения. Также вы можете указать, как долго будут сохраняться исторические данные и динамику изменений. В секции Группы элементов данных можно сгруппировывать схожие по смыслу проверки. К примеру, добавив элемент данных для проверки свободного места в другой точке монтирования, вы логично сможете добавить его в группу элементов данных Filesystem.

Triggers (Триггеры)

Щелкните по ссылке Триггеры (Triggers) в глобальных результатах поиска (скриншот 5). Триггер Zabbix отслеживает значения Элементов данных. Если значение превышает предопределенный порог, тогда ему назначается один из шести уровней важности. На скриншоте 7 отображены триггеры шаблона Template_Linux. Здесь отображены: уровень важности, статус, имя и выражение, которые, собственно, и составляет суть триггера.


Скриншот 7. Триггеры шаблона Template_Linux

Щелкните на триггере Low free disk space on Template_Linux volume /, и вы увидите окно Настройка триггеров (Configuration of Triggers) (см. скриншот 8).


Скриншот 8. Окно Настройка триггеров

Первое поле Имя (Name) должно описывать суть проблемы. К примеру, предложение "IMAP порт не отвечает на сервере123" вносит гораздо больше ясности, чем "Почта упала". Это тот текст, который вы захотите увидеть в электронном письме, на странице Zabbix или в SMS-сообщении, поэтому позаботьтесь о его ясности и информативности.

Поле Выражение (Expression) содержит имя наблюдаемого Элемента данных и граничное значение. К примеру, в данном случае выражение {Template_Linux:vfs.fs.size[/,pfree].last(0)}<10", что означает отслеживать машину с именем Template_Linux и его ключ vfs.fs.size[/,pfree]. Если последнее значение окажется меньше 10, тогда назначить триггеру важность Высокая (High). Нажмите Выбрать (Select). Здесь вы можете сменить выражение, по которому срабатывает триггер. Можно работать со средними, абсолютными значениями или максимальным значением за определенный период времени. Сейчас, однако, я оставлю триггер как есть, изменю лишь значение, по которому он срабатывает. Поэтому закрываем всплывающее окно Условие (Condition) и меняем граничное значение на 5% - изменяем в конце строки число 10 на 5. Сохраним изменения, нажав кнопку Сохранить (Save).

Действия (Actions)

Действия происходят при срабатывании триггера. Действием может быть сообщение электронной почты, SMS- или Jabber-сообщение, либо запуск внешнего скрипта. Давайте настроим отправку e-mail администратору (т.е. нам) в случае срабатывания любого триггера с важностью Чрезвычайная (Disaster). Выберите Настройка > Действия (Configuration > Actions), потом нажмите кнопку Создать действие (Create Action) в правой верхней части экрана. Появится окно Настройка действий (Configuration of Actions, см. скриншот 9). Введите в поле Имя (Name) что-нибудь информативное и нажмите кнопку Новый (New) в секции Условия действия (Action conditions). Выберите Важность триггера (Trigger severity) из появившейся секции Новое условие (New Condition) и поменяйте его значение с Информация (Information) на Чрезвычайная (Disaster). Нажмите кнопку Добавить (Add). Потом нажмите кнопку Новая (New) в другой секции - Операции действия (Action operations). Настройте отправку сообщений одному администратору Admin (см. скриншот 10). Нажмите Добавить (Add). Наконец, нажмите кнопку Сохранить (Save). Теперь при срабатывании любого триггера, важность которого установлена как Чрезвычайная, пользователю Admin будет отправлено электронное письмо. Можно создавать действия для отдельных триггеров и для отдельных хостов, а действие, которое мы только что создали, действует глобально. Не забывайте, что это всего лишь пример.


Скриншот 9. Окно Настройка действий


Скриншот 10. Настраиваем операции

Ежедневный мониторинг

Есть множество способов наблюдать за настроенными клиентами. По моему мнению, наиболее информативным окном является Мониторинг > Триггеры (убедитесь в том, что в выпадающих меню справа Группа (Group) и Узел сети (Host) выбрано все (all). В этом окне Zabbix показывает все активные триггеры, их уровень важности, дата последнего изменения (Возраст) и другие поля. Это окно можно рассматривать как список незавершенных дел системного администратора.


Paul Tader - независимый консультант по внедрению решений с открытым исходным кодом в Чикаго, где он занимается настройкой Linux и BSD с середины 90-х, а также преподает на курсах сертфикации Linux в местном колледже. Не стесняйтесь писать письма Полу на адрес [email protected]

Статью перевел Александр Тарасов. Работает системным администратором одной барнаульской фирмы. Увлекается отказоустойчивыми системами, а также футболом. Ведет личный блог oioki.ru и рекомендует всем системным администраторам бекапиться почаще. С ним можно связаться по e-mail [email protected], а также по Jabber: [email protected].


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.
Источник статьи