
У нас есть внутреннее приложение 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 не даст мне желаемого контроля.
решение1
Быстрый ответ — нет, вам нужно будет изменить свой код и реализовать правильное ведение журнала с правильной степенью серьезности для каждого сообщения. Вы можете экспортировать журналы Stackdriver в BigQuery, что является обычной практикой, а затем запускать более сложные запросы.
Здесь вы найдете несколько полезных ссылок:
https://cloud.google.com/logging/docs/export/bigquery
https://cloud.google.com/logging/docs/структурированное-ведение журналов