В Google App Engine первого поколения журналы автоматически группируются по запросу в средстве просмотра журналов, а во втором поколении достаточно просто настроить .
В фон Облачные функции Я не могу найти какой-либо способ сделать это (сохранить фильтрацию вручную с помощью executionId
в Logs Viewer). Из различных статей в Интернете я читал, что ключом является установка аргумента trace
для идентификатора трассировки при вызове API ведения журнала Stackdriver, и что в контекстах HTTP этот идентификатор можно найти в X-Cloud-Trace-Context
header.
В фоновом контексте нет заголовков (например, вызываемых из триггеров Pub / Sub или Storage). Я попытался установить это произвольное значение, такое как event_id
из контекста функции, но группировка не происходит.
Вот сокращенное представление о том, как я это пробовал:
from google.cloud.logging.resource import Resource
import google.cloud.logging
log_name = 'cloudfunctions.googleapis.com%2Fcloud-functions'
cloud_client = google.cloud.logging.Client()
cloud_logger = cloud_client.logger(log_name)
request_id = None
def log(message):
labels = {
'project_id': 'settle-leif',
'function_name': 'group-logs',
'region': 'europe-west1',
}
resource = Resource(type='cloud_function', labels=labels)
trace_id = f'projects/settle-leif/traces/{request_id}'
cloud_logger.log_text(message, trace=trace_id, resource=resource)
def main(_data, context):
global request_id
request_id = context.event_id
log('First message')
log('Second message')