Назад | Перейти на главную страницу

Как мне настроить zabbix на динамическое добавление контейнеров и мониторинг их на серверах с агентами?

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

У меня 2 сервера: А и Б; У меня один контейнер: C. C может работать как на A, так и на B, мой движок оркестровки (Swarm, Kubernetes, Rancher и т. Д.) Отвечает за то, чтобы он работал хотя бы в одном месте.

У меня есть агент zabbix на A и B, поэтому я могу контролировать процессор, файловую систему, память и все обычные вещи.

Я хочу контролировать 2 вещи:

  1. Доступность C. Меня не волнует, где, но я хочу знать, что он запущен.
  2. Проверяет процессы в C. У меня есть скрипт, который проверяет статус.

Как мне настроить Zabbix и агенты, чтобы он сообщал как о состоянии C, так и о его процессах, независимо от того, где он запущен?

Мои предположения:

  1. Я отношусь к C как к хозяину, а не к A или B.
  2. Я назначаю обнаружение процессов в C и их состояние как Items C.

Мои вопросы:

  1. Как настроить автоматическое обнаружение C в качестве хоста для A или B? Я могу использовать свой собственный сценарий или https://github.com/monitoringartist/Zabbix-Docker-Monitoring с фильтрами, чтобы собирать только те контейнеры, которые мне небезразличны.
  2. Как настроить выполнение проверки процесса на агентах A и B?

Короче говоря, как мне настроить его для запуска автоматического обнаружения контейнера в качестве хоста, а затем проверки процесса для каждого из них, чтобы они запускались на каждом сервере с агентом в данной группе / шаблоне, но затем присоединяли вывод к Контейнер C, а не сервер A или B, на котором работает агент?

РЕДАКТИРОВАТЬ: Благодаря первому респонденту я получил идею «мета-хоста». Но это создает новые проблемы:

  1. Как мне создать "мета-хост" C, если мне нужно добавить IP при его создании? Это может быть IP A или B!
  2. Как мне автоматически создавать C путем обнаружения на основе правил?
  3. Поскольку Zabbix обращается к каждому из A и B, чтобы сказать «запустить эти тесты», как он узнает, следует ли просить A запустить их или B запустить их?

Это было бы намного проще, если бы я мог просто сказать «запустить обнаружение на всех хостах в группе Docker», что обнаружит все контейнеры C (и D и т. Д.) И добавит их в качестве хостов. А затем также скажите: «Запустить сценарий проверки процессов для всех контейнеров, которые были обнаружены автоматически», возможно, зная, какой агент в настоящее время имеет доступ к контейнеру (т.е. где он сейчас запущен).

Я начинаю все больше и больше ощущать, что Zabbix отлично подходит для мониторинга приложений, привязанных к определенному серверу, в меньшей степени для мониторинга приложений, которые перемещаются? Или я это неправильно понимаю?

Отказ от ответственности: я автор https://github.com/monitoringartist/Zabbix-Docker-Monitoring

Настроить стандарт Заббикс-Докер-Мониторинг на A и B.

Редактировать шаблон Docker - фильтровать обнаруженный контейнер по мере необходимости + удалять все прототипы триггеров.

Создайте новые вычисляемые элементы, которые объединят каждый связанный с C элемент из A и B в новые вычисляемые элементы C (вы можете создать C «метахост» в Zabbix) - настройте новые триггеры поверх этих новых показателей C.

Обновление: использование рассчитанные элементы для агрегирования - например, агрегат sum(docker.up[cid]) из A и B - тогда условие триггера "Контейнер cid не запущен" будет sum(docker.up[cid])<1. Пожалуйста, прочтите Zabbix doc для правильного синтаксиса.

LLD обнаруживает, где находится ваш контейнер с банкоматом, и соответственно обновляет элементы / триггеры. Если вы хотите исключить любые ложные срабатывания, не забудьте настроить тайминги LLD / триггеров.