Zabbix выполнение удаленных команд

Простое описание работы Zabbix

Система Zabbix это клиент-серверное решение. На всех контролируемых узлах должен быть установлен клиент (агент) который собирает данные для мониторинга узла.

Когда начнете изучать вы поймете что если описывать все доскональна, то статья получиться очень большая и нудная. Надеюсь из ниже сказанного основную суть вы поймёте.

Порты работы

Один из важных моментов который надо учитывать при настройке это знать на каких портах по умолчанию работает Zabbix.

Порта всего два:

  1. 10051 — по нему сервер получает данные от активных агентов. Порт должен быть открыть на сервере;
  2. 10050 — по нему сервер опрашивает клиентов и забирает данные. Порт должен быть открыть на клиенте.

Клиенты

Клиент  может быть двух видов:

  • Обычный агент — сервер получает доступ к узлу мониторинга и забирает данные;
  • Активный агент — клиент сам отправляет данные серверу.

Далеко не сразу я смог разобраться в нюансах использования активного агента. Из статьи вы узнаете как правильно пользоваться мониторингом компьютеров которые не имеют статического IP адреса.

Шаблоны

Шаблоны это основа системы Zabbix. Разработчик добавил большое количество шаблонов для разных систем и настолько грамотно и взвешено подошел к их разработке, что они подходят под основные требования мониторинга. Кроме того, на просторах интернета вы можете встретить огромное количество шаблонов созданных пользователями. Для использования сторонних шаблонов вам достаточно загрузить их в свою систему и произвести минимальные настройки.

После добавления узла в систему мониторинга и зная операционную систему вам достаточно выбрать необходимый шаблон и узел подключен к мониторингу. Все параметры вы можете подкорректировать под свои требования.

В шаблоне основное понятие — элементы данных.  В элементе данных указано какой параметр контролируется, по каким принципам и с указанием периода хранения данных в базе данных. Элементы данных можно группировать, что даёт удобство при выводе необходимых данных из огромной массы собираемых данных.

Для мониторинга кроме стандартных параметров существуют и те что невозможно указать в жестко. Например, количество и буквы разделов жестких дисков. Для этого в шаблоне присутствует раздел правила обнаружения в котором и указаны правила обнаружения жестких дисков, сетевых интерфейсов и служб (для Windows систем).

Триггеры

Триггеры это то на чем держится и в чем заключается вся прелесть мониторинга

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

и тп. В триггере указывается важность события. При добавлении нового триггера разработчик придумал конструктор выражения по которому можно составить необходимый вам вариант срабатывания триггера.

Настройка в zabbix мониторинга nginx

В прошлой редакции этой статьи дальше шло описание скрипта, который будет парсить вывод nginx-status и передавать данные в zabbix. Сейчас все можно сделать гораздо проще и удобнее. На агенте не надо ничего настраивать. Все выполняется исключительно в шаблоне. То есть вам достаточно загрузить готовый шаблон для мониторинга nginx на zabbix сервер, прикрепить его к хосту и все будет работать.

Это удобный подход, который избавляет от необходимости настраивать агентов. Теперь все выполняется с сервера. Минус этого подхода только в том, что возрастает нагрузка на сервер мониторинга. Это плата за удобство и централизацию. Имейте это ввиду. Если у вас большая инсталляция мониторинга и есть средства автоматизации типа ansible, возможно вам имеет смысл по старинке парсить данные скриптом. Но в общем случае я рекомендую делать так, как я расскажу далее.

Суть мониторинга Nginx будет сводиться к тому, что мы через агента станем забирать страницу http://localhost/nginx-status на сервер. Там с помощью регулярных выражений и зависимых элементов данных будем формировать нужные метрики.

Представляю вам готовый шаблон для мониторинга nginx. Скачиваем его zabbix-nginx-template.xml и открываем web интерфейс zabbix сервера. Идем в раздел Configuration -> Templates и жмем Import:

Выбираем файл и снова нажимаем Import:

Шаблон я подготовил сам на основе своих представлений о том, что нужно мониторить. Проверил и экспортировал его с версии 4.2 Регулярные выражения для парсинга html страницы статуса подсмотрел тут — https://github.com/AlexGluck/ZBX_NGINX. К представленному шаблону я добавил некоторые итемы и переделал все триггеры. Плюс убрал макросы. Не вижу в них в данном случае смысла.

В шаблоне 11 итемов, описание которых я привел ранее.

Подробнее остановимся на триггерах. Их 5 штук.

  1. Many active connections — срабатывает если среднее количество соединений за последние 10 минут больше в 3 раза, чем среднее количество за интервал на 10 минут ранее.
  2. many requests и too many requests — срабатывают, когда среднее количество запросов за последние 10 минут больше в 3 и 6 раз соответственно, чем на 10 минут ранее.
  3. nginx is not running — тут все просто. Если не запущен ни один процесс nginx, шлем уведомление.
  4. nginx is slow to respond — срабатывает если время выполнения запроса на получение страницы со статусом за последние 10 минут больше предыдущих 10 минут в 2 раза.

С триггерами больше всего вопросов. Предложенная мной схема может работать независимо от проекта, не требует начальной калибровки, но могут быть ложные срабатывания из-за разовых очень сильных всплесков, которые быстро проходят, но сильно меняют средние параметры на интервале.

Более надежно могут сработать триггеры, где явно указаны лимиты в конкретных значениях. Но такой подход требует ручной калибровки на каждом проекте в отдельности. Надо смотреть средние значения метрик и выставлять лимиты в зависимости от них. Если проект будет расти, то лимиты постоянно придется менять. Это тоже не очень удобно и не универсально.

Я в итоге остановился на анализе средних значений, не используя конкретных лимитов. Как поступать вам, решайте отдельно, в зависимости от ситуации. Если у вас один проект, которому вы уделяете много внимания, то ставьте лимиты руками на основе анализа средних параметров. Если работаете на потоке с множеством проектов, то можно использовать мой вариант, он более универсален и не требует ручной правки.

Единственное, коэффициенты можно поправить, если будут ложные срабатывания. Но я обычно этот момент решаю через отложенные уведомления. Если чувствительность триггера очень высокая и есть кратковременные ложные срабатывания, меня они не беспокоят из-за 5-ти минутной задержки уведомлений. Зато при разборе инцидентов, эти кратковременные срабатывания помогают оценить ситуацию в целом.

С мониторингом nginx почти все готово. Теперь нам нужно прицепить добавленный шаблон к web серверу, который мы мониторим и дождаться поступления данных. Проверить их можно в Monitoring -> Latest Data:

В шаблоне есть несколько графиков. Не буду о них рассказывать, так как последнее время практически не пользуюсь графиками. Вместо этого собираю дашборды. Это более удобно и информативно. Жаль, что дашборды нельзя к шаблонам прикреплять. Очень хлопотно каждый раз вручную их составлять и тратить время. В конце покажу пример дашборда, который я использую для мониторинга web сервера.

На этом настройка мониторинга nginx закончена, можно пользоваться.

Очистка и уменьшение mysql базы zabbix

Начнем с очистки базы данных zabbix от ненужных данных. Рассмотрим по пунктам в той последовательности, в которой это нужно делать.

  1. Первым делом надо внимательно просмотреть все используемые шаблоны и отключить там все, что вам не нужно. Например, если вам не нужен мониторинг сетевых соединений windows, обязательно отключите автообнаружение сетевых интерфейсов. Оно само по себе находит десятки виртуальных соединений, которые возвращают нули при опросе и не представляют никакой ценности. Тем не менее, все эти данные собираются и хранятся, создавая лишнюю нагрузку. Если же вам нужен мониторинг сети в windows, зайдите в  каждый хост и отключите руками лишние адаптеры, которые будут найдены. Этим вы существенно уменьшите нагрузку. По моему опыту, в стандартных шаблонах windows мониторинг всех сетевых интерфейсов дает примерно 2/3 всей нагрузки этих шаблонов.
  2. Отредактируйте в используемых стандартных шаблонах время опроса и хранения данных. Возможно вам не нужна та частота опроса и время хранения, которые заданы. Там достаточно большие интервалы хранения. Чаще всего их можно уменьшить. В целом, не забывайте в своих шаблонах ставить адекватные реальной необходимости параметры. Не нужно хранить годами информацию, которая теряет актуальность уже через неделю.
  3. После отключения лишних элементов в шаблонах, нужно очистить базу данных от значений неактивных итемов. По-умолчанию, они там остаются. Можно их очистить через web интерфейс, но это плохая идея, так как неудобно и очень долго. Чаще всего попытки очистить 50-100 элементов за раз будут сопровождаться ошибками таймаута или зависанием web интерфейса. Далее расскажу, как это сделать эффективнее.

Для очистки базы данных zabbix от значений неактивных итемов, можно воспользоваться следующими запросами. Запускать их можно как в консоли mysql сервера (максимально быстрый вариант), так и в phpmyadmin, кому как удобнее.

Данными запросами можно прикинуть, сколько данных будет очищено:

SELECT count(itemid) AS history FROM history WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
SELECT count(itemid) AS history_uint FROM history_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
SELECT count(itemid) AS history_str FROM history_str WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
SELECT count(itemid) AS history_text FROM history_text WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
SELECT count(itemid) AS history_log FROM history_log WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
SELECT count(itemid) AS trends FROM trends WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
SELECT count(itemid) AS trends_uint FROM trends_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');

Если запросы нормально отрабатывают и возвращают счетчик данных, которые будут удалены, дальше можете их удалять из базы следующими sql запросами.

DELETE FROM history WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
DELETE FROM history_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
DELETE FROM history_str WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
DELETE FROM history_text WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
DELETE FROM history_log WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
DELETE FROM trends WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
DELETE FROM trends_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');

Данными запросами вы очистите базу данных zabbix от значений неактивных элементов данных. Но реально размер базы данных у вас не уменьшится, потому что в дефолтной настройке базы данных используется формат innodb. Все данные хранятся в файле ibdata1, который автоматически не очищается после удаления данных из базы.

Администрировать такую базу неудобно. Нужно как минимум настроить хранение каждой таблицы в отдельном файле. Этим мы далее и займемся, а заодно обновим сервер базы данных до свежей версии mariadb и реально очистим базу, уменьшив ее размер.

Как спланировать нагрузку на Zabbix

Под небольшой структурой, упомянутой в начале, я подразумеваю 50-100 узлов (не сетевое оборудование с десятками портов) сети на мониторинге и примерно 2000-4000 активных элементов данных, которые записывают 20-40 новых значений в секунду. Под такую сеть вам будет достаточно небольшой виртуальной машины с 2 ядрами и 4 гб памяти. База данных на преимущественно стандартных шаблонах будет расти примерно на 2-4 Гб в год. Дальше еще меньше, так как будет автоматически очищаться.

Для мониторинга такой сети можно вообще не выполнять никаких дополнительных настроек. Мониторинг будет вполне нормально работать. Если же нагрузка начнет расти, то первое, с чем вы столкнетесь — это с размером и производительностью базы данных. База zabbix будет расти пропорционально подключению к ней хостов. И с этим придется что-то делать.

Для решения вопроса производительности нужно будет двигаться в двух направлениях:

  1. Очистка базы от ненужных данных.
  2. Увеличение производительности сервера mysql.

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

Итак, у нас есть следующая схема

По понятным соображениям два последних октета белых ip буду затирать.

Сервер SRV03 находится за NAT, на маршрутизаторе MikroTik настроен srcnat masquerade на сеть 192.168.0.0\24

На сервер SRV03 ставим Zabbix agent

Строку Server и Server Active пишем белый ip нашего роутера на котором далее пробросим порт на Zabbix сервер. Закомментированные строки не учитываются.

Идем на MikroTik в сети LAN 2 и делаем правило проброса порт 10051 на наш заббикс сервер

Тесть все подключения, которые приходят на интерфейс ether1-WAN на порт 10051 отправлять на адрес 192.168.45.18 с портом 10051.

Теперь запустим наш Zabbix агент на сервере. Видим, в лог файле написано агент стартанул нормально, но при подключении не нашел активных проверок для хоста SRV03 то есть для себя.

Это то и понятно так как не чего нем еще не создано, сделаем это. Создадим узел сети с именем SRV03 именно с таким же, как и название сервера с другим работать не будет учтите это.

В поле интерфейсы агента пиши белый ip роутера (не серый ip самого сервера) за которым находиться наш SRV03 порт пишем 10051 (он по умолчания для активных проверок) и сохраняем.

После перезапускаем службу и видим в лог файле что надпись о ненайденных проверках для SRV03 отсутствует это значит, что он успешно подключился к серверу Zabbix и нашел там себя.

По идеи в столбце доступность должно загорается зеленым «ZBX» но при работе агента в активном режиме этого не происходит, в обычном да загорается.

Проверить можно ли действительно все работает, можно добавив элементы данных и посмотреть приходят ли различные параметры с SRV03. У меня есть шаблон в нем уже созданы триггеры и элементы данных.

Заметьте, когда создаете ЭД надо выбирать Тип: Zabbix агент (активный).

Посмотри приходят ли данные и видим, что все работает.

Установка и запуск службы zabbix

9. После того, как сохранили конфигурационный файл, открываем командную строку с административными правами. Для установки и запуска службы Zabbix agent в командной строке набираем:

     «C:\Program Files\Zabbix_agent\bin\zabbix_agentd.exe» — config «C:\Program Files\Zabbix_agent\conf\zabbix_agentd.win.conf» — install

где:

   C:\Program Files\Zabbix_agent\bin\zabbix_agentd.exe — путь до программы;

   C:\Program Files\Zabbix_agent\conf\zabbix_agentd.win.conf — путь до конфигурационного файла.

После успешного применения команды появится вывод:

     zabbix_agent.exe : service installed successfully

     zabbix_agent.exe : event source  installed successfully

Если командную строку запустить не с правами администратора, то получим ошибку:

     zabbix_agentd.exe : ERROR: cannot connect to Service Manager: ….

Для запуска службы «Zabbix Agent» выполняем следующую команду:

     net start «Zabbix agent»

После успешного выполнения команды в командной строке появится:

     Служба «Zabbix Agent» успешно запущена.

Прописываем правила соединения в брандмауэре Защитника Windows

10. Для того, чтобы обеспечить передачу данных с клиента на сервер, необходимо разрешить zabbix агенту связываться с сервером. Пропишем необходимые правила для сетевого соединения в брандмауэре Windows. Открываем «Панель управления» далее «Брандмауэр Защитника Windows».

11. Далее выбираем «Дополнительные параметры».

12. В следующем окне выбираем «Правила для входящих подключений» — «Создать правило».

13. В открывшемся окне делаем выбор «Для программы», нажимаем «Далее».

14. Указываем с помощью кнопки «Обзор…» путь до программы, например %ProgramFiles%\Zabbix_agent\bin\zabbix_agentd.exe, нажимаем «Далее».

15. Выбираем «Разрешить подключение» — «Далее».

16. В новом окне задаем «Имя», например: «Zabbix_agent_in» — «Готово».

17. Затем открываем вновь созданное соединение Zabbix_agent_in, затем выбираем вкладку «Протоколы и порты»

Тип протокола: TCP

Специальные порты:

10050

Затем нажимаем «ОК».

Добавление узла сети на сервере Zabbix

18. Для добавления узла сети на сервере Zabbix заходим в веб-панель сервера с помощью логина и пароля, далее выбираем: «Настройка» — «Узлы сети» — «Создать узел сети».

19. В новом окне указываем:

Имя узла сети: например, Int

Группы: выбираем из списка с помощью кнопки «Выбрать» или пишем новое имя группы

Интерфейсы агента: задаем IP адреса клиента (в командной строке клиента надо набрать ipconfig /all)

20. Переходим на вкладку «Шаблоны», нажимаем «Выбрать» и из списка шаблонов, выбираем нужный, в данном случае «Template OS Windows», нажимаем «Выбрать».

21. Далее выбираем «Добавить» для присоединения выбранного шаблона, затем ниже нажимаем «Добавить» для добавления нового узла сети.

22. В списке появится новый узел сети, и через некоторое время узел сети станет зеленым. Это значит, что все настроено правильно и связь с клиентом установлена. 

23. Если узел сети остается красным, то необходимо разбираться, в чем дело. Для этого наводим на значок в графе «Доступность» и читаем диагностическое объявление.

24. Далее переходим к клиенту и открываем лог файл zabbix агента (C:\Program Files\Zabbix_agent\conf\zabbix_agentd.win.conf).

Смотрим проблему, в данном случае:

failed to accept an incoming connection: connection from «192.168.11.49» rejected, allowed hosts: «192.168.20.158»

25. Для решения проблемы прописываем IP адрес клиента в конфигурационный файл zabbix агента:

Option: Server

Server=192.168.11.69, 192.168.20.158

26. Для применения измененных настроек перезапускаем службу Zabbix agent:

net stop «Zabbix agent»

net start «Zabbix agent»

27. Проверяем лог файл.

28. Если нет проблем, на сервере появится зеленый значок клиента.

Удаление zabbix агента

29. Для удаления zabbix агента, удаляем узел сети на сервере.

30. Останавливаем службу «Zabbix agent» на клиенте.

net stop «Zabbix Agent»

31. Удаляем папку с компонентами zabbix агента.

32. Удаляем правило для входящих подключений для zabbix агента.

Посмотреть видео как произвести установку, настройку и удаление zabbix агента можно здесь:

https://youtube.com/watch?v=uC14OHZSXUQ

Итак, у нас есть следующая схема

По понятным соображениям два последних октета белых ip буду затирать.

Сервер SRV03 находится за NAT, на маршрутизаторе MikroTik настроен srcnat masquerade на сеть 192.168.0.024

На сервер SRV03 ставим Zabbix agent

Строку Server и Server Active пишем белый ip нашего роутера на котором далее пробросим порт на Zabbix сервер. Закомментированные строки не учитываются.

Идем на MikroTik в сети LAN 2 и делаем правило проброса порт 10051 на наш заббикс сервер

Тесть все подключения, которые приходят на интерфейс ether1-WAN на порт 10051 отправлять на адрес 192.168.45.18 с портом 10051.

Теперь запустим наш Zabbix агент на сервере. Видим, в лог файле написано агент стартанул нормально, но при подключении не нашел активных проверок для хоста SRV03 то есть для себя.

Это то и понятно так как не чего нем еще не создано, сделаем это. Создадим узел сети с именем SRV03 именно с таким же, как и название сервера с другим работать не будет учтите это.

В поле интерфейсы агента пиши белый ip роутера (не серый ip самого сервера) за которым находиться наш SRV03 порт пишем 10051 (он по умолчания для активных проверок) и сохраняем.

После перезапускаем службу и видим в лог файле что надпись о ненайденных проверках для SRV03 отсутствует это значит, что он успешно подключился к серверу Zabbix и нашел там себя.

По идеи в столбце доступность должно загорается зеленым «ZBX» но при работе агента в активном режиме этого не происходит, в обычном да загорается.

Проверить можно ли действительно все работает, можно добавив элементы данных и посмотреть приходят ли различные параметры с SRV03. У меня есть шаблон в нем уже созданы триггеры и элементы данных.

Заметьте, когда создаете ЭД надо выбирать Тип: Zabbix агент (активный).

Посмотри приходят ли данные и видим, что все работает.

Заключение

Теперь у нас zabbix работает современно, модно, молодежно :) Использует telegram для отправки оповещений с графиками, ссылками и т.д. Функционал удобный и настраивается достаточно просто. У меня практически не было затруднений, когда разбирал тему. Беру себе на вооружение и использую по необходимости. Хотя сам не люблю оповещения в телеграме, и чаще всего их отключаю, как и от остальных программ. Не нравится, когда меня в каждую минуту могут отвлечь какие-то события. Проверка почты раз в 30 минут самая подходящая интенсивность для меня.

Тем не менее, при работе коллектива, оповещения в общую группу могут быть очень удобны. Особенно, если только на мониторинге сидят отдельные люди, в чью задачу входит оперативная реакция на события.

Прошлая версия статьи в pdf.

Онлайн курс «DevOps практики и инструменты»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Подведем итог

1) В конфиге Zabbix агента в Server Aktive пишем белый ip роутера за которым ZServer

2) На этом роутере пробрасывает порт 10051 до ZServera

3) Создаем узел сети с такие же именем, как и ПК один в один.

4) Добавляем элементы данных выбирая тип «: Zabbix агент (активный)».

5) И путь вас не смущает серый значок «ZBX»

Доброго времени суток. Продолжаем настраивать систему мониторинга Zabbix. И в данной статье мы поговорим о мониторинге устройств под управлением операционной системы Windows. Как Вы знаете, что Windows из коробки не поддерживает SNMP, поэтому по SNMP Zabbix не сможет забирать данные с устройства наблюдения. Но у нас есть сервера под управлением Windows, есть локальная сеть в которой находятся машины под Windows и все это нам надо мониторить. Как же быть? Да простую проверку (например, доступность узла сети) мы легко можем организовать, а вот загрузку системы, время работы узла. Для этого есть специальная программа, которая передает все эти данные zabbix-серверу. И дальше мы установим zabbix-agent на Windows, настроим zabbix агента. А также настроим zabbix сервер для получения данных от zabbix агента.

Установка и настройка zabbix-агента.

Создайте папку “c:\program files\zabbix”. скопируйте в нее следующие файлы zabbix_agent.exe, zabbix_get.exe и zabbix_sender.exe. Дальше создаем в этой папке log файл для zabbix агента: zabbix_agentd.log. Следующим шагом создаем конфигурационный файл zabbix_agentd.conf и помещаем в него следующий код:

Server= #ServerPort=10051 # Unique hostname. Required for active checks. Hostname=host.local # Listen port. Default is 10050 ListenPort=10050 # Name of log file. LogFile=c:\program files\zabbix_agentd.log # Maximum size of log file in MB. Set to 0 to disable automatic log rotation. LogFileSize=10

Запускем zabbix агента, в командной строке введите:

Или zabbix-agent можно запустить через службы Windows в панели управления. Проверим работу zabbix агента. Для этого в командной строке введем:

Настройка zabbix сервера для сбора информации с zabbix агента.

Для получения данных при помощи zabbix агента мы должны при создании “Элемента данных” в поле “Тип” указать Zabbix агент, в поле “Ключ” указать тот параметр, который мы хотим получить. Вот и все.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: