Что такое Zabbix

Zabbix, он же Заббикс - одно из самых ультимативных решений в сфере мониторинга. А хороший мониторинг - это хорошее подспорье для спокойных нервов. С помощью zabbix можно мониторить инфраструктуру любого масштаба используя огромное количество идущих из коробки шаблонов (темплейтов) мониторинга. Заббикс поддерживает большое количество источников данных, начиная от банального Zabbix агента, заканчивая, но не ограничиваясь, опросами и получением данных непосредственно из API или с Prometheus экспортеров через HTTP Agent. Заббикс - это одна из лучших, если не единственная, бесплатная система мониторинга энтерпрайз класса для инфраструктуры.
Zabbix непрерывно развивается регулярно выпуская новые версии каждые несколько лет. План по релизам и развитию Zabbix можно найти на этой странице: https://www.zabbix.com/roadmap. Уже достаточно продолжительное время каждые 2 года выходит LTS версия.
Версии x.0 LTS это стабильные релизы которые поддерживаются 5 лет с момента релиза
Версии X.2 выходят через 6 месяцев после релиза X.0 LTS
Версии X.4 выходят через 6 месяцев после релиза X.2
X.2 и X.4 версии содержат новый тестируемый функционал и поддерживаются 1 год с момента релиза.

Компоненты Zabbix
Zabbix Server
Zabbix Server - занимается сбором данных с заббикс агентов и иных поддерживаемых объектов мониторинга, препроцессингом получаемых данных, а так же алертингом. Получая данные с каждого хоста (host), для каждого итема (item) он проверяет соответствие полученной метрики условиям триггера и если условие подпадает под сработку триггера, запускается алерт. Алерты доставляются до получателей через заранее преднастроенные медиатайпы (Media Type). Сам заббикс сервер ничего не настраивает. Все настройки что и как мониторить он берёт из базы данных. Туда же он складывает все данные которые получает и генерирует в ходе мониторинга.
Zabbix Server как получает данные собираемые заббикс агентами, так и самостоятельно собирает часть данных, например опрашивает SNMP источники или же API эндпоинты по HTTP. Но это далеко не полный список того что может делать заббикс сервер.
Для работы Zabbix Server необходим полноценный СУБД.
Zabbix Web
Zabbix Web - Это вэб интерфейс через который можно взаимодействовать с заббикс сервером. Он позволяет просматривать метрики, создавать хосты и темплейты, настраивать итемы. В общем делать всё связанное с настройкой заббикса, кроме настройки самых низкоуровневых параметров заббикс сервера, которые настраиваются уже отдельно в zabbix_server.conf. Сам вэб интерфейс заббикса ничего не мониторит и не анализирует, его цель - сохранить все настройки в базу данных, откуда их уже подхватит заббикс сервер и возьмёт в работу.
Zabbix Proxy
Zabbix Proxy - используется для облегчения жизни заббикс серверу, а так же для обеспечения непрерывности мониторинга. В вэб интерфейсе заббикса можно настроить опрос объекта мониторинга не силами заббикс сервера, а с помощью прокси. В этом случае заббикс прокси будет получать у заббикс сервера задания на сбор данных с определённых хостов и будет их опрашивать. Когда заббикс сервер один, в тот момент когда сервер с заббиксом упал или например перезагружается, опрос источников данных происходить не будет. Если же есть агенты которые не ждут обращения от заббикс сервера на предоставление данных (пассивные агенты), а сами их собирают и отправляют на заббикс сервер (активные агенты), все данные которые они отправят заббикс серверу во время его недоступности - будут безвозвратно утеряны. В том случае же если агенты взаимодействуют не напрямую с заббиксом, а между агентами и сервером находится заббикс прокси - в момент недоступности сервера, она продолжит сбор данных и будет накапливать их пока сервер не станет снова онлайн. После чего заббикс прокси выгрузит данные на сервер, не прекращая при этом их сбор. Так же заббикс прокси можно объединять в группы, и в случае недоступности одной из проксей, другая прокся подхватит её работу. Аналогичный функционал можно достигнуть кластеризацией заббикс серверов, но по ресурсам это обойдётся сильно дороже.

Так же заббикс прокси может размещаться в удалённых серверах за NAT, и в этом случае заббикс сервер сможет мониторить все хосты в удалённой сети посредством проброса портов с белого IP удалённой сети на одну только Zabbix Proxy. Без необходимости превращать все заббикс агенты в удалённой сети в активные или же пробрасывать на них или другие источники данных порты снаружи или объединять сети через VPN.
Для работы Zabbix Proxy необходим sqlite или же полноценный СУБД, который как правилно устанавливается на хост рядом с Zabbix Proxy. Данные там хранятся до отправки на сервер
Zabbix Agent
Zabbix Agent - устанавливается непосредственно на ОС или может быть развёрнут в контейнере, непосредственно рядом с объектом мониторинга. Но максимальный функционал при минимальных затратах, в разрезе мониторинга ОС, чаще всего можно достигнуть именно при непосредственной установке заббикс агента на ОС. Для заббикс агентов в заббиксе из коробки идут темплейты Linux by Zabbix Agent и Windows by Zabbix Agent. Из коробки эти темплейты предоставляют огромный объем итемов и триггеров для хостов. В прочем очень часто этот объём может оказаться избыточным, или наоборот желаемых метрик там не будет. Но в любой момент любой темплейт можно потюнить, или если нужен какой-то крайне нестандартный функционал, Zabbix Agent поддерживает расширение функционала через User Parameters. UserParameters - это инструкции для заббикс агента как запустить отдельную команду или же скрипт написанный на любом языке, которые выполнят нужную работу и предоставят заббикс агенту данные, которые он вернёт заббикс серверу. То есть буквально вы можете написать любой скрипт например на python3 или любом другом языке, который будет получать на вход параметры, выполнять какую-то реализованную внутри него логику и возвращать результат.
Zabbix Agent vs Zabbix Agent 2
Стоит сразу запомнить одну простую вещь. Абсолютно во всех ситуациях, если для целевой ОС из коробки поддерживается Zabbix Agent 2 - нужно ставить именно его. Zabbix Agent 2 - это полностью переосмысленный и переписанный на Go агент. Так же Zabbix Agent 2 поддерживает специальные плагины, расширающие его функционал. Zabbix Agent 2 обратно совместим с Zabbix Agent и умеет всё то что умеет первый агент. Поэтому обновление уже существующего мониторинга с Zabbix Agent на Zabbix Agent 2 для мониторинга пройдёт бесшовно.

PostgreSQL
Для работы Zabbix Server необходимы отдельный инстанc PostgreSQL. Конечно же можно и MySQL, но PostgreSQL обеспечит большую стабильность. На крупных инсталляциях в любом случае будет PostgreSQL если мониторинг настраивался при участии инженеров и разработчиков мониторинга, потому нет смысла пытаться приделать какой-то костыль, когда сразу можно пользоваться нормальной СУБД. Я до сих пор думаю что mysql появился в списке допустимых для больших и выше инсталляций, потому что разрабы mysql на коленях приползли к разрабам заббикса и занесли чумадан деняк (:, лишь бы в этот список попасть.
Список поддерживаемых СУБД можно посмотреть по ссылке
zabbix_get
Утилита zabbix_get используется для того чтобы имитировать работу с заббикс агентами так, будто бы это делает сервер. Её можно использовать для отладки например какого-нибудь юзерпараметра, проверки доступности агента в ситуации когда неудобно каждый раз лезть ради этого в веб интерфейс заббикса. Или же когда заббикс сервер не может связаться с агентом, и вы хотите проверить из другого места как себя поведёт агент. Так же на основе этой утилиты можно писать различные скрипты, которые могут использовать данные заббикс агента для какой-нибудь автоматизации.
zabbix_send
Утилита zabbix_send используется чтобы отправить на заббикс сервер какие-либо данные. С её помощью можно дебажить заббикс сервер или же использовать её для какой-нибудь автоматизации чтобы отправлять данные на заббикс сервер прямо из своей софтины.
Поддерживаемые типы данных (Item Types)
Zabbix поддерживает широчайший спектр источников данных

Zabbix Agent
Zabbix Agent чаще всего используется для установки на конкретный хост для сбора и передачи данных на Zabbix Server, он так же можёт исполнять какие-нибудь загруженные на этот хост скрипты. С помощью таких скриптов можно практически неограниченно расширять функционал Zabbix. Заббикс агент может быть пассивным или активным. Пассивный заббикс агент сидит и ждёт когда Заббикс сервер обратится на него чтобы получить данные о конкретном итеме. В этом случае подключение происходит С Zabbix Server на IP и Port агента. Для этого у заббикс сервера должна быть прямая сетевая связность с агентом. Активный заббикс агент в свою очередь проявляет инициативу. Он самостоятельно подключается на IP и Port заббикс сервера, получает там задачи на мониторинг, и на регулярной основе выполняет эти задачи отправляя данные заббикс серверу. Такой режим чаще всего используется в удалённой сети за NAT, когда у заббикс сервера нет прямой сетевой связности с этим агентом, но например заббикс сервер сидит за шлюзом с белым статическим IP, с которого на заббикс сервер можно прокинуть нужный порт. В этом случае заббикс агенты могут стучатся на этот белый статический IP и порт, устанавливая соединение от агента к серверу.
Simple Check
Симпл чеки, или Простые проверки, это проверки которые реализуются силами заббикс сервера или прокси самостоятельно. Они используются для безагентного мониторинга. Список этих проверок ограничен, но самая их главная суть в том что они выполняются без участия заббикс агентов.
SNMP agent
Тип проверки SNMP Agent используется для опроса хостов отдающих свои данные по протоколу SNMP v1/v2c/v3. Наприме коммутаторы, шлюзы, бесперебойники, сетевые хранилища. Любые источники данных поддерживающие мониторинг через SNMP. Например в определённых ситуациях подходящим решением будет вместо установки на ОС заббикс агента, поставить туда SNMP экспортер и опрашивать этот хост по SNMP.
SNMP trap
В отличии от SNMP agent, когда подключение происходит от опрашивающего к опрашиваемому, в случае с SNMP trap, сам источник данных отправляет свои данные получателю, в нашем случае заббикс серверу. Такой режим работы должен поддерживаться самим источником данных.
Zabbix Internal
Zabbix Internal - специальный набор метрик для мониторинга внутреннего состояния Zabbix Server и Zabbix Proxy.
Zabbix Trapper
Zabbix Trapper - тип данных для ситуаций когда не заббикс сервер опрашивает источник данных, а источник данных сам должен отправлять их ему. Например ваша какая-нибудь софтина которую вы решили оснастить нативным Zabbix мониторингом.
External check
External check - Тип проверок когда Zabbix Server или Proxy дёргают лежащий у них локально скрипт, который в свою очередь выполняет какие-то действия и возвращает данные. Например какая-то утилита или самописный скрипт на например python, который производит какой-нибудь очень хитрый пинг с кучей условий, или же производит аналитику каких-нибудь данных и возвращает аппроксимированный результат.
Database monitor
Database monitor используется для мониторинга СУБД через ODBC драйвер. Несмотря на то, что так делать можно, есть так же не мало других способов мониторить ваши СУБД. Я бы рекомендовал рассматривать мониторинг через ODBC как последний рубеж.
HTTP Agent
HTTP Agent - пожалуй самый универсальный инструмент для работы с удалёнными сервисами. В век повсеместного использования различных HTTP API, на многие сервисы гораздо проще обратиться к этому самому API, получить в ответ какой-то текст или JSON, анализировать его и записать данные в мониторинг. Так же с его помощью можно мониторить непосредственно эндпоинты Prometheus экспортеров. Или же между Prometheus экспортерами и Заббикс сервером, поставить Victoria Metrics или тот же самый Prometheus, которые будут опрашивать экспортеры, складывать к себе данные, а Zabbix уже будет через HTTP Agent с помощью PromQL запрашивать из них только нужные данные, а не всё подряд.
IPMI Agent
IPMI Agent используется для мониторинга различных серверных платформ. В то время как многие серверные платформы в наши дни уже отдают свои данные через HTTP API, с какой-нибудь старой серверной платформы Supermicro которая так не умеет, получать данные мониторинга можно как раз через IPMI Agent.
SSH Agent

SSH Agent - в определённых ситуациях может оказаться вполне себе полезной штукой. Может подключиться на удалённый сервер и выполнить по SSH какую-нибудь команду. Но для безопасников это был бы наверное страшнейший кошмар и чернуха. Их можно понять, через каждые N минут, кто-то по SSH подключается на сервер и выполняет какую-то команду. А если таких проверок много, для систем аналитики аудит-логов это стало бы серьёзным испытанием, каждое подключение оставляет лог, который попадает в такую систему, лежит там, анализируется, место занимает и т.д. Я бы отнёс этот тип проверок к очень узкоспециализированным и экзотическим.
Telnet Agent
Telnet Agent - тоже самое что и SSH Agent, только работает через Telnet.
JMX Agent
JMX Agent используется для мониторинга параметров у Java приложений.
Calculated Item
Calculated Item используется для создания новых итемов на основе данных уже полученных мониторингом через другие итемы. Например источник данных отдаёт данные о максимальном объёме диска и о фактически занятом объёме, но не отдаёт это значение в виде процентов свободного\занятого места, а мы очень хотим их иметь. Тогда с помощью Calculated Item, на основе других итемов мы можем это посчитать. При этом данный типа итема не покидает Zabbix Server, соответственно не даёт нагрузку ни на сеть, ни на ресурсы источника данных. Zabbix Server произведёт все вычисления самостоятельно. Так же например когда с помощью Discovery rule, через HTTP Agent заббикс опрашивает какой-нибудь HTTP API, получает результат в виде JSON и извлекает из него данные, Calculated итемы очень удобно использовать для того чтобы сохранить эти данные в мониторинге, создав нужное количество Calculated Items через Item Prototypes.

Dependent Item
Dependent Item можно использовать в ситуациях когда есть итем в который из какого-то источника данных прилетело много метрик одной кучей, например какой-нибудь JSON с данными, и нужно извлечь из него какое-то конкретное значение. Безусловно получив большой JSON, можно сразу же извлечь из него метрику с помощью Preprocessing, но если какой-нибудь HTTP API на определённом эндпоинте отдаёт большой массив с данными, и в этом массиве много данных, то этот массив сохраняют в отдельный итем и потом извлекают данные из него уже с помощью Dependent итемов. Потому что если в таком массиве есть 10 нужных метрик, и все их извлекать с помощью препроцессинга HTTP агента, на каждую метрику будет обращение к АПИ, то есть 10 обращений. Используя Dependent итемы можно сократить количество обращений до одного, и получив данные потрошить их с помощью Dependent итемов. Тут можно сделать лирическое отступление что можно реализовать описанный выше механизм с помощью Dependent Discovery Rule, но это уже другая история.
Script Item
Script Item подходит в ситуациях когда уже недостаточно всех остальных проверок, нужен какой-то кастом и сложная логика, но ещё есть надежда решить вопрос не обращаясь к External Check. В этом случае можно попробовать решить вопрос с помощью этого итема и javascript. Но местная реализация javascript не всесильна, именно поэтому существует External Check.
Browser Item
Browser Item позволяет получать и проверять данные так, как если бы это делал пользователь через браузер, имитировать клики, ввод текста и т.д. Этакая замена Selenium + External Check на минималках.
Всё выше описанное - это лишь капля в море относительно того, что умеет заббикс. Но это вполне подходит как отправная точка для погружения, чтобы получить представление что такое Zabbix.
