Ad Widget

Collapse

Макросы в иерархии шаблонов

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • rekby
    Member
    • Jul 2010
    • 91

    #1

    Макросы в иерархии шаблонов

    Задача:
    Наиболее простым и удобным в дальнешей настройке и работе способом организовать безагентный мониторинг нескольких десятков серверов, на каждом сервере работает 1-5 экземпляров веб-сервера (каждый экземпляр с собственными настройками и слушает собственный IP-адрес, каждый вариант настроек имеет собственный номер).

    Для каждого экземпляра веб-сервера заведено доменное имя вида test-ServerNumber-WebServerNumber.domain.ru

    На каждом физическом могут работать произвольные номера веб-серверов.
    Например на физическом сервере 1 работают веб-сервера типов 1 и 2, а на физическом сервере 2 работают веб-сервера типов 2, 3, 4.

    Первая мысль как организовать мониторинг:
    1. Написать скрипт, который принимает 2 параметра: номер физического сервера и номер веб-сервера, который нужно проверить. Из них формирует доменное имя, делает HTTP-запрос, проверяет наличие строки и возвращает количество милисекунд, которое на это ушло (или 0 в случае ошибки).
    2. Сделать один шаблон HTTP-Ping, в котором будет одна внешняя проверка с ключем my_script[{$SERVER} {$SERVICE_NUMBER}], включить её в группу данных например WebServerPing.
    3. Для каждого типа веб-сервера присоединить шаблон HTTP-Ping и определить макрос {$SERVICE_NUMBER} и назвать их например HTTP-Ping-1, HTTP-Ping-2 и т.д.
    4. Для каждого физического сервера задать присоединение шаблонов, созданных в пункте 3, в соответствие с теми типами веб-серверов, которые работают на физическом сервере и определить макрос {$SERVER}

    Проблемы:
    На шаге 4 Zabbix отказался подцеплять несколько шаблонов, выдав ошибки:
    1. что внешняя проверка с ключем my_script[{$SERVER} {$SERVICE_NUMBER}]
    2. Шаблон с группой данных WebServerPing уже привязан.

    Как сделал сейчас:
    1. Удалил шаблон HTTP-Ping и в каждом шаблоне вида HTTP-Ping-1 прописал команду вида my_script[{$SERVER} 1], т.е. руками забил туда тип веб-сервера и оставил только один макрос, определяющий номер физического сервера.
    2. Исключил проверку из всех групп элементов.

    Что не нравится в текущей ситуации:
    1. Есть десяток однотипных шаблонов, с одинаковой командой, различающиеся лишь одной цифрой и при изменении параметров команды (например при добавлении новых параметров в скрипте или изменении имени скрипта) придется переписывать весь десяток шаблонов виду HTTP-Ping-1.
    2. Поскольку это разные шаблоны нужно будет для каждого шаблона создавать свои триггеры и поддерживать их одинаковыми в каждом шаблоне, вместо того чтобы определить их в самом базовом шаблоне HTTP-Ping, а дальше бы они размножились макросами.

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

    Версия Zabbix 1.8.2
  • zalex_ua
    Senior Member
    Zabbix Certified Trainer
    Zabbix Certified SpecialistZabbix Certified Professional
    • Oct 2009
    • 1286

    #2
    Единственное что могу сказать - положительно подчеркнуть профессиональность составленного запроса автором и пусть это будет примером для многих присутствующих здесь форумчан.
    Есть желание помочь, но к сожалению я не в силах.

    Comment

    • rekby
      Member
      • Jul 2010
      • 91

      #3
      Прочитал книгу Zabbix Networking 1.8, понял что это документированная особенность - на одном хосте нельзя иметь двух элементов данных с одинаковым ключом. Возможным путем решения вижу: раскрывать макросы перед проверкой. И проверять подчиненные шаблоны и узлы на совпадения ключей узлов при изменении значений макросов.

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

      Comment

      • Lone Wolf
        Member
        • Mar 2010
        • 34

        #4
        Ну так дать хостам имена соответствующие, чтобы было понятно, кто где. Или вот в доменных именах эта информация включена, так? Тогда можно запустить автообнаружение - всё само добавится.

        Comment

        • rekby
          Member
          • Jul 2010
          • 91

          #5
          Так не получится - слишком ненаглядно будет.
          Есть 50 серверов, на каждом 3-5 Web-серверов, несколько MySQL, почтовые сервера и т.д. если каждого завести отдельным хостом, то просто шаблона именования уже не хватит для наглядности + думаю что будет жутко неудобно прописывать зависимости триггеров, чтобы не получать уведомления о падении каждого сервиса при перезагрузке например или сетевом сбое.

          Comment

          • dima_dm
            Senior Member
            • Dec 2009
            • 2697

            #6
            Я подобные задачи решаю через XML import/Export. Т.е. создаю тестовую конфигурацию для одного сервера, тестирую её. Далее экспортирую конфигурацию в XML, и пишу генератор XML для всех хостов. Далее импортирую полученный XML файл конфигурации в Zabbix. Аналогичную схему можно реализовать через Zabbix API.

            Comment

            • rekby
              Member
              • Jul 2010
              • 91

              #7
              Я думал по поводу api, но с ним еще не копался. мысль об xml в голову не пришла. Спасибо.

              Comment

              • dima_dm
                Senior Member
                • Dec 2009
                • 2697

                #8
                Вот если разработчики реализуют command-line import/export facility

                То вообще будет замечательно, добавление шаблонов и хостов можно полностью автоматизировать.
                P.S. Согласен с zalex_ua, очень хорошо и грамотно описана проблема. Большой грех на такой запрос не ответить. Так держать!!!

                Comment

                Working...