Ad Widget

Collapse

Предобработка ошибок для не поддерживаемых элементов данных

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Alex_UUU
    Senior Member
    • Dec 2018
    • 541

    #1

    Предобработка ошибок для не поддерживаемых элементов данных

    Коллеги, приветствую.
    Очень часто бывает, что в какой-то момент ЭД не поддерживается.
    Например
    Code:
    vfs.file.size[log.log]
    выдает
    Code:
    Cannot obtain file information: [2] No such file or directory
    если файла нет.
    Но логичнее было бы иметь в данном случае значение 0.
    ПРочитал про предобработку, но не понял, можно ли как-то обрабатывать такие ошибочные значения?
    Аналогично бывает, если ЭД, например, содержит awk где суммируем элементы, и если их нет, то получаем пустоту, вместо 0 и ЭД переходит в неподдерживаемое.

    Те. вопрос: можно ли сделать предобработку неподдерживаемых ЭД?
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    Немного подправив логику действий можно получить рабочий вариант. Нужно не давать ЭД становиться неподдерживаемым! На это есть припроцессинг "matches regular exp" - в нем регуляркой описываешь какие данные должны быть и устанавливаешь галку "custom on fail" > set_value_to=значение. В твоем примере с логом при хорошем раскладе должно вернуться что-то типа "\d+\.?\d*" . Если вернулось что-то другое (например сообщение об ошибке) попадаем на fail с set_value_to=0 и иеем работающий элемент данных со значением ноль.

    Comment


    • Hamardaban
      Hamardaban commented
      Editing a comment
      нет - так не сработает. пардон
  • Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    #3
    Никакой препроцессинг тут не поможет. Обработка ошибок в препроцессинге (custom on fail) относится только к ошибкам, возникшим в самом препроцессинге. Если item становится неподдерживаемым до препроцессинга (кроме ошибок, связанных с несовпадением типа) - это не лечится.
    Last edited by Semiadmin; 05-09-2019, 16:52.

    Comment

    • Hamardaban
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • May 2019
      • 2713

      #4
      Полностью согласен.

      Comment

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

        #5
        Originally posted by Alex_UUU
        Аналогично бывает, если ЭД, например, содержит awk где суммируем элементы, и если их нет, то получаем пустоту, вместо 0 и ЭД переходит в неподдерживаемое.
        Вот это, как раз, элементарно лечится средствами самого awk. Если результат (сумма) выводится в секции END, то при выводе к нему нужно добавлять арифметический ноль (явно приводя к арифметическому типу).

        Пример из практики

        На некоторой Linux-машине нужно считать количество TCP-соединений из определённой подсети (192.168.162.0/24), установленных на конкретный IP-адрес. Для этого через UserParameter создаём элемент данных, который будет подсчитывать нужное число, обрабатывая вывод команды ss: число соединений в состоянии, заданном первым параметром, на IP-адрес и порт, заданные первым параметром. Например: tcp.conn.port[ESTAB,192.168.1.81:22]. Запись в zabbix_agent.conf выглядит так:
        Code:
        UserParameter=tcp.conn.port[*],ss -t -n | awk '$$1=="$1" && $$4=="$2" && $$5~"192\\.168\\.162\\." {SUM++} END {print 0+SUM}'
        В данном случае, если бы в секции END стояло бы просто "print SUM", то при отсутствии соединений awk-переменная SUM оставалась бы неинициализированной и выводилась как пустая строка. Явное арифметическое добавление нуля к ней заставляет awk выводить в этой ситуации не пустую строку, а именно ноль.
        Last edited by Kos; 10-09-2019, 10:09.

        Comment

        • Alex_UUU
          Senior Member
          • Dec 2018
          • 541

          #6
          Originally posted by Kos
          Вот это, как раз, элементарно лечится средствами самого awk. Если результат (сумма) выводится в секции END, то при выводе к нему нужно добавлять арифметический ноль (явно приводя к арифметическому типу).
          .
          Я именно так и делаю. Основной вопрос то был в обработке ошибок от стандартных, заббиксовский ключей.
          Можно, конечно, код подправить :-) Но не хочется :-)

          Comment

          • DSV12
            Senior Member
            Zabbix Certified Specialist
            • Nov 2018
            • 156

            #7
            Originally posted by Kos
            Явное арифметическое добавление нуля к ней заставляет awk выводить в этой ситуации не пустую строку, а именно ноль.
            Оффтоп, конечно, просто реакция (условный рефлекс) на аббревиатуру awk Классный инструмент, всё-таки, вот интересный практический пример:
            Code:
            cat file.txt | awk '!a[$0]++'
            Это практически эквивалент более известной комбинации:
            Code:
             'cat file.txt | sort | uniq'
            - и гораздо красивее

            Comment

            Working...