Zabbix — распределённая система мониторинга
Zabbix — распределённая система мониторинга, которая позволяет мониторить любые измеримые параметры деятельности сети и серверов (сервисов), отслеживать нарушение предопределённых границ значений параметров и извещать заинтересованных лиц (e-mail, SMS, XMPP (jabber), скрипт), средства эскалации и подтверждения извещения. Хорошо проработанные средства построения графиков и отчётов, возможно соотнесение с планом или картой. Можно использовать для проверки доступности и контроля производительности. Данные могут получать как с помощью запросов от сервера агентам, устанавливаемым на контролируемые хосты, так и получением сообщений от активных агентов, возможности агентов могут быть расширены скриптами. В качестве агента можно использовать SNMP сервер (v1 и v2 и v3, запрос и trap, динамические индексы с версии 2.2), IPMI, без агентов можно мониторить доступность определённых сервисов (почта, веб, FTP, LDAP, SSH, telnet, СУБД, сервера приложений Java). Позволяет определить SLA (через группу триггеров и выражение) и отслеживать их выполнение. Возможно автообнаружение (ICMP ping) и авторегистрация агентов. Поддержка JMX (Java Management Extensions) с версии 2.0.
Конфигурация и данные хранятся в СУБД (MySQL/InnoDB для тяжёлой нагрузки, PostgreSQL, Oracle, SQLite — до версии 1.8). Возможен экспорт и импорт конфигурации (части конфигурации) в XML (zabbix_export.xml, экспортируется не всё! комплексные отчёты и карты с версии 1.8). Интерфейс пользователя к данным мониторинга и настройкам — через браузер (сам интерфейс в кодировке UTF-8, но данные — нет!), Apache 1.3.12 или новее, PHP 4.3 или новее (модули php-gd, php-bcmath, php-mysql/php-sqlora8/php-pgsql/php-sqlite3). Возможна привязка аутентификации к LDAP. Настройка облегчается наличием параметризованных шаблонов (template). Требуется синхронизации времени в сети. Возможно закрытие интерфейса с помощью SSL/TLS, коммуникации между компонентами открытые, защита по адресу IP. Имеется интерфейс (API) взаимодействия с другими приложениями (JIRA, Puppet).
Разработка Zabbix LLC (Alexei Vladishev), ранее Латвийской компании Zabbix SIA (2005). Лицензия — GPL2, бесплатен даже для коммерческого использования. Имеется коммерческая поддержка. Версия на момент описания — 1.6.5. Поддержка версии 1.8 уже закончилась, в версии 2.0 исправляются только критические ошибки. Сервер может быть установлен на Linux, Solaris, HP-UX, AIX, FreeBSD, NetBSD, OpenBSD, Mac OS/X. Клиенты (агенты) могут быть также установлены на Windows 2000, Windows Server 2003/2008/2012, Windows XP, Windows Vista, Windows 7, Windows 8. Базовой системой для разработчика является Ubuntu (?). Обещается совместимость всех старых версий агентов с новыми версиями сервера. Обещается совместимость БД внутри версии и скрипты преобразования к новой версии.
Архитектура системы
- сервер Zabbix регулярно опрашивает пассивных агентов (Zabbix, SNMP) и принимает данные от активных агентов, при необходимости извещает кого попало; потоки (все выглядят как zabbix_server):
- Poller — извлекает данные от агентов SNMP и Zabbix
- Pinger — ICMP ping; используется внешняя утилита fping, которая включает опцию RECORD_ROUTE, к которой многие устройства относятся плохо
- Node Watcher — отслеживает межузловые коммуникации
- процесс очистки от старых записей
- Trapper — приёмник данных от активных агентов, журналов и Sender
- Timer — обрабатывает триггерные выражения, зависящие от времени (?)
- агент Zabbix работает на сервере, который необходимо мониторить; выполняется в режиме демона или inetd/xinetd (не рекомендуется); может работать в активном режиме (запрашивает список требуемых параметров и посылает их сам) и пассивном режиме (ждёт запросов от сервера); возможна авторегистрация агента на сервере, обеспечивается аутентификация
- zabbix_sender — утилита, посылающая данные на сервер (используется в долгоиграющих скриптах для периодической посылки значений параметров)
- прокси для системы мониторинга Zabbix (zabbix_proxy, /etc/zabbix/zabbix_proxy.conf) собирает и принимает данные с нескольких агентов для сервера Zabbix; удобен для установки в удалённом филиале; не разбирался
- СУБД для хранения собранных данных, конфигурации, событий и пр.
- HTTP сервер (Apache и PHP), обеспечивающий интерфейс пользователя
- zabbix_get — утилита для опроса агентов (используется при отладке)
Контролируемые объекты называются хостами (host). Их можно группировать. Хост может входить в несколько групп. Профиль (profile) хоста — набор сведений для инвентаризации о типе оборудования, модели, расположении, серийном номере и пр.. Заполняется вручную. Каждый контролируемый параметр хоста называется элементом данных (item). Текущее значение элементов данных опрашивается в дискретные моменты времени с заданным интервалом. Система позволяет посмотреть очередь невыполненных запросов (меню администратора). Триггер (trigger) задаётся с помощью логического выражения от значений элементов данных. Приложение (application) есть множество элементов данных хоста, связанных с одним реальным приложением. Элемент данных может входит в несколько приложений. Используется для группировки в вебинтерфейсе и выражениях триггеров. Событием (event) называется изменение состояния триггера от FALSE к TRUE или от TRUE к FALSE (возможно с промежуточным состоянием UNKNOWN). Действие (action) является реакцией системы на событие. Определяется для события или группы событий.
Реализован распределённый мониторинг. Главный узел конфигурирует подчинённые (proxy) и собирает с них данные.
Элементы данных
Каждый контролируемый параметр хоста называется элементом данных (item). Данные могут собираться сервером напрямую (простые проверки, SNMP, IPMI), внешними скриптами и с помощью агентов (клиентов zabiix), работающими на контролируемых серверах. Агенты могут собирать данные встроенными средствами и с помощью скриптов. Веб-мониторинг позволяет извлекать данные с HTML страниц (специальный модуль). Имеется некоторое количество внутренних проверок работоспособности самого сервера zabbix и агрегированные проверки. Некоторые типы (key) элементов данных могут иметь параметры, заключаемые в квадратные скобки. Часть параметров является необязательной. Не все типы элементов данных поддерживаются на всех типах ОС (в документации есть таблица для какой-то старой версии). При добавлении элемента данных в общем случае указывается
- описание, может содержать макросы: $N — N-ый параметр элемента данных
- имя (тип, key), под которым он будет собираться, храниться и извлекаться
- тип данных
- целое 64 бита без знака (u)
- плавающее число (d)
- строка до 255 байт (s, Latin1?)
- текст неограниченной длины (t)
- журнал (m) — специальная модификация текста для хранения журналов
- основание счисления для целых чисел (десятичное, восьмеричное или шестнадцатеричное)
- единица измерения (для числовых данных) — строка будет выводиться сразу за значением, числа преобразовываться к кило, мега и гига; встроенные единицы измерения:
- b или bps
- unixtime (секунды абсолютные, выводится в формате yyyy.mm.dd hh:mm:ss)
- uptime (секунды относительные, выводится в формате N days, hh:mm:dd)
- s (секунды относительные, выводится в формате YYyMMmDDdHHhMMm)
- на сколько надо умножать входные данные
- интервал опроса (в секундах)
- гибкий интервал позволяет задать различные интервалы опроса в разное время суток
- время хранения данных (в сутках)
- время хранения суммированных данных (трендов, ежечасные max, min и avg)
- активировать или нет (может быть переведён в состояние неподдерживаемого)
- что хранить (полученные данные, изменения между измерениями, изменения за секунду)
- что показывать (непосредственно хранимое или извлекать строку из таблицы отображения по индексу; таблицы отображения (только для целых) можно редактировать и создавать в разделе Настройка/Общие параметры/Преобразование значений; при этом остаётся возможность смотреть графики)
- в какие приложения (группы элементов данных) включить элемент данных
Специальный тип данных «status», который определяется, если для хоста мониторится хотя бы один параметр (0 — хост доступен, 2 — хост недоступен).
Типы данных, собираемые агентами самостоятельно:
- agent.ping (целое, 1)
- agent.version (строка)
- kernel.maxfiles (целое)
- kernel.maxproc (целое; в Linux не поддерживается)
- log[имя-файла,регулярное-выражение] (при активном мониторинге посылает каждую добавленную в файл строку на сервер; требуются права на чтение файла для пользователя zabbix; данные на сервере д.б. типа log и ZABBIX Agent (active); не более 10 строк в секунду; отслеживается размер файла и текущая позиция, чтобы ничего не пропустить и не удвоить)
- net.if.collisions[имя-интерфейса] (целое; коллизий на указанном интерфейсе)
- net.if.in[имя-интерфейса,bytes|packets|errors|dropped] (целое)
- net.if.out[имя-интерфейса,bytes|packets|errors|dropped] (целое)
- net.if.total[имя-интерфейса,bytes|packets|errors|dropped] (целое)
- net.tcp.dns[ip-адрес,домен] (1 — можно получить данные по указанному доменному имени; ip-адрес игнорируется, используются настройки /etc/resolv.conf)
- net.tcp.listen[порт] (1 — порт открыт; в Linux не поддерживается (?))
- net.tcp.port[ip-адрес,порт] (1 — можно соединиться с указанным портом)
- net.tcp.service[имя-сервиса,ip-адрес,порт] (0 — невозможно соединиться, 1 — TCP соединение удачно, 2 — истекло время ожидания; сервис: ssh, ntp, ldap, smtp, ftp, http, pop, nntp, imap, tcp
- net.tcp.service.perf[имя-сервиса,ip-адрес,порт] (0 — сервис не работает, иначе количество секунд, потраченных на соединение
- proc.mem[имя-процесса,имя-пользователя,avg|max|min|sum,фильтр-командной-строки] (используемая указанным процессом/процессами память в байтах; любой параметр или все параметры можно опустить; не отличает процессы от потоков :()
- proc.num[имя-процесса,имя-пользователя,all|run|sleep|zomb,фильтр-командной-строки] (количество указанных процессов; любой параметр или все параметры можно опустить)
- system.boottime (время в момент загрузки в формате UNIX
- system.cpu.intr (количество прерываний)
- system.cpu.load[номер-процессора,avg1|avg5|avg15] (берётся из uptime)
- system.cpu.num (количество процессоров (ядер))
- system.cpu.switches (количество переключений контекста; в Linux не поддерживается)
- system.cpu.util[номер-процессора,idle|nice|user|system|kernel|wait|interrupt|softirq|steal,avg1|avg5|avg15] (загрузка процессора в процентах; не работает при тестировании: «Collector is not started!»; wait переименован в iowait )
- system.run[команда-оболочки,wait|nowait] (указанная команда выполняется на удалённом хосте, результат возвращается в режиме wait; агент д.б. сконфигурирован в режиме EnableRemoteCommands)
- system.hostname
- system.localtime (локальное время в формате UNIX)
- system.swap.in[имя-устройства,count|pages] (в Linux не поддерживается)
- system.swap.out[имя-устройства|all,count|pages] (в Linux не поддерживается)
- system.swap.size[имя-устройства|all,free|total|pfree|pused] (в байтах или процентах)
- system.uname (uname -a)
- system.uptime (в секундах)
- system.users.num (who|wc -l)
- vfs.dev.read[имя-устройства|all,sectors|operations] (операций чтения или секторов всего)
- vfs.dev.write[имя-устройства|all,sectors|operations] (операций записи или секторов всего)
- vfs.file.cksum[имя-файла] (целое, cksum указанного файла)
- vfs.file.md5sum[имя-файла] (строка, md5sum указанного файла; размер файлов до 64МБ)
- vfs.file.exists[имя-файла] (0 — файл не существует, 1 — файл существует
- vfs.file.regexp[имя-файла,регулярное-выражение] (поиск строки в файле, возвращается найденная строка
- vfs.file.regmatch[имя-файла,регулярное-выражение] (поиск строки в файле, 0 — не найдена, 1 — найдена
- vfs.file.size[имя-файла] (размер в байтах, требуются права на чтение файла)
- vfs.file.time[имя-файла,modify|access|change] (время в формате UNIX)
- vfs.fs.inode[файловая-система,total|free|used|pfree|pused] (количество inode в штуках и процентах)
- vfs.fs.size[файловая-система,total|free|used|pfree|pused] (количество места в килобайтах и процентах)
- vm.memory.size[total|shared|free|buffers|cached] (объём ОП в байтах)
- web.page.get[адрес-хоста,локальная-часть-URL,порт] (возвращает полученную HTML страницу; EOF — при ошибке)
- web.page.perf[адрес-хоста,локальная-часть-URL,порт] (возвращает время загрузки страницы в секундах)
- web.page.regexp[адрес-хоста,локальная-часть-URL,порт,регулярное-выражение,длина] (возвращает первое вхождение регулярного выражения; EOF — ошибка)
- специфические для MS Windows (eventlog, perf_counter, service_state, proc_info)
- wmi.get() — Windows Management Instrumentation (WMI)
Возможности агентов могут быть расширены с помощью внешних скриптов. Для описания внешнего скрипта в конфигурационный файл добавляется строка (требуется перезапуск агента):
Команда может иметь позиционные параметры (при использовании указываются в квадратных скобках, так же как и для встроенных типов данных):
Простые проверки производятся сервером удалённо без использования агентов. Типы данных, собираемые простыми проверками:
- tcp|ftp|http|imap|nntp|pop|smtp|ssh|telnet|ldap,ip-адрес,порт (0 — соединение не принято, 1 — соединение принято, 2 — время ожидания истекло)
- ftp_perf|http_perf|imap_perf|nntp_perf|pop_perf|smtp_perf|ssh_perf,ip-адрес,порт (0 — сервер недоступен, иначе число милисекунд, потраченных на соединение)
- icmpping (0 — неудача, 1 — успех)
- icmppingsec (время оборота)
Триггеры
Триггер (trigger) задаётся с помощью логического выражения от значений единиц данных и может принимать значения FALSE, TRUE и UNKNOWN. Есть традиция определять триггеры так, чтобы значение TRUE указывало на наличие проблемы. Выражение перевычисляется каждый раз при получении очередного значения единицы данных, используемой в выражении. Выражения строятся с использованиемм бинарных операторов и функций над элементами данных, а также констант (числа и числа с двоичными множителями (K, M, G)). В выражении можно использовать единицы данных различных хостов. Для задания приоритета вычислений необходимо использовать круглые скобки. Синтаксис извлечения значения элемента данных:
Операторы (перечислены в порядке убывания приоритета, преобразование типов — ?):
Функции (имя функции записывается через точку после имени типа элемента данных; параметры указываются в круглых скобках через запятую; параметры необходимо указывать даже для тех функций, которые их игнорируют или не имеют; некоторые параметры имеют значения по умолчанию и их можно опускать):
- abschange (абсолютная разница между последним и предпоследним значением; для строк: 0 — значения равны, 1 — не равны)
- avg (среднее значение за указанный интервал в секундах или за указанное количество отсчётов (число предваряется символом ‘#’))
- delta (разность между максимумом и минимумом за указанный интервал в секундах или за указанное количество отсчётов (число предваряется символом ‘#’))
- change (разница между последним и предпоследним значением; для строк: 0 — значения равны, 1 — не равны)
- count (количество отсчётов, удовлетворяющих критерию, за указанный интервал в секундах или за указанное количество отсчётов (число предваряется символом ‘#’); критерий задаётся вторым (с чем сравнивать) и третьим параметром (как сравнивать — указывать в кавычках: eq, ne, gt, ge, lt, le); для плавающих чисел сравнение приближённое; для строк, журналов и текстов ищется вхождение шаблона)
- date (дата в формате YYYYMMDD)
- dayofweek (1 — понедельник, 7 — воскресенье)
- diff (0 — последнее и предпоследнее значения равны; 1 — различаются)
- fuzzytime (1 — временной штамп элемента данных различается от времени сервера не более указанного числа секунд)
- iregexp (1 — указанное в качестве первого параметра регулярное выражение соответсвует значению элемента данных за указанный интервал в секундах или за указанное количество отсчётов (число предваряется символом ‘#’); без учёта регистра символов)
- last (N-ое с конца значение элемента данных (число предваряется символом ‘#’); порядок гарантируется с точностью до секунды; last(0) — это last(#1))
- logseverity (для event log)
- logsource (для event log)
- max (максимум за указанный интервал в секундах или за указанное количество отсчётов (число предваряется символом ‘#’))
- min (минимум за указанный интервал в секундах или за указанное количество отсчётов (число предваряется символом ‘#’))
- nodata (1 — если за указанное число секунд не было полученно данных; нельзя указывать менее 30 секунд)
- now (время в формате UNIX)
- prev (предпоследнее значение; last (#2))
- regexp (1 — указанное в качестве первого параметра регулярное выражение соответствует значению элемента данных за указанный интервал в секундах или за указанное количество отсчётов (число предваряется символом ‘#’); с учётом регистра символов)
- str (1 — указанная в качестве первого параметра подстрока найдена в элементе данных за указанный интервал в секундах или за указанное количество отсчётов (число предваряется символом ‘#’); с учётом регистра символов)
- sum (сумма значений за указанный интервал в секундах или за указанное количество отсчётов (число предваряется символом ‘#’))
- time (текущее время в формате HHMMSS)
Триггер может зависеть от других триггеров, т.е. он не меняет своё состояние в соответствии со значением выражения, а событие не генерируется, если хотя бы один из этих триггеров взведён.
События могут генерироваться только при взведении триггера или каждом изменении взведённого триггера (Multiple TRUE events).
Триггер имеет уровень серьёзности (представляется цветом и звуком в вебинтерфейсе, определяет допустимость средства доставки (Media) сообщения и используется в условных действиях):
- Not classified (серый)
- Information (зелёный)
- Warning (жёлтый)
- Average (тёмнокрасный)
- High (красный)
- Disaster (алый)
Триггер может содержать комментарии, которые могут передаваться в сообщении, и URL, которые будет доступен на странице состояния триггеров.
Действие триггера можно временно отключить.
При написании триггеров можно использовать макросы.
Действие (action)
Действие (action) является реакцией системы на событие (event). Определяется для события или группы событий. Атрибуты:
- Name — имя действия
- Event Source — источник событий: Triggers (изменение состояния триггера) или Discovery (модуль автоматического обнаружения контролируемых объектов)
- Enable escalations — разрешить дальнейшую эскалацию событий
- Period — период времени для шага эскалации в секундах
- Defult subject — кого извещать по умолчанию (можно использовать макросы)
- Default message — текст сообщения по умолчанию (можно использовать макросы)
- Recovery message — текст сообщения о решении проблемы (можно использовать макросы)
- Recovery subject — кого извещать о решении проблемы (можно использовать макросы)
- Status — статус действия: активно или запрещено
- набор условий инициации действия (фильтр), каждое условие задаётся типом, оператором сравнения и строкой для сравнения, условия одного типа OR-ятся, разных типов — AND-ятся
- типы условий для событий, порождаемых переключением триггера
- Application (операторы: =, like, not like) — триггер является частью указанного приложения
- Host group (операторы: =, <>) — изменился триггер для хоста из указанной группы
- Host template (операторы: =, <>) — изменился триггер, определённый в указанном шаблоне, использованном при создании хоста
- Host (операторы: =, <>) — изменился триггер для указанного хоста
- Trigger (операторы: =, <>) — изменился указанный триггер
- Trigger description (операторы: like, not like) — указанная строка встречается в описании — имени? — изменившегося триггера)
- Trigger severity (операторы: =, <>, >=, ) — входит ли адрес обнаруженного хоста в указанный интервал
- Service type (операторы: =, <>) — обнаруженный сервис совпадает с указанным
- Service port (операторы: =, <>) — TCP порт обнаруженного сервиса входит в указанный интервал
- Discovery status (операторы: =) — Up или Down
- Uptime (>=, =, , >=, Posted in Linux, Операционные системы, Утилиты Tagged configuration, zabbix
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
- типы условий для событий, порождаемых переключением триггера