Google StackDriver коррелирует журналы с родительским запросом python 3

В python 2.7 sdk движка приложения выполнял работу в фоновом режиме, чтобы вложить все журналы с родительским запросом для корреляции в Google StackDriver.

Что касается перехода на Python 3, это происходит за счет использования облачного журнала Google или структурированного ведения журнала, и из всех различных ссылок, которые я смог найти, важно иметь один и тот же идентификатор трассировки в `` дополнительных '' журналах для драйвера стека, чтобы сделать совпадение с журналом запросов.

И все же, как вы можете видеть ниже, они по-прежнему отображаются в разных журналах.

Для контекста я даже пробовал это на пустом проекте django, развернутом на движке приложения.

Получил тот же результат, даже следуя примеру в документации: https://cloud.google.com/run/docs/logging

Попытка войти в стандартный вывод дает тот же результат.

Редактировать:

После начального запроса все остальные запросы будут вложены в начальный запрос при использовании stdout.

Но самый высокий уровень серьезности "дочерних" журналов не принимается "родительским" журналом, поэтому фильтры не выбирают фактический журнал. Смотри ниже:

2 ответа

Спасибо за вопрос!

Похоже, вы правильно регистрируете трассировку, но ваше logName указывает, что вы не используете stdout или stderr. Если вы используете один из них для своих журналов, они будут правильно коррелировать, например:

Снимок экрана журналов StackDriver

Вы можете видеть, что logName заканчивается на stdout. Будет коррелировать стандартный вывод или стандартный поток. Вы можете создать это, как показано здесь в руководстве:

# Build structured log messages as an object.
global_log_fields = {}

# Add log correlation to nest all log messages
# beneath request log in Log Viewer.
trace_header = request.headers.get('X-Cloud-Trace-Context')

if trace_header and PROJECT:
    trace = trace_header.split('/')
    global_log_fields['logging.googleapis.com/trace'] = (
        f"projects/{PROJECT}/traces/{trace[0]}")

# Complete a structured log entry.
entry = dict(severity='NOTICE',
             message='This is the default display field.',
             # Log viewer accesses 'component' as jsonPayload.component'.
             component='arbitrary-property',
             **global_log_fields)

print(json.dumps(entry))

РЕДАКТИРОВАТЬ:

Чтобы отфильтровать стандартный вывод и видеть только журналы запросов в пользовательском интерфейсе stackdriver, вы можете отменить выбор стандартного вывода в фильтре. Фильтр журналов

Пример использования клиентского API Python можно найти в этой статье и в прикрепленном примере приложения Flask. Объединение коррелированных строк журнала в Google Stackdriver

Мне удалось добиться такой структуры ведения журнала в консоли Google Cloud Logging Console:

Я использовал Django Framework. Я написал промежуточное ПО Django, которое интегрирует Google Cloud Logging API.

"След" необходимо добавить к каждому объекту журнала, который указывает на его родительский объект журнала.

проверьте управление вложенностью журналов в Google Stackdriver с помощью Django

Пожалуйста, проверьте источник https://github.com/djangocircle/django-google-stackdriver-nested-logging log_middleware.py на Github.