From: Andrew Jelly <ajelly@gmail.com.>
Newsgroups: email
Date: Mon, 30 Aug 2008 18:21:07 +0000 (UTC)
Subject: Установка Zabbix 1.4.x c нуля
Тут речь пойдет об установке Zabbix версий 1.4.x (поскольку версии
1.3.x не актуальны, а 1.5 находится в бете, и возможно, подойдет не всем).
Небольшое лирическое отступление
Прежде всего, почему именно Zabbix?
Если говорить коротко - то потому, что эта система написана так, как я
написал бы её сам. Имеется ввиду как архитектура, так и выбор
языков/инструментов. В свое время я уже собирался делать что-то свое на
коленке, но по счастью обнаружил Zabbix (с большим трудом, поскольку он
слабо раскручен в поисковиках).
Зачем вообще нужна эта система? Попросту говоря - мониторить сервера и
устройства. Но мониторинг - понятие многозначное. Для мониторинга
доступности я (да и многие другие) с успехом пользуюсь
Nagios и пр. Мне нужен был не только (и не
столько даже) мониторинг доступности, сколько мониторинг нагрузки и
производительности, а также сбор статистики. И Zabbix для этой задачи
идеально (IMHO) подходит.
Как устроена эта система?
* Имеется сервер, собирающий данные с клиентов и кладущий их в базу
данных (MySQL, Postgres, etc)
* Имеются агенты, работающие на удаленных машинах, и отдающие данные
по запросу сервера (или по своей инициативе)
* Имеется наконец front end на PHP который рисует красивые графики и
позволяет настроить все это хозяйство (что собственно мониторить)
Как видим, архитектура простая и понятная. Кроме того, имеются важные (с
моей точки зрения) особенности:
* Zabbix может работать без всякого SNMP и MIB (но может и с ним (если
вы не разделяете мою ненависть к этому протоколу))
* Zabbix (как сервер так и агент) полностью написан на С, без всякого
Perl-а и других птичьих языков (впрочем - вы можете это изменить)
* Zabbix имеет отличный (хоть и глючноватый местами) front end на PHP,
т.е. легко укладывается в рамки LAMP.
Вот пожалуй и все, что я хотел отметить в лирическом отступлении (мнение
автора может не совпадать с мнением редакции).
Установка агента
Вопреки традиции, начну с установки агента, ибо она проще и меньше
зависит от версии. Разумеется, рассматривается установка из исходников.
Если вас интересуют другие варианты (порой, находятся любители rpm), то
неплохую описанку установки под Gentoo я видел тут.
Данная инструкция создана на базе
этого документа.
Если вам ближе английский язык - используйте его.
Итак, предположим вы уже скачали архив c Zabbix (из download). Далее выполняем:
tar -xvzf zabbix-1.4.tar.gz
cd zabbix-1.4/
./configure --enable-agent
make
sudo make install
Ну вот, если все собралось - самое трудное позади.
Попробуем запуститься:
/usr/local/bin/zabbix_agent -p
И получаем
/usr/local/bin/zabbix_agent [578]: Cannot open config file
[/etc/zabbix/zabbix_agent.conf] [No such file or directory].
Не удивительно. Мы забыли создать конфигурационные файлы!
Скопируем их.
Разумеется, одного копирования мало. Надо подправить конфигурацию под наши нужды.
Я рассмотрю сценарий запуска из под inetd. В ранних бетах мне никак не
удавалось запустить stand alone агента, и я забросил эти попытки.
Поскольку своего позитивного опыта у меня нет, то утомлять читателя
пересказом было бы не совсем честно.
Сначала файл **zabbix_agent.conf**
# Тут пишем адрес сервера, с которого разрешено принимать запросы
Server=192.168.1.86,192.168.1.82
# Таймаут на обработку запроса в секундах
Timeout=3
####### USER-DEFINED MONITORED PARAMETERS #######
# Пользовательские параметры. Самое важное, если вам недостаточно
# параметров собираемых агентом самостоятельно.
# Опыт показывает, что их всегда недостаточно :)
UserParameter=system.test,who|wc -l
Может показаться, что этого достаточно, но у меня бывали проблемы, если
не заполнен список серверов в файле для активного агента.
Посему, поправим и его (**zabbix_agent.conf**):
# This is config file for zabbix_agentd
# To get more information about ZABBIX, go http://www.zabbix.com
############ GENERAL PARAMETERS #################
# List of comma delimited IP addresses (or hostnames) of ZABBIX servers.
# No spaces allowed. First entry is used for sending active checks.
# Note that hostnames must resolve hostname->IP address and
# IP address->hostname.
Server=192.168.1.86,192.168.1.82
# Server port for sending active checks
#ServerPort=10051
# Unique hostname. Required for active checks.
Hostname=zabbix.lan
# Listen port. Default is 10050
#ListenPort=10050
# IP address to bind agent
# If missing, bind to all available IPs
#ListenIP=127.0.0.1
[skip...]
Я не привожу этот файл полностью, поскольку он нам не очень интересен,
и, кроме того, легко изучаем.
Что-то работает. Агент выведет список поддерживаемых им параметров. Их
должно быть около 50.
Теперь попробуем доступиться к агенту удаленно. Для этого необходимо
внести его в config inetd (в нашем случае - xinetd).
Создаем файл **/etc/xinetd.d/zabbix**
service zabbix_agent
{
port = 10050
socket_type = stream
wait = no
user = zabbix
server = /usr/local/bin/zabbix_agent
log_on_failure += USERID
disable = no
}
Перезапустим xinetd...
/etc/init.d/xinetd restart
и воспользуемся специальной утилитой которая имеется в комплекте. С её
помощью можно запросить значение любого параметра у агента.
Если все сделано правильно будет напечатано некое число, например 1.
Это означает что агент настроен и работает!
Установка сервера
Сервер Zabbix - ключевой элемент в системе, однако его установка
(обычно) довольно проста.
Прочесть официальную документацию о ней можно тут.
Если на машине где бежит сервер еще не установлен agent (т.е. это выделенная машина) проделаем ряд операций общих для обоих:
Далее, не забываем:
useradd zabbix -d /dev/null -s /sbin/nologin
в файл **/etc/services** пишем
zabbix_agent 10050/tcp
zabbix_trap 10051/tcp
Затем разворачиваем архив:
tar -xvzf zabbix-1.4.2.tar.gz
cd zabbix-1.4.2
запускаем configure предварительно установив все, что может понадобиться
серверу. А это прежде всего интерфейс базы данных (MySQL, Postgres или
Oracle). Заметим, что сама база может стоять и на другой машине, равно
как и front end. Главное чтоб имелась библиотека, например
libmysqlclient.
./configure --enable-server --with-mysql
make
sudo make install
В большинстве случаев - сервер успешно соберется. Однако, может
оказаться, что в Makefile отсутствует та или иная библиотека (замечалось
в 1.4)
В этом случае, нужно пойти в Makefile того модуля, который не смог
собраться, и добавить библиотеку руками. Например:
LIBS = -lm -lresolv -lnsl
Однако, в версии 1.4.2, на примере которой мы обсуждаем установку,
подобных проблем не возникло.
Обратите внимание! Мы собираем сервер без поддержки SNMP. Если она вам
необходима, добавьте опцию '--with-net-snmp'
После чего копируем
cp misc/conf/zabbix_server.conf /etc/zabbix/
и правим файл zabbix_server.conf.
Содержимое может быть, например, таким (оставлены только необходимые
параметры):
ListenPort=10051
SenderFrequency=30
DebugLevel=3
Timeout=5
# Name of PID file
PidFile=/var/tmp/zabbix_server.pid
# Name of log file
# If not set, syslog is used
LogFile=/tmp/zabbix_server.log
# Location for custom alert scripts
AlertScriptsPath=/home/zabbix/bin/
# Database host name
# Default is localhost
DBHost=192.168.1.82
# Database name
# SQLite3 note: path to database file must be provided. DBUser and DBPassword are ignored.
DBName=zabbix
# Database user
DBUser=zabbix
# Database password
# Comment this line if no password used
DBPassword=my_mega_password
# Connect to MySQL using Unix socket?
#DBSocket=/tmp/mysql.sock
Внимание! В нашем примере база данных находится на другом хосте, и связь
с MySQL идет по TCP, что не обязательно.
Создание базы данных
База данных необходима как для работы front end-а так и для работы сервера
Есть несколько путей для ее создания, воспользуйтесь любым, привычным вам.
Руководство предлагает:
Я всегда делаю эти операции через phpMyAdmin, но это не догма.
После создания базы можно наконец запустить сервер, предварительно скопировав в init.d
подходящий для вашей системы script. В моем случае это gentoo:
cp misc/init.d/gentoo/zabbix-server /etc/init.d/
Финальный аккорд:
/etc/init.d/zabbix-server start
Если все хорошо, то в файле
/tmp/zabbix_server.log вы увидите что-то вроде:
6055:20071019:143300 Starting zabbix_server. ZABBIX 1.4.2.
6055:20071019:143300 **** Enabled features ****
6055:20071019:143300 SNMP monitoring: NO
6055:20071019:143300 WEB monitoring: YES
6055:20071019:143300 Jabber notifications: NO
6055:20071019:143300 **************************
Работа с Web-интерфейсом
Итак, система заработала. Но пока она еще ничего не мониторит.
Действительно, настройку мы делаем один раз, а ежедневное использование
системы сводится к просмотру графиков нагрузки, добавлению хостов,
отслеживанию параметров, и борьбе с головной болью.
Чтобы адекватно настроить zabbix нам придется понять, какими сущностями
он оперирует при сборе и анализе данных. Сущностей не так уж много.
* Хосты (hosts)
* Показатели (items)
* Триггеры (triggers)
* Акции (actions)
* Графики (graphs или charts)
* Экраны (screens)
Итак, какова же иерархия этих сущностей? Очень простая: на хостах
контролируются определенные показатели. Иногда, когда они переходят
заданную границу срабатывают триггеры, что вызывает собой акции. Кроме
того, рисуются графики показателей. Один или несколько графиков можно
обьеденить в экран. Вот и все (на самом деле, есть достаточно много
второстепенных сущностей, но для простоты я их опущу).
С чего начинается <del>родина</del> конфигурация мониторинга сервера?
Разумеется, с определения хоста (я надеюсь, вы уже активировали account
администратора, и залогинились в zabbix (все операции описанные ниже
надо делать в меню конфигурации)).
hosts
Здесь задается имя, группа, IP адрес или доменное имя, порт агента,
статус и template (грубо говоря - схема сбора данных).
Задав все эти параметры, можно переходить к показателям (items).
items
Нет ничего проще - показателем может быть любой системный параметр,
значение которого может вычислить zabbix-агент. Показатель может быть
как "встроенным" (например обьем свободной памяти, загрузка CPU) так и
пользовательским; например, количество транзакций вашего Postgres за
последнюю минуту, или даже текущее настроение вашей девушки (если
конечно вы научите агента его определять). При создании показателя можно
указать достаточно много параметров, важнейшие из которы: тип, интервал
обновления, приложение (CPU, Memory, Filesystem) и группа. Интервалы
можно задавать весьма гибко, но мы обойдем этот момент.
Дальше идут триггеры.
triggers
это чуть сложнее, но тоже не бином Ньютона. Триггер взводится, если
какой-то из показателей перешел через граничное значение. Например,
обьем свободной памяти опустился ниже 100 Mb.
actions
При взводе триггера, иногда бывает полезно выполнить определенное
действие, сиречь - акцию. К примеру - послать письмо админу, или что-то
в этом роде.
Впрочем, желательно, чтобы триггеры на наших серверах срабатывали как
можно реже.
Наконец, мы переходим к самым часто используемым сущностям. Это графики
и экраны. Графики zabbix рисует как бог (правда, при масштабировании по
времени порой происходят непонятные вещи).
graphs
Чтобы увидеть график, надо задать его имя, размеры для отрисовки, и
показатель, который мы хотим отобразить. Для показателя задается
дополнительно цвет и вид заливки (только линия, залитый регион, etc). На
самом деле, на одном графике может быть сведено несколько показателей,
но я не советую добавлять больше двух, т.к. это не повысит
информативность графика. Для анализа нескольких показателей следует
воспользоваться экранами (screens).
screens
Конфигурация экрана очень проста. Это количество его строк и колонок.
Когда экран создан, надо ткнуться в любую ячейку, и указать график,
который мы хотим там видеть. Понятно, что для гармоничного отображения,
желательно подобрать графики одинакового размера.
После того, как все необходимые графики и экраны созданы, можно
переходить из меню конфигурации в меню мониторинга.
Здесь мы можем лицезреть наши родные графики
graphs
и конечно, экраны
screens
Каждый график можно проматывать во времени, а также менять масштаб
временной оси (1 час, 8 часов, сутки, неделя, месяц, год).
А их красота и информативность зависят только от вашей ловкости рук.
Какие тонкие моменты имеются при работе с web-UI? Почти никаких.
Единственная неочевидная порой вещь - почему график того или иного
параметра девственно чист? Обычно - причина проста. Отвалился монитор
(или сам хост) а нотификация об этом не настроена, или же скрипт,
поставляющий значения параметра содержит ошибку, и не выдает нормальное
значение. Отсюда вытекает простое практическое правило: добавив или
изменив определенный параметр, подождите несколько минут, и убедитесь,
что он корректно обновляется на графиках.