Ad Widget

Collapse

провалы в данных

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • shkiper
    Senior Member
    • Mar 2016
    • 123

    #1

    провалы в данных

    zabbix 2.4
    подключил шаблоны MySQL и Apache, и в их графиках стали появляться "дыры" по 10-15 минут на всех ключах, с начала подумал - не хватает производительности сервера (требуемая производительность - 37), но разрывы были только на этих шаблонах, остальные данные - нормально
    и вот, поймал когда оно заткнулось (Apache), оказывается в этот момент ключ выдает ошибку при приеме данных: "Received value [] is not suitable for value type [Numeric (unsignet)] and data type [Decimal]"
    потом проходит некоторе время и все опять нормально работает
    Apache мониторится хитрым скриптом (нагуглил), с кэшированием и слипом, и можно было бы предположить, что в нем причина, но MySQL считывается стандартным шаблоном, а глюк тот же
    куда копать, как локализовать проблему?

    кажется у MySQL и Apache разные причины разрывов, у Apache все-таки дело в скрипте
    скрипт не всегда выдает результат, иногда посылает пустое значение, тогда возникает ошибка, и zabbix ждет некоторое время, помечая элемент "крестом"
    Last edited by shkiper; 21-01-2017, 15:42.
  • Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    #2
    Если айтемы становятся неподдерживаемыми, а сообщений об ошибке нет, то дело, скорее всего, в таймауте.

    Comment

    • yukra
      Senior Member
      • Apr 2013
      • 1359

      #3
      Originally posted by shkiper
      zabbix 2.4
      подключил шаблоны MySQL и Apache, и в их графиках стали появляться "дыры" по 10-15 минут на всех ключах, с начала подумал - не хватает производительности сервера (требуемая производительность - 37), но разрывы были только на этих шаблонах, остальные данные - нормально
      и вот, поймал когда оно заткнулось (Apache), оказывается в этот момент ключ выдает ошибку при приеме данных: "Received value [] is not suitable for value type [Numeric (unsignet)] and data type [Decimal]"
      потом проходит некоторе время и все опять нормально работает
      Apache мониторится хитрым скриптом (нагуглил), с кэшированием и слипом, и можно было бы предположить, что в нем причина, но MySQL считывается стандартным шаблоном, а глюк тот же
      куда копать, как локализовать проблему?

      кажется у MySQL и Apache разные причины разрывов, у Apache все-таки дело в скрипте
      скрипт не всегда выдает результат, иногда посылает пустое значение, тогда возникает ошибка, и zabbix ждет некоторое время, помечая элемент "крестом"
      1) Скрипт как-то не так открабатывает (возвращает пустое значение вместо циферки), падает в ансапортед и там ждет своего таймаута. Нужно смотреть в сам
      скрипт, писать дебаг к нему (скорей всего скрипт дергает server-status по http и видимо иногда это ему не удается), либо уменьшать таймаут для ансаппортед айтемов (Администрирование - Общие - Прочие - Обновление неподдерживаемых элементов данных (в сек)), тогда провалы останутся, но будут меньшей продолжительности.
      2) "стандарьный" мониторинг mysql сделан через запуск mysql-клиента и отправку команды и парсинга ответа. То есть проблема скорей всего примерно такая же (неответ от сервера). Причину можно найти так же написав пару строк дебага в скрипте (сохранять вывод STDERR в отдельный лог).

      Comment

      • shkiper
        Senior Member
        • Mar 2016
        • 123

        #4
        отдебажил скрипт, прикрутил к нему лог
        причина: curl (конечно же не сам curl, а апач, его status-mod, периодически подвисает)
        "curl: (28) Operation timed out after 2001 milliseconds with 0 bytes received"

        разбираться почему и отчего его клинит раз в несколько часов, считаю нецелесообразным
        вот думаю как правильно поступить, чтоб убрать провалы:
        подсовывать старые данные или нулевые значения?

        можно ли ничего не передавать, но чтобы при этом zabbix не переклинивало на 10 мин?

        пока сделал, чтоб передавал предыдущие значения, если curl не отрабатывает
        жду, должно в лог упасть при сработке
        Last edited by shkiper; 23-01-2017, 06:00.

        Comment

        • Semiadmin
          Senior Member
          • Oct 2014
          • 1625

          #5
          Originally posted by shkiper
          можно ли ничего не передавать, но чтобы при этом zabbix не переклинивало на 10 мин?
          Администрирование - Общие - Прочие - Обновление неподдерживаемых элементов данных (в сек)

          Comment

          • shkiper
            Senior Member
            • Mar 2016
            • 123

            #6
            спасибо!
            пошел путем обработки данной ситуации в скрипте, т.к. используется кеш-файл, то при исключении не переписываю его, а беру данные из того что есть (при этом логирую ошибки), провалы исчезли
            еще день-два посмотрю за работой скрипта и выложу код
            Last edited by shkiper; 24-01-2017, 04:28.

            Comment

            • yukra
              Senior Member
              • Apr 2013
              • 1359

              #7
              Originally posted by shkiper
              спасибо!
              пошел путем обработки данной ситуации в скрипте, т.к. используется кеш-файл, то при исключении не переписываю его, а беру данные из того что есть (при этом логирую ошибки), провалы исчезли
              еще день-два посмотрю за работой скрипта и выложу код
              Только следует понимать что провалы не исчезли, а теперь просто "замаскированны старыми данными"

              Comment

              • shkiper
                Senior Member
                • Mar 2016
                • 123

                #8
                Originally posted by yukra
                Только следует понимать что провалы не исчезли, а теперь просто "замаскированны старыми данными"
                ну типа того, тоже об этом думал, но на практике немного не так
                я продублировал некоторые ключи, чтоб они сохранялись текстом, для того чтоб проследить момент сбоя
                и сравниваю значения во время сбоя (сбой отмечается в логе скрипта, время на отслеживаемом апаче и заббиксе синхронизированное)
                некоторые ключи дублируют значения, причем далеко не всегда (при этом провалов по времени получения нет)
                некоторые никогда не дублируются
                предполагаю, что как то получается, что предыдущий "кэш", для скрипта, не всегда предыдущий файл для запрашиваемого заббиксом ключа

                создал пару тригеров, для ловли дублей
                по аптайму
                {MyTemplate_Apache2_agent:apache2[uptime, {$APACHE_STATS_URL}].change()}=0
                и еще один, потому что аптайм (визуально) почему-то вообще никогда не дублируется при сбоях
                ща посмотрим

                Comment

                • shkiper
                  Senior Member
                  • Mar 2016
                  • 123

                  #9
                  оригинал скрипта
                  http://wiki.enchtex.info/howto/zabbix/zabbix_apache_monitoring

                  вот с моими переделками
                  Code:
                  #!/bin/bash
                  function log {
                          echo "$(date) - $1" >> "/etc/zabbix/apstaterr.log"
                  }
                  
                  if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
                    exit 1
                  fi
                  ##### PARAMETERS #####
                  RESERVED="$1"
                  METRIC="$2"
                  URL="$3"
                  STATSURL="${URL}/server-status?auto"
                  #
                  CACHE_TTL="55"
                  CACHE_FILE="/tmp/zabbix.apache2.`echo ${URL} | md5sum | cut -d" " -f1`.cache"
                  EXEC_TIMEOUT="2"
                  NOW_TIME=`date '+%s'`
                  ##### RUN #####
                  if [ -s "${CACHE_FILE}" ]; then
                    CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"`
                  else
                    CACHE_TIME=0
                  fi
                  DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
                  
                  if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
                    sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
                  elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
                    DATACACHE=`curl -sS --insecure --max-time ${EXEC_TIMEOUT} "${STATSURL}" 2>&1`
                    str1=$(echo $DATACACHE | grep "after")
                      if [ -z "${str1}" ]; then
                          echo "" >> "${CACHE_FILE}" # !!!
                          echo "${DATACACHE}" > "${CACHE_FILE}" # !!!
                          echo "URL=${URL}"  >> "${CACHE_FILE}" # !!!
                          chmod 640 "${CACHE_FILE}"
                      else
                        log "${str1}"
                        log "${CACHE_TIME}"
                      fi
                  fi
                  #
                  
                  if [ ! -s ${CACHE_FILE} ]
                  then
                  log "${CACHE_FILE} not exist"
                  fi
                  
                  case "${METRIC}" in
                  "uptimetxt") res=$(cat "${CACHE_FILE}" | sed 's/\s\+//g' | grep -i "uptime" | cut -d':' -f2 | head -n1);;
                  "busyworkerstxt") res=$(cat "${CACHE_FILE}" | sed 's/\s\+//g' | grep -i "BusyWorkers" | cut -d':' -f2 | head -n1);;
                  "totalslots") res=$(cat "${CACHE_FILE}" | grep -i "Scoreboard" | cut -d':' -f2 | sed -e 's/ //g' | wc -c | awk '{print $1-1}');;
                  *)res=$(cat "${CACHE_FILE}" | grep -i "${METRIC}" | sed 's/\s\+//g' | cut -d':' -f2 | head -n1);;
                  esac
                  
                  if [ "${res}" ]; then
                  echo "${res}"
                  fi
                  exit 0
                  ключи соответственно тоже переделал - чтоб в ключе было точное имя параметра, кроме тоталслотс
                  обслугой лог файла (проверка наличия, создание и контроль размера) не стал заморачиваться
                  Last edited by shkiper; 25-01-2017, 08:18.

                  Comment

                  Working...