Ad Widget

Collapse

web.page.get - Кеширует значения?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • igoryok20
    Junior Member
    • Sep 2020
    • 9

    #1

    web.page.get - Кеширует значения?

    Всем привет!
    Есть zabbix-server 6.0.20 и есть клиент на Windows Server 2019 Zabbix agent2 6.0.19 (конфиг не кастомный)
    На клиенской машине крутиться веб страничка которая отдает статистику в формате json. Healthcheck службы.
    Мне нужно следить за значениями.
    Я сделал так:
    создал елемент данных и использовал ключ web.page.get - он получет весь json (WEB PAGE GET) раз в минуту.
    потом сделал зависимые елементы и парсил те значения которые мне надо.
    Проблема в том что при просмотре истории значений елемента WEB PAGE GET данные обновляються только тогда когда на сервере открыть получаемую страничку и обновить.
    Если в ручную открыть получаемую страничку - значения меняються на страничке.
    Помогите разобраться. У меня такое чуство что агент просто закешировал значения и отдает серверу одни и те же постоянно.
    Может кто-то сталкивался с такой проблемой?​
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Если есть доступ от сервера Zabbix до вашего клиента, отдающего страничку по HTTP(S), то проще и надёжнее использовать не web.page.get, работающий на агенте, а HTTP агент, работающий на сервере (ссылка).

    Comment

    • igoryok20
      Junior Member
      • Sep 2020
      • 9

      #3
      Originally posted by Kos
      Если есть доступ от сервера Zabbix до вашего клиента, отдающего страничку по HTTP(S), то проще и надёжнее использовать не web.page.get, работающий на агенте, а HTTP агент, работающий на сервере (ссылка).
      Originally posted by Kos
      Если есть доступ от сервера Zabbix до вашего клиента, отдающего страничку по HTTP(S), то проще и надёжнее использовать не web.page.get, работающий на агенте, а HTTP агент, работающий на сервере (ссылка).
      Настроил, ситуация похожая.



      Где выделено - тогда я веб страничку не трогал. Чтобы данные поменялись - мне нужно зайти на сервер по рдп, открыть ссылку в браузере и зделать рефреш.
      2й метод а поведение такое же.​
      Хотя если просто открыть страничку и много раз нажимать рефреш - данные на страничке меняються.(думаю не в страничке дело)
      Версию агента обновил до 6.0.25 - ситуацию не изменило
      Last edited by igoryok20; 23-01-2024, 14:45.

      Comment

      • igoryok20
        Junior Member
        • Sep 2020
        • 9

        #4
        Установил у себя в сети такой же сервер (Qlik Sense) который отдает Healthcheck.
        Натравил на него забикс - результат такой же.
        Попробуйю отдельно поставить последнюю версию Zabbix Server - может в этом проблема.

        Comment

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

          #5
          Originally posted by igoryok20
          Настроил, ситуация похожая.
          Где выделено - тогда я веб страничку не трогал. Чтобы данные поменялись - мне нужно зайти на сервер по рдп, открыть ссылку в браузере и зделать рефреш.
          2й метод а поведение такое же.​
          Не очень понял про выделение - наверное, вы пытались приложить какой-то скриншот, но неудачно (никаких скриншотов не видно).
          Я практически не использовал запросы агентом через web.page.get​, но достаточно активно использую HTTP Agent-а - у нас с его помощью проверяется состояние нескольких Keycloak-ов и некоторого оборудования (стойки охлаждения в серверной, чей контроллер не умеет отдавать данные по SNMP, но отдаёт по HTTP).
          Все проверки работают, как часы. Версия сервера Zabbix - 6.0 (на данный момент релиз 6.0.23, но без проблем работало и раньше).

          То, что проверки разными методами дают идентичный результат, как бы намекает на то, что проблема не на стороне Zabbix-а. Но в любом случае было бы интересно узнать подробности - что за система такая, что данные отдаёт только конкретному браузеру локально. А если со стороны сервера Zabbix пробовать выполнять аналогичные GET-запросы каким-нибудь curl-ом или wget-ом - что происходит?

          Comment

          • igoryok20
            Junior Member
            • Sep 2020
            • 9

            #6
            Originally posted by Kos
            Не очень понял про выделение - наверное, вы пытались приложить какой-то скриншот, но неудачно (никаких скриншотов не видно).
            Я практически не использовал запросы агентом через web.page.get​, но достаточно активно использую HTTP Agent-а - у нас с его помощью проверяется состояние нескольких Keycloak-ов и некоторого оборудования (стойки охлаждения в серверной, чей контроллер не умеет отдавать данные по SNMP, но отдаёт по HTTP).
            Все проверки работают, как часы. Версия сервера Zabbix - 6.0 (на данный момент релиз 6.0.23, но без проблем работало и раньше).

            То, что проверки разными методами дают идентичный результат, как бы намекает на то, что проблема не на стороне Zabbix-а. Но в любом случае было бы интересно узнать подробности - что за система такая, что данные отдаёт только конкретному браузеру локально. А если со стороны сервера Zabbix пробовать выполнять аналогичные GET-запросы каким-нибудь curl-ом или wget-ом - что происходит?
            Да я добавлял скрин.
            Click image for larger version

Name:	Screenshot_19.png
Views:	70
Size:	34.8 KB
ID:	477616

            Comment

            • igoryok20
              Junior Member
              • Sep 2020
              • 9

              #7
              Решл попробовать другим путем:
              попросил чат-гпт написать мини скрипт который будет отдавать количество секунд:
              PHP Code:
              from flask import Flaskjsonify
              import time

              app 
              Flask(__name__)

              @
              app.route('/get_seconds'methods=['GET'])
              def get_seconds():
              current_seconds int(time.time())
              return 
              jsonify(seconds=current_seconds)

              if 
              __name__ == '__main__':
              app.run(host='0.0.0.0'port=5000debug=True

              натравил на него заббикс - все работает хорошо. Все отдает корректно.

              Что еще заметил - при запросе странички с сервера с разных браузеров поведение разное. Если на пример в хроме открыть ссылку и рефрешить страничку - данные обновляються, если делать так же в фаерфоксе - не обновляються пока не нажмешь CTRL+F5.
              Предположил что можно отправить в заголовках параметры:
              PHP Code:
              Cache-Controlno-cache
              Pragma
              :no-cache
              Connection
              :close 
              чтобы соединение всегда создавалось новое - не помогло.

              Comment

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

                #8
                Originally posted by igoryok20
                Да я добавлял скрин.
                Да, теперь скрин виден, спасибо.
                Но на нём значение только одного параметра. А что с остальными, да и вообще со всей исходной страницей в целом? Сама страница каждый раз отдаётся точь-в-точь такой же, включая все заголовки?

                Comment

                • Alex_UUU
                  Senior Member
                  • Dec 2018
                  • 541

                  #9
                  А может просто вебсервер к которому делается запрос кеширует ответы? Судя по скрипту от чата, он как раз передает каждый раз новый запрос, которого однозначно нет в кеше. Ф5 также обновляет запрос.

                  Comment

                  • igoryok20
                    Junior Member
                    • Sep 2020
                    • 9

                    #10
                    Originally posted by Alex_UUU
                    А может просто вебсервер к которому делается запрос кеширует ответы? Судя по скрипту от чата, он как раз передает каждый раз новый запрос, которого однозначно нет в кеше. Ф5 также обновляет запрос.
                    Больше всего так оно и есть. Так как после моей простой проверки пайтон скриптом - забикс забирает все корректно. Значит виновата вебстраничка.
                    Я добавил заголовки в запросе:
                    PHP Code:
                    Cache-Control:no-cache
                    Pragma
                    :no-cache
                    Connection
                    :close
                    User
                    -Agent:Windows 
                    Это исправило ситуацию. Данные меняються.
                    Всем спасибо.

                    Comment

                    • igoryok20
                      Junior Member
                      • Sep 2020
                      • 9

                      #11
                      Originally posted by Kos
                      Не очень понял про выделение - наверное, вы пытались приложить какой-то скриншот, но неудачно (никаких скриншотов не видно).
                      Я практически не использовал запросы агентом через web.page.get​, но достаточно активно использую HTTP Agent-а - у нас с его помощью проверяется состояние нескольких Keycloak-ов и некоторого оборудования (стойки охлаждения в серверной, чей контроллер не умеет отдавать данные по SNMP, но отдаёт по HTTP).
                      Все проверки работают, как часы. Версия сервера Zabbix - 6.0 (на данный момент релиз 6.0.23, но без проблем работало и раньше).

                      То, что проверки разными методами дают идентичный результат, как бы намекает на то, что проблема не на стороне Zabbix-а. Но в любом случае было бы интересно узнать подробности - что за система такая, что данные отдаёт только конкретному браузеру локально. А если со стороны сервера Zabbix пробовать выполнять аналогичные GET-запросы каким-нибудь curl-ом или wget-ом - что происходит?
                      Это система бизнес аналитики Qlik Sense on Windows. С розряда PowerBI, Tableau... Она состоит из нескольких служб. И одна из служб это Engine. Он занимается вычеслениями в отчете и он же отдает состояние своего здоровья в виде ответа на запрос страницы engine/healthcheck.

                      Отдает в таком виде:

                      PHP Code:
                      {"version":"12.1678.11","started":"20240122T032213.000+0200","mem":{"committed":23583.33984375,"allocated":37661.26171875,"free":3485.59765625},"cpu":{"total":50},"session":{"active":1,"total":16},"apps":{"active_docs":["b803ae04-10f7-4c51-8265-994cdeff41f7"],"loaded_docs":["39dd7fb4-1502-4b59-bce2-fe22beade6c2","7cd669b7-aa1a-449f-ae0d-da5af61f5846","b803ae04-10f7-4c51-8265-994cdeff41f7"],"in_memory_docs":["39dd7fb4-1502-4b59-bce2-fe22beade6c2","7cd669b7-aa1a-449f-ae0d-da5af61f5846","86c9299d-dd03-4bbf-beaa-6bff423271d6","b5762066-319c-4fe8-9fb1-f8e2c2a3575c","b803ae04-10f7-4c51-8265-994cdeff41f7"],"calls":64475,"selections":782},"users":{"active":1,"total":16},"cache":{"hits":1635,"lookups":1636,"added":1,"replaced":0,"bytes_added":3136},"saturated":false
                      Этот ответ можно получить только если сделать запрос непосредственно с сервера.
                      Выходит что проблема в нем - так как при запросе с фаерфокса поведение такое же как и у забикса. Тоесть один и тот же результат json. Если нажать CTRL+F5 данные меняються.
                      Если использовать хром или едж - данные меняються при простом обновлении страницы. (тоесть работает как надо)

                      Comment

                      Working...