Google Stackdriver не отображает журнал структурной записи, как ожидалось от Google Kubernetes Engine - PullRequest
0 голосов
/ 26 октября 2018

Я использую Stackdriver Logging для Python и Python logger одновременно. Я использую функцию google.cloud.logging.logger.log_struct (https://gcloud -python.readthedocs.io / en / latest / logging / logger.html ) для записи JSON в Stackdriver.

Я могу просматривать журналы, как и ожидалось, в средстве просмотра журналов с выбранным ресурсом Global, когда я запускаю свой сценарий с использованием Google Compute Engine VM instance. Структура, которую я регистрирую, правильно записана в jsonPayload.

Однако, когда запись ведется с Google Kubernetes Engine, представление журнала не показывает пройденные мной структуры, а скорее то, что напечатано на stdout. Как мне убедиться, что я наблюдаю такое же поведение от Google Compute Engine VM instance и Google Kubernetes Engine?

Это фрагмент, показывающий, как я веду запись в журнал:

import google.cloud.logging
import logging

logging_client = google.cloud.logging.Client()
# connects the logger to the root logging handler
cloud_logger = logging_client.logger('email_adaptor')


formatter = logging.Formatter(
            '%(asctime)s - %(levelname)s - %(message)s - %(lineno)d - %(filename)s')
# get the logger a name
logger = logging.getLogger('email_adaptor')
# set a level for the logger
logger.setLevel(logging.DEBUG)

# make the logger write on stdout
stdout_alarm_log = logging.StreamHandler(sys.stdout)
stdout_alarm_log.setFormatter(formatter)
logger.addHandler(stdout_alarm_log)


struct = {'message':'Processed Alarm', 'valid': True}
cloud_logger.log_struct(struct, severity='INFO')

logger.info(str(struct))

Это пример того, что я получаю на STDOUT как на VM instance, так и на Kubernetes Engine:

2018-10-26 12:30:20,008 - INFO - Processed Alarm {'valid': True} - 79 - log.py
INFO:email_adaptor:Processed Alarm {'valid': True}

Это то, что я вижу под ресурсом Global в Google Log Viewer (журналы взяты из моего экземпляра виртуальной машины и не соответствуют примеру, который я привел в коде фрагмента): enter image description here

Это то, что я вижу под ресурсом Google Kubernetes Engine: Структура не отображается, вместо этого я вижу то, что напечатано на STDOUT: enter image description here

1 Ответ

0 голосов
/ 29 октября 2018

Библиотека Stackdriver вызывает в коде запись для «global», а записи структурированного журнала из ваших контейнеров GKE будут отображаться в разделе «Global».

Ресурс «GKE Container» покажет запись в журнал, записанную в stdout и stderr, которые принимаются по умолчанию.

Для записи структурированных журналов в stdout / stderr и доступа к ним в Stackdriver единственным структурированным форматом, который примет агент ведения журналов, является JSON. Вы должны сконфигурировать свой регистратор для вывода JSON, чтобы он был выбран в качестве структурированной записи журнала. Больше информации на https://cloud.google.com/logging/docs/agent/configuration#process-payload.

...