Как войти с различными уровнями серьезности в Google Cloud Functions

Я развернул Облачные Функции с Python37 времени выполнения. У меня вопрос как распечатать или войти с разными severity и то же самое execution_id, который может быть легко отфильтровать по уровню журнала через интерфейс регистрации Stackdriver.

По умолчанию, print будет использовать то же самое execution_id, но я не мог указать severity,

Я пробовал оба logging а также google-cloud-logging, но они не могли записать execution_id что полезно для отладки GCF.

2 ответа

Если вы действительно хотите, чтобы идентификатор выполнения, print будет по умолчанию, это доступно в request.headers.get("Function-Execution-Id") для функции, запускаемой по протоколу https, и для фоновой функции context.event_id, Таким образом, вы можете изменить ответ llompalles и создать ресурс внутри функции и добавить идентификатор выполнения к ресурсу

В настоящее время нет возможности добавить execution_id в журналы записей. Но, следуя подходу, описанному в этом ответе, вы можете легко отфильтровать записи журналов, относящиеся к одному и тому же выполнению функции, в интерфейсе ведения журнала Stackdriver.

С помощью этого кода функции облака:

import time
from google.cloud import logging
from google.cloud.logging.resource import Resource

identifier = str(time.time())

log_client = logging.Client()

log_name = 'cloudfunctions.googleapis.com%2Fcloud-functions' 
resource = Resource(type="cloud_function", labels={"function_name": "yourCloudFunctionName", "region": "yourFunctionLocation"})
logger   = log_client.logger(log_name.format("yourProjectId"))

def hello_world(request):

    logger.log_struct({"message": "message string to log", "id": identifier}, resource=resource, severity='ERROR')

    return 'Wrote logs to {}.'.format(logger.name) 

После выполнения откройте запись журнала в интерфейсе ведения журнала Strackdriver. Показать jsonPayload и нажав в id элемент будет отображать Show matching entries, Это добавит фильтр:

resource.type="cloud_function"
resource.labels.function_name="yourFunctionName"
jsonPayload.id="theID"

И все записи логов, относящиеся к этому выполнению, будут показаны.

Наконец, просто имейте в виду, что среда исполнения Cloud Function Python 3.7 все еще находится в бета-версии и может быть подвержена будущим изменениям.

Другие вопросы по тегам