Обработка JSON-логов с неэкранированными вложенными JSON-строками

Материал из Документация Ключ-АСТРОМ
Версия от 17:55, 6 октября 2026; IKuznetsov (обсуждение | вклад) (Новая страница: « = Обработка JSON-логов с неэкранированными вложенными JSON-строками = '''Версия Ключ-АСТРОМ''' 1.331+ Предварительная обработка '''JSON'''-логов обнаруживает escape-символы в строках '''JSON''' и преобразует их в структурированные объекты '''JSON''' для дальнейшей обработки и...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Обработка JSON-логов с неэкранированными вложенными JSON-строками

Версия Ключ-АСТРОМ 1.331+

Предварительная обработка JSON-логов обнаруживает escape-символы в строках JSON и преобразует их в структурированные объекты JSON для дальнейшей обработки и более глубокого анализа. После этого неэкранированное поле JSON можно запрашивать с помощью функций DQL jsonField и jsonPath для точного извлечения и фильтрации атрибутов логов.

Преимущества

Предварительная обработка JSON-логов даёт следующие преимущества:

  • Упрощённые запросы и визуализации вложенных JSON-логов.
  • Автоматическая обработка экранированных строк JSON.
  • Отсутствие необходимости в разборе экранированных строк JSON.

Примечания по конфигурации

  • Версия Ключ-АСТРОМ 1.331+: предварительная обработка JSON-логов включена по умолчанию для сред, созданных в версии 1.331+. Отключить или настроить эту функцию невозможно.
  • Версия Ключ-АСТРОМ 1.330 и более ранние: предварительная обработка JSON-логов недоступна.

Раскрытие вложенных JSON-строк

Многие средства пересылки логов оборачивают исходное сообщение лога в строки JSON внутри поля content с escape-символами. Предварительная обработка JSON-логов выполняет следующие шаги:

  • Обнаруживает и раскрывает escape-символы в строке JSON.
  • Преобразует строки JSON в структурированные объекты JSON.

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

Пример до предварительной обработки

{
  "content": {
    "loglevel": "ERROR",
    "event": "{\"type\":\"db_error\",\"code\":\"CONN_FAIL\"}"
  },
  "source": "fluentbit",
  "host.name": "app-server-01"
}

Пример после предварительной обработки

{
  "content": {
    "loglevel": "ERROR",
    "event": {
      "type": "db_error",
      "code": "CONN_FAIL"
    }
  },
  "source": "fluentbit",
  "host.name": "app-server-01"
}

Запрос неэкранированного JSON с помощью DQL

Вы можете запрашивать неэкранированное поле JSON для точного извлечения и фильтрации атрибутов логов с помощью следующих функций DQL:

  • Функция jsonField для извлечения значения по его фактическому имени. Вот пример извлечения loglevel с помощью jsonField:
fetch logs
| fieldsAdd logLevel = jsonField(content, "loglevel")
| filter logLevel == "ERROR"
  • Функция jsonPath для извлечения значения по выражению JSONPath. Вот пример извлечения eventType с помощью jsonPath:
fetch logs
| fieldsAdd eventType = jsonPath(content, "$.event.type")
| filter eventType == "db_error"

Некорректный JSON

Раскрытие — например, удаление обратного слэша — пропускается, если JSON некорректен. Исходное содержимое сохраняется.