Как войти с различными уровнями серьезности в 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 все еще находится в бета-версии и может быть подвержена будущим изменениям.