Как войти с различными уровнями серьезности в Google Cloud Functions - PullRequest
0 голосов
/ 13 февраля 2019

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

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

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

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

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

0 голосов
/ 13 февраля 2019

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

...