Ad Widget

Collapse

Помогите разобраться с триггером

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • MetrS
    Member
    • Mar 2016
    • 38

    #1

    Помогите разобраться с триггером

    Всем привет!

    Использую мониторинг веб-сервера на предмет процессов, его нагружающих.

    Сервер отдает system.topcpu[50]=.
    При появлении нагрузки >50% - 60.6%httpd 9.8%httpd 4.9%mysqld (например).
    Тип - текст, длина символов вычисляется нормально в триггере.

    Нужно, чтобы триггер сработал после третьего загруженного значения.

    Триггер такой:
    {CPU top Linux:system.topcpu[50].strlen(#3)}>1

    Если 3 значения будут (нагрузка процессора 3 раза подряд выше 50%), то должна быть сработка.
    Письмо приходит, но даже если 3 точки подряд идут предыдущих - то все равно приходит письмо и жрущий процесс высвечивается как ".".

    #3 получается работает не для процессов с длиной строки более 1 символа....

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

    Как мне сделать нужное условие (если 3 сработки подряд нагруженных процессов, только тогда отсылать письмо)?
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Originally posted by MetrS
    Тип - текст, длина символов вычисляется нормально в триггере.

    Нужно, чтобы триггер сработал после третьего загруженного значения.

    Триггер такой:
    {CPU top Linux:system.topcpu[50].strlen(#3)}>1
    Триггерная функция strlen() возвращает длину одного конкретного элемента данных. Например, strlen(#3) - третьего с конца.
    Т.е. прямой способ решения Вашей проблемы - это написать триггер с тремя условиями, что-то вроде:
    Code:
    {CPU top Linux:system.topcpu[50].strlen(#3)}>1 and {CPU top Linux:system.topcpu[50].strlen(#2)}>1 and {CPU top Linux:system.topcpu[50].strlen(#1)}>1
    Но если я правильно понимаю, что в обычной ситуации этот элемент данных возвращает пустое значение, то можно соптимизировать условие триггера, воспользовавшись функцией count(). Ищем строку, которая возвращается при любом непустом значении (например, символ процента). Если из трёх последних значений он присутствует во всех трёх - то тревога:
    Code:
    {CPU top Linux:system.topcpu[50].count(#3,"%","like")}=3

    Comment

    • MetrS
      Member
      • Mar 2016
      • 38

      #3
      Originally posted by kos
      Триггерная функция strlen() возвращает длину одного конкретного элемента данных. Например, strlen(#3) - третьего с конца.
      Т.е. прямой способ решения Вашей проблемы - это написать триггер с тремя условиями, что-то вроде:
      Code:
      {cpu top linux:system.topcpu[50].strlen(#3)}>1 and {cpu top linux:system.topcpu[50].strlen(#2)}>1 and {cpu top linux:system.topcpu[50].strlen(#1)}>1
      Но если я правильно понимаю, что в обычной ситуации этот элемент данных возвращает пустое значение, то можно соптимизировать условие триггера, воспользовавшись функцией count(). Ищем строку, которая возвращается при любом непустом значении (например, символ процента). Если из трёх последних значений он присутствует во всех трёх - то тревога:
      Code:
      {cpu top linux:system.topcpu[50].count(#3,"%","like")}=3
      При загрузке менее 50%, возвращается лишь 1 символ "."
      Спасибо, протестирую ваши советы!
      Last edited by MetrS; 08-04-2016, 12:39.

      Comment

      • MetrS
        Member
        • Mar 2016
        • 38

        #4
        Kos спасибо!
        {cpu top linux:system.topcpu[50].count(#3,"%","like")}=3
        Работает отлично!

        Странно, что в примерах в zabbix нет счетчиков, только попытки.

        Comment

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

          #5
          Ну что ж, рад , что помогло

          Comment

          Working...