Ad Widget

Collapse

Триггер не возвращается в статус ОК

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • userman7
    Junior Member
    • Feb 2019
    • 5

    #1

    Триггер не возвращается в статус ОК

    Добрый день!

    Я создал элемент данных для сбора информации с лог файла (Zabbix agent Active) и желаю получать уведомления когда в файле появляется необходимый код ошибки.

    Элемент данных:
    log[C:\logs\log.log,error]

    Я создал два триггера с разным кодом ошибки.

    Триггер 1:
    {hostname:log[C:\logs\log.log,error].str("error 1")}=1
    Триггер 2:
    {hostname:log[C:\logs\log.log,error].str("error 2")}=1

    Первый триггер после того как нашел код, посылает уведомление и возвращается в статус ОК, как и нужно.
    Второй триггер всегда застревает в статусе PROBLEM и не возвращается в статус ОК автоматически.

    Все триггеры находятся в multiple generation mode.

    Это проблема на стороне zabbix?
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Давайте по порядку.
    Я создал элемент данных для сбора информации с лог файла (Zabbix agent Active) [...]
    log[C:\logs\log.log,error]
    Такой элемент данных будет принимать строки, содержащие где-либо слово "error" (маленькими буквами).
    Любые другие строки из лог-файла, если они есть, будут игнорироваться.
    OK.

    Я создал два триггера с разным кодом ошибки.

    Триггер 1:
    {hostname:log[C:\logs\log.log,error].str("error 1")}=1
    Триггер 2:
    {hostname:log[C:\logs\log.log,error].str("error 2")}=1
    Каждый из этих триггеров будет вычисляться при получении новых значений для этого элемента данных.
    Переходить в состояние "PROBLEM", если этот элемент данных содержит строку "error " с нужным номером, и возвращаться в состояние "OK" если такой строки нет.
    Если, например, у вас в этот файл были помещены такие строки:
    Code:
    1. Test line 1
    2. Error 2
    3. Test error 1
    4. This has been written errorneously
    5. error 256
    то на сервер реально будут переданы только строки 3, 4 и 5 (остальные не содержат строку "error"). При этом значение из строки 3 приведёт к срабатыванию первого триггера (есть подстрока "error 1"), значение из строки 4 - к его закрытию (такой подстроки нет), а значение из поледней пятой строки - к срабатыванию второго триггера (есть подстрока "error 2"). Причём, второй триггер так и останется в этом состоянии, пока не придёт какое-то ещё значение, не содержащее подстроку "error 2".

    Если есть ещё какие-то вопросы - то опишите подробнее, что именно у вас происходит, что вы при этом ожидаете, а что получаете реально.

    Comment

    • userman7
      Junior Member
      • Feb 2019
      • 5

      #3

      Задача стоит следующая. Есть 2 файлов с логами. Есть 2 кода ошибки которые нужно отслеживать.
      Создаю 2 элемента данных и 2 триггера.
      Item 1:
      log[C:\logs\log1.log,error]
      Item 2:
      log[C:\logs\log2.log,error]

      Trigger 1:
      {hostname:log[C:\logs\log1.log,error].str("error 1")}=1 or {hostname:log[C:\logs\log2.log,error].str("error 1")}=1
      Trigger 2:
      {hostname:log[C:\logs\log1.log,error].str("error 2")}=1 or {hostname:log[C:\logs\log2.log,error].str("error 2")}=1

      На 2 лога файл приходит 2 кода ошибки.

      Чего хотим. Получить 4 письма с кодом ошибки и названием элемента данных.

      Что получаем. Приходит 4 письма, с информацией только первого лог файла. Об остальных как будто не знает.
      Как бы вы реализовали это?

      Еще вопрос.
      logrt["C:\Logs\^.*log$","(error 1|error 2)"]

      {hostname:logrt["C:\Logs\^.*log$","(error 1|error 2)"].str("error 2")}=1

      Каким образом можно получить значение в уведомление, о каком файле идет речь?

      Comment

      • Kos
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • Aug 2015
        • 3404

        #4
        Начнём с последнего вопроса.
        Метрика logrt[...] не будет мониторить два файла параллельно. Она будет следить за одним файлом - тем, который менялся последним. Если под регулярное выражение для имени файла в этой метрике подпадают несколько файлов, и в каждый из них что-то пишется, то ничего хорошего не выйдет: агент будет всё время переключаться между ними и зачастую перечитывать весь файл с самого начала. По всей видимости, это не то, что вам нужно. Эта метрика предназначена для случаев, когда лог пишется в один файл, но с ротацией, в результате чего имя текущего файла может измениться (например, включает в себя текущую дату, время или номер процесса).

        Я бы делал проще: на каждый файл создавал бы свой отдельный элемент данных со своим триггером, в имени которого упоминал бы имя файла. А в уведомлении пересылал бы имя события (которое берётся из имени триггера).
        Только нужно ещё понимать, по какому условию закрывать триггер. Либо ждать какой-то волшебной строки в логе (но тогда регулярное выражение в ключе должно разрешать и приём такой строки), либо тупо по тайм-ауту (с помощью триггерной функции nodata()). Но последний вариант немного конфликтует с опцией "multiple generation mode".

        Comment

        • userman7
          Junior Member
          • Feb 2019
          • 5

          #5
          То есть если у меня 50 файлов с логами, то нужно создать 50 элементов данных и 50 триггеров для одной ошибки? Если для двух ошибок, то 100 триггеров?

          Comment

          • Kos
            Senior Member
            Zabbix Certified SpecialistZabbix Certified Professional
            • Aug 2015
            • 3404

            #6
            Если все эти файлы на одной машине, и вы хотите видеть имя файла в сообщении об ошибке - то да.
            Но в такой ситуации глупо настраивать всё это вручную, для этого есть механизм LLD. Настраиваете один прототип элемента данных и два прототипа триггера, после чего засылаете правильно сформатированный список ваших лог-файлов - и все нужные объекты создадутся автоматически.

            Comment

            Working...