Обработка 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 некорректен. Исходное содержимое сохраняется.