Как вести журнал с разным уровнем важности в Google Cloud Functions

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

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

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


person northtree    schedule 13.02.2019    source источник


Ответы (2)


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

person Raghava Dhanya    schedule 13.02.2019

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

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

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 Logging. Отобразите jsonPayload и щелкнув элемент id, отобразится Show matching entries. Это добавит фильтр:

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

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

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

person llompalles    schedule 13.02.2019
comment
Следует ли инициализировать глобальный identifier один или несколько раз для каждого вызова? - person northtree; 14.02.2019
comment
Идентификатор будет инициализирован один раз при каждом вызове облачной функции. Так что он будет действовать как своего рода execution_id. - person llompalles; 14.02.2019
comment
execution_id должен меняться при каждом вызове, но ваш identifier изменится только при перезапуске среды функции - person John Carter; 30.07.2019