У нас есть собственное Java-приложение, созданное нашими разработчиками, которое использует log4j
для форматирования сообщений журнала. Недавно мы начали запускать его на Google Kubernetes Engine, поэтому логи автоматически передаются в Stackdriver из stdout. Однако все журналы появляются с уровнем серьезности INFO
. Одно из таких сообщений имеет textPayload, который начинается следующим образом:
18 Jul 2019 10:11:32.334 [ERROR] [req=api-test--870259294-18071111-11 sess=cwfscqttcfqh1acsictx3toxv reqMs=4]
Очевидно, что разработчики хотели, чтобы это было сообщение с серьезностью ERROR
, но поскольку они не создали свое приложение с учетом Stackdriver, оно неструктурировано и сообщается как INFO
.
Мне кажется неправильным изменять приложение для соблюдения централизованного протоколирования, которое мы используем; наши клиенты могут использовать другие решения для протоколирования. Есть ли способ заставить Stackdriver использовать textPayload для определения серьезности? Я работаю на Google Kubernetes Engine, поэтому я не настраивал инфраструктуру протоколирования и не имею к ней доступа, кроме того, что предоставит Google.
Я заинтересован в этом изменении, потому что отчет об ошибках Google Cloud Platform является мощным инструментом для отслеживания сообщений об ошибках, но он справедливо применяется только к журналам, имеющим степень ERROR
или выше. Простое создание метрики над журналами в Stackdriver не даст мне нужного контроля.
Быстрый ответ: нет, вам нужно будет изменить свой код и реализовать правильное ведение журнала с правильной серьезностью для каждого сообщения. Вы можете экспортировать журналы Stackdriver в BigQuery, что обычно делается, а затем выполнять более сложные запросы.
Здесь вы можете найти несколько полезных ссылок: