Написание структурированных сообщений журнала json из облачной функции Python Google

#python #google-cloud-functions #google-cloud-logging

# #python #google-cloud-функции #google-cloud-ведение журнала

Вопрос:

Я попытался использовать этот пример кода из документов Cloud Functions:

 # PROJECT = 'The project ID of your Cloud Run service';
global_log_fields = {}
trace_header = request.headers.get('X-Cloud-Trace-Context')
trace = trace_header.split('/')
global_log_fields['logging.googleapis.com/trace'] = (
    f"projects/{PROJECT}/traces/{trace[0]}")
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))
 

В обозревателе журналов соответствующие зарегистрированные элементы выглядят примерно так:

 {
textPayload: "{"severity": "NOTICE", "message": "This is the default display field.", "component": "arbitrary-property", "logging.googleapis.com/trace": "projects/[...]/traces/abaa6a6d18e3dd498347c43ad9137d0b"}"
insertId: "[...]"
resource: {[...]}
timestamp: "2020-11-20T17:39:45.613Z"
severity: "INFO"
labels: {[...]}
logName: "projects/[...]/logs/cloudfunctions.googleapis.com/cloud-functions"
trace: "projects/[...]/traces/abaa6a6d18e3dd498347c43ad9137d0b"
receiveTimestamp: "2020-11-20T17:39:55.906103427Z"
}
 

Основная проблема заключается в том, что представление json заполняется в textPayload поле, а не отображается jsonPayload в структурированной форме.

Также интересно, что trace значение в элементе журнала, похоже, уже задано автоматически, предполагая, что мне не нужно читать 'X-Cloud-Trace-Context' заголовок запроса. (Я подтвердил, что значение трассировки определенно не считывается из моей полезной нагрузки json. Он по-прежнему появляется, если я удаляю logging.googleapis.com/trace поле из зарегистрированного словаря.)

Комментарии:

1. Вы пытались добавить временную метку внутри JSON? Я думаю, что это недостающая часть формата FluentD.

2. Привет 🙂 отличный вопрос, кстати, вы нашли какое-либо решение? я сталкиваюсь с той же проблемой, что и вы.

3. Я открыл здесь проблему, чтобы узнать, есть ли продолжение github.com/GoogleCloudPlatform/python-docs-samples/issues/5036