Ad Widget

Collapse

Мониторинг логов, отправка строки в уведомлении

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Danilozavr
    Junior Member
    • Mar 2018
    • 5

    #1

    Мониторинг логов, отправка строки в уведомлении

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

    То есть имеется мониторинг файла на наличие строки с ошибкой, к примеру
    log[/opt/tx/log4zabbix/EventLog.log.0,.*,UTF-8,800].str(ORA-)}=1
    Оракловая ошибка может быть разной и я хочу в уведомлении на почту писать весь текст ошибки.

    Т.е. по плану:
    1. Получил строку в журнал 17.04.2018 18:38:01 ORA-01086: savepoint 'SPT1' never established in this session or is invalid
    2. Триггер сработал на ORA
    3. В емейл улетела вся строка ORA-01086: savepoint 'SPT1' never established in this session or is invalid
    4. Администратор увидел что эта ошибка про сейвпоинт и расслабился.

    Такое возможно сделать? В документации по макросам триггеров ничего похожего не нашел, к сожалению.


  • Danilozavr
    Junior Member
    • Mar 2018
    • 5

    #2
    никто не пишет потому что не знает или потому что такого механизма просто нет? :-d
    или наоборот все просто?

    Comment

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

      #3
      Не очень понятно, что у Вас получается, а что - нет. Или же вопрос чисто теоретический, т.е. сами ещё не пробовали?

      У Вас упоминается элемент данных с ключом
      Code:
      log[/opt/tx/log4zabbix/EventLog.log.0,.*,UTF-8,800]
      OK, под такое регулярное выражение должна подходить любая строка, добавляемая в лог-файл.
      Т.е. любая новая строка, дописываемая в этот файл, будет передаваться на сервер Zabbix как отдельное значение такого элемена данных.

      Далее Вы делаете триггер с формулой:
      Code:
      {YourHost:log[/opt/tx/log4zabbix/EventLog.log.0,.*,UTF-8,800]str(ORA-)}=1
      OK, такой триггер будет переходить в состояние PROBLEM при получении нового значения, которое будет содержать строку "ORA-", и закрываться (т.е. переходить обратно в OK) при получении любого нового значения, которое такой строки не содержит.

      Далее Вы настраиваете действие (Action), в котором при срабатывании такого триггера отсылается уведомление. Ну так в шаблоне уведомления используйте стандартный макрос
      Code:
      {ITEM.VALUE1}
      , который будет заменяться текущим значением элемента данных при срабатывании триггера (т.е. той самой строкой, которая Вам нужна), в чём проблема-то?

      Я в такой конфигурации вижу подвох немного с другой стороны.
      Предположим, что строка "ORA-01086: savepoint 'SPT1' never established in this session or is invalid" в логе появилась и осталась последней (после неё никаких новых строк пока нет).
      Триггер сработал, уведомление отправлено, админ его получил, "увидел что эта ошибка про сейвпоинт и расслабился".
      Но, поскольку никаких новых сообщений в логе пока нет, то триггер остался висеть в состоянии PROBLEM. И в случае, если следующая же строка в логе будет содержать сообщение о реальной проблеме, никакой реакции на это не будет.
      Чтобы такого не происходило, нужно в подобных случаях обязательно выставлять в триггере переключатель "Multiple PROBLEM events generation": тогда проблемное событие будет генерироваться при каждом вычислении триггера, даже если он уже находится в состояниие PROBLEM.

      С другой стороны, если Вас интересуют только строки лога, содержащие ошибки, то можно нужное условие добавить прямо в регулярное выражение элемента данных.
      Например:
      Code:
      log[/opt/tx/log4zabbix/EventLog.log.0,"ORA-",UTF-8,800]
      В таком случае на сервер Zabbix будут пересылаться только строки, содержащие подстроку "ORA-", и, если конкретно "ORA-01086" Вас НЕ интересует, то соответствующее условие можно записать в формуле триггера:
      Code:
      {YourHost:log[/opt/tx/log4zabbix/EventLog.log.0,"ORA-",UTF-8,800]str(ORA-01086)}=0
      Правда, такой триггер, в свою очередь, будет закрываться только при поступлении строки, содержащей подстроку "ORA-01086" (а поступать будут только строки, содержащие "ORA-").
      Поэтому часто возникает искушение "гасить" подобный триггер по таймеру (например, сработал - повисел пару минут - закрылся автоматически), не дожидаясь, когда придёт новое значение, необходимое для закрытия триггера. Но, к сожалению, подобный механизм несовместим с опцией "Multiple PROBLEM events generation" (можете поискать по форуму, я об этом писал неоднократно).

      Comment

      Working...