Ad Widget

Collapse

Настроить элемент и триггер

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Dusty
    Member
    • Dec 2010
    • 70

    #1

    Настроить элемент и триггер

    Есть сервер, на котором работает проверка типа

    "Zabbix server:web.page.regexp[192.168.0.100,heartbeat/get.asp?id=4433,80,"Not processed count</td><td>\d+</td>",,]"

    Результат - целое число.

    Эпизодически вместо числа в вывод попадает строка и тогда заббикс пишет, что

    became not supported: Value "" of type "string" is not suitable for value type "Numeric (unsigned)"

    Триггер настроен на значение как число, при превышении контрольного за определенное время срабатывает.

    Как обойти?
  • tutunak
    Member
    • Mar 2016
    • 32

    #2
    есть пример страницы, когда попадает число, когда попадает текст, и когда все ок?

    Comment

    • Dusty
      Member
      • Dec 2010
      • 70

      #3
      Originally posted by tutunak
      есть пример страницы, когда попадает число, когда попадает текст, и когда все ок?
      Есть. Страница, когда всё хорошо, выглядит так:

      App pool start time 10.11.2016 09:54:53
      Current server time 22.12.2017 9:01:41
      Heartbeat received 22.12.2017 9:00:43
      Process start time 30.11.2017 13:31:09
      Current machine time 22.12.2017 9:00:44
      Process ID 2832
      Working set 43 253 760
      Machine name SRV
      Not processed count 0
      Private memory size 25 333 760
      Virtual memory size 236 228 608
      Processing now count 0
      Last message number 1212295
      Last message received 22.12.2017 7:34:36
      Last 30 msg times 473, 2479, 31496

      Контрольное значение находится в строке "Not processed count". Содержит в конце целочисленные значения больше нуля. Всё, что от нудя отличается - ошибка.

      Текст попадает например когда возникает ошибка самого отдающего IIS, типа 403, 404 или 500-й серии. Масса вариантов. Отлуп по таймауту например. Соответственно нужная строка отсутствует.

      Comment

      • Semiadmin
        Senior Member
        • Oct 2014
        • 1625

        #4
        Я бы вообще отказался от web.page.regexp и использовал userparameter с curl и парсингом ответа на awk. В случае отсутствия строки возвращал бы, например, -1.

        Comment

        • Dusty
          Member
          • Dec 2010
          • 70

          #5
          Ну тоже вариант в принципе.

          Comment

          • Dusty
            Member
            • Dec 2010
            • 70

            #6
            Originally posted by Semiadmin
            Я бы вообще отказался от web.page.regexp и использовал userparameter с curl и парсингом ответа на awk. В случае отсутствия строки возвращал бы, например, -1.
            Не везде есть возможность достучаться до нужной сети с сервера мониторинга. В основном приходится запрашивать с пограничного сервера информацию, а это в основном винда. И там постоянно попадаются записи типа "not supported" потому, что скрипт например не успевает отработать. При том что таймаут увеличен до 20.

            Так что тема открыта.

            Comment

            • Semiadmin
              Senior Member
              • Oct 2014
              • 1625

              #7
              Есть curl, портированный для Windows.

              Comment

              • Dusty
                Member
                • Dec 2010
                • 70

                #8
                Originally posted by Semiadmin
                Есть curl, портированный для Windows.
                Большая проблема была поставить на сервер агента заббикс - куча согласований. Ставить ещё и curl туда будет ещё большей проблемой к сожалению. Так что надо искать другой путь.

                Comment

                • Semiadmin
                  Senior Member
                  • Oct 2014
                  • 1625

                  #9
                  Ну, curl для windows portable, надо просто скопировать его в папку zabbix агента, инсталляция не нужна. Можно попытаться представить его составной частью агента)

                  Comment

                  • Dusty
                    Member
                    • Dec 2010
                    • 70

                    #10
                    Originally posted by semiadmin
                    Ну, curl для windows portable, надо просто скопировать его в папку zabbix агента, инсталляция не нужна. Можно попытаться представить его составной частью агента)
                    Спасибо, попробую.

                    Comment

                    • Semiadmin
                      Senior Member
                      • Oct 2014
                      • 1625

                      #11
                      Альтернативный вариант - PowerShell и Invoke-WebRequest. Правда, скорее всего, придется обрабатывать exceptions.

                      Comment

                      • Dusty
                        Member
                        • Dec 2010
                        • 70

                        #12
                        Originally posted by Semiadmin
                        Альтернативный вариант - PowerShell и Invoke-WebRequest. Правда, скорее всего, придется обрабатывать exceptions.
                        Решил через внешнюю проверку (один из элементов) таким образом:

                        скрипт в папке внешних скриптов

                        Code:
                        #!/bin/bash
                        # Забираем строку курлом с таймаутом 5с
                        PROM=$(curl -s -connect-timeout=5 http://192.168.0.100/heartbeat/get.asp?id=4433 | grep 'Not process' | cut -f 53 -d '>' | cut -f 1 -d '<') > /dev/null
                        #Проверяем вывод команды
                        if [ "$?" -ne "0" ] ; then
                                #Ошибка
                                echo "-1"
                        else
                                #Вывод нормальный
                                echo $PROM
                        fi
                        При 404 ошибке например выкидывает в ответ пустую строку (как я понимаю из-за того, что grep не находит нужное), соответственно на этот счёт можно повесить триггер nodata как я подозреваю.

                        Comment

                        • Semiadmin
                          Senior Member
                          • Oct 2014
                          • 1625

                          #13
                          IMHO, nodata здесь не требуется. Я бы сделал как-то так:

                          curl -s -m 5 http://192.168.0.100/heartbeat/get.asp?id=4433 | awk 'BEGIN {RES = -1;} $1 ~/^Not/ {RES=$4;} END {print RES}'

                          Нет строки - "-1", есть - 0 или другое значение

                          Comment

                          • Dusty
                            Member
                            • Dec 2010
                            • 70

                            #14
                            Originally posted by semiadmin
                            imho, nodata здесь не требуется. Я бы сделал как-то так:

                            Curl -s -m 5 http://192.168.0.100/heartbeat/get.asp?id=4433 | awk 'begin {res = -1;} $1 ~/^not/ {res=$4;} end {print res}'

                            Нет строки - "-1", есть - 0 или другое значение
                            Нужно меньше нуля при ошибках выводить, иначе триггер не поймёт когда срабатывать. Значения все целые и больше нуля, если всё хорошо, вернее хорошо - это "0", больше - ошибка.

                            В идеале при таймауте нужно "-1", а при отсутствии страницы "-2" например
                            Last edited by Dusty; 27-12-2017, 09:37.

                            Comment

                            • Semiadmin
                              Senior Member
                              • Oct 2014
                              • 1625

                              #15
                              Если нужно отличать таймаут от отсутствия страницы, то можно добавить в curl вывод http status code, например, так:
                              -w "\nStatusCode %{http_code}"
                              и обрабатывать эту дополнительную строку в скрипте, выводя -1 при status code 0 (timeout) , -2 при <>200, 0 и выше при наличии строки Not processed count.

                              Comment

                              Working...