Ad Widget

Collapse

Парсинг JSON из curl

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • labtop
    Junior Member
    • Jun 2023
    • 10

    #1

    Парсинг JSON из curl

    сделал скрипт который выводит json . Создал шаблон который получает json для парсинга тут все работает ,создал зависимый элемент и тут начинаются проблемы . Ошибка на фото
    Click image for larger version

Name:	78777.png
Views:	259
Size:	16.1 KB
ID:	468191
    Из консоли запрос отрабатывает
    curl -s http://127.0.0.1/auth/realms/master/health/check -H "host: localhost.ru" | jq '.state'
    "UP"

    Запускаю через агента zabbix_agentd -t keycloak json получаю . zabbix_agentd -t keycloak | jq '.state' ошибка.


    ​ Использовал инструкцию https://www.zabbix.com/documentation..._functionality
    curl 7.29.0
    jq-1.6
    Zabbix 5.0.15
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Посмотрите, пожалуйста, мой сегодняшний комментарий здесь.

    Что касается мониторинга Keycloak-а, то могу поделиться тем, как это реализовано у меня (по сути, делается то же самое, только средствами самого Zabbix, без необходимости в curl, jq и внешних скриптах). Правда, у меня Zabbix 6.0, но, вроде бы, там ничего специфичного именно для этой версии не используется - должно работать и в 5.0 тоже.

    Comment

    • labtop
      Junior Member
      • Jun 2023
      • 10

      #3
      Originally posted by Kos
      Посмотрите, пожалуйста, мой сегодняшний комментарий здесь.

      Что касается мониторинга Keycloak-а, то могу поделиться тем, как это реализовано у меня (по сути, делается то же самое, только средствами самого Zabbix, без необходимости в curl, jq и внешних скриптах). Правда, у меня Zabbix 6.0, но, вроде бы, там ничего специфичного именно для этой версии не используется - должно работать и в 5.0 тоже.
      Спасибо большое сработало , как сделать чтобы значение подставлялась автоматически в зависимый элемент данных

      Comment

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

        #4
        Originally posted by labtop
        Спасибо большое сработало , как сделать чтобы значение подставлялась автоматически в зависимый элемент данных
        Простите, не понял: таки сработало, или всё же где-то что-то не подставляется? И есть ли смысл показывать свой шаблон?

        Comment

        • labtop
          Junior Member
          • Jun 2023
          • 10

          #5
          Originally posted by Kos
          Посмотрите, пожалуйста, мой сегодняшний комментарий здесь.

          Что касается мониторинга Keycloak-а, то могу поделиться тем, как это реализовано у меня (по сути, делается то же самое, только средствами самого Zabbix, без необходимости в curl, jq и внешних скриптах). Правда, у меня Zabbix 6.0, но, вроде бы, там ничего специфичного именно для этой версии не используется - должно работать и в 5.0 тоже.
          Конечно , буду рад узнать ваш опыт и боль)

          Comment

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

            #6
            Originally posted by labtop
            Конечно , буду рад узнать ваш опыт и боль)
            Хорошо, описываю. Не выкладываю в виде экспорт-файла, поскольку всё равно его в предыдущую версию Zabbix будет не запихнуть; проще пересоздать всё по скриншотам.

            Несколько предварительных замечаний:
            • во-первых, у нас процессы Keycloak крутятся на Linux-машинах, на которых имеются агенты Zabbix. Это в данном случае непринципиально, но позволяет обращаться к этим агентам для контроля наличия соответствующего процесса;
            • во-вторых, у нас наши экземпляры Keycloak-ов настроены таким образом, что отдают своё состояние при обращении по URL: https://локальное.доменное.имя/health. Для формирования нужного пути используется пользовательский макрос {$KC_FQDN}, который нужно определить на уровне конкретного хоста (в правильный FQDN соответствующего экземпляра);
            • используется 4 элемента данных - контроль запущенного процесса (через агент Zabbix), мастер-айтем с типом "агент HTTP" (получающий JSON с состоянием самого Keycloak-а и его базы данных) и два зависимых от него элемента данных, которые через преобработку JSONPath выдёргивают соответствующие элементы этого JSON-а;
            • соответственно, есть 3 триггера: реакция на отсутствие самого процесса (дважды подряд) и два зависимых от него - на то, что соответствующие элементы JSON-а не равны "UP".
            Первый скриншот демонстрирует заданные на уровне шаблона теги, но реально они используются только для группировки и фильтрации (например, на экране "Последние данные"):
            Click image for larger version  Name:	screenshot-2023-08-02_02.png Views:	0 Size:	17.0 KB ID:	468202

            Второй скриншот показывает список всех элементов данных:
            Click image for larger version  Name:	screenshot-2023-08-02_03.png Views:	0 Size:	42.5 KB ID:	468203 Click image for larger version  Name:	screenshot-2023-08-02_04.png Views:	0 Size:	37.3 KB ID:	468204​Третий скриншот показывает элемент данных для контроля процессов (процесс "java" с нужными параметрами, запущенный от пользователя "keycloak"). Ключ этого элемента данных:
            Code:
            proc.num[java,keycloak,,^java .*-Dkc.home.dir=/opt/keycloak]
            Last edited by Kos; 02-08-2023, 17:14.

            Comment

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

              #7
              Далее - мастер-айтем, забирающий по HTTPS состояние (возвращаемое в виде JSON-а).
              В нормальном состоянии возвращается вот что:
              Code:
              {
                "status": "UP",
                "checks": [
                  {
                    "name": "Keycloak database connections health check",
                    "status": "UP"
                  }
                ]
              }​
              Скриншот:
              Click image for larger version

Name:	screenshot-2023-08-02_05.png
Views:	210
Size:	34.5 KB
ID:	468206
              Для него в качестве шагов предобработки делаем проверку на то, что вообще что-то вернулось, если нет - подставляем свой JSON (иначе при отсутствии ответа и этот, и зависимые от него айтемы перейдут в неподдерживаемое состояние, а триггеры не сработают):
              Click image for larger version

Name:	screenshot-2023-08-02_06.png
Views:	197
Size:	21.7 KB
ID:	468207

              Comment

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

                #8
                Первый из зависимых элементов данных - состояние самого Keycloak-а. Он зависимый от предыдущего элемента данных:
                Click image for larger version

Name:	screenshot-2023-08-02_07.png
Views:	226
Size:	34.5 KB
ID:	468209
                В предобработке выдёргивается нужная часть JSON-а, в данном случае JSONPath очень простой:
                Code:
                $.status
                Click image for larger version

Name:	screenshot-2023-08-02_08.png
Views:	195
Size:	24.5 KB
ID:	468210 Опять же, если не смогли распарсить JSON (например, вместо него вернулся HTTP-ответ с кодом 500), то, чтобы элемент данных не переходил в неподдерживаемоме состояние, задаём собственное значение.

                Совершенно аналогично делаем и второй зависимый элемент данных (состояние базы данных Keycloak-а), только там выражение JSONPath будет чуть посложнее:
                Code:
                $.checks[?(@.name=="Keycloak database connections health check")].status.first()
                Наконец, все триггеры видны на последнем скриншоте:
                Click image for larger version

Name:	screenshot-2023-08-02_09.png
Views:	186
Size:	63.8 KB
ID:	468211 Синтаксис триггерных выражений немного поменялся между версиями 5.0 и 6.0, но тут всё достаточно просто и понятно.
                Каждый раз проверяем два последних значения и ругаемся, если либо дважды подряд не нашли нужного процесса, либо дважды подряд состояние не "UP".

                Comment

                • labtop
                  Junior Member
                  • Jun 2023
                  • 10

                  #9
                  Originally posted by Kos
                  Первый из зависимых элементов данных - состояние самого Keycloak-а. Он зависимый от предыдущего элемента данных:
                  Click image for larger version

Name:	screenshot-2023-08-02_07.png
Views:	226
Size:	34.5 KB
ID:	468209
                  В предобработке выдёргивается нужная часть JSON-а, в данном случае JSONPath очень простой:
                  Code:
                  $.status
                  Click image for larger version

Name:	screenshot-2023-08-02_08.png
Views:	195
Size:	24.5 KB
ID:	468210 Опять же, если не смогли распарсить JSON (например, вместо него вернулся HTTP-ответ с кодом 500), то, чтобы элемент данных не переходил в неподдерживаемоме состояние, задаём собственное значение.

                  Совершенно аналогично делаем и второй зависимый элемент данных (состояние базы данных Keycloak-а), только там выражение JSONPath будет чуть посложнее:
                  Code:
                  $.checks[?(@.name=="Keycloak database connections health check")].status.first()
                  Наконец, все триггеры видны на последнем скриншоте:
                  Click image for larger version

Name:	screenshot-2023-08-02_09.png
Views:	186
Size:	63.8 KB
ID:	468211 Синтаксис триггерных выражений немного поменялся между версиями 5.0 и 6.0, но тут всё достаточно просто и понятно.
                  Каждый раз проверяем два последних значения и ругаемся, если либо дважды подряд не нашли нужного процесса, либо дважды подряд состояние не "UP".

                  Я добавил этот провайдер , он выводи инфо по infinispan и не только . Спасибо большое за помощь.
                  Keycloak Extension for health checks. Contribute to thomasdarimont/keycloak-health-checks development by creating an account on GitHub.

                  Comment

                  • labtop
                    Junior Member
                    • Jun 2023
                    • 10

                    #10
                    у меня получился вот такой распарсенный ответ .
                    Click image for larger version

Name:	45645.png
Views:	170
Size:	67.9 KB
ID:	468424

                    Comment

                    Working...