Журналирование выполнения функции на Python
Сервис Cloud Functions автоматически захватывает потоки стандартного вывода приложения на Python и отправляет их в централизованную систему журналирования, доступную в Yandex Cloud. Помимо журналов выполнения приложения записываются системные записи о событиях выполнения запроса.
Для записи дополнительных сообщений используются стандартные языковые конструкции:
print
— выводит сообщение в стандартный поток выводаstdout
.logging
— выводит сообщение в установленном формате в выбранный поток вывода.
Примечание
Многострочные сообщения должны быть разделены символом \r
(carriage return), но не \n
(line feed). При использовании последнего каждая строка отправляется отдельным сообщением и отображается в журнале отдельно.
Системные сообщения
В рамках обработки каждого вызова в журнал также записываются системные сообщения START
, END
и REPORT
:
START RequestID: <идентификатор_запроса> Version: <идентификатор_версии_функции>
END RequestID: <идентификатор_запроса>
REPORT RequestID: <идентификатор_запроса>
Duration: 236.606 ms
Billed Duration: 300 ms
Memory Size: 128 MB
Max Memory Used: 22 MB
Queuing Duration: 0.027 ms
Function Init Duration: 225.298 ms
Все строки содержат идентификатор запроса (RequestID
), который генерируется автоматически в момент вызова функции.
Строка REPORT
— это отчет о выполнении функции. Она содержит дополнительную информацию о потребленных ресурсах:
Duration
– время, затраченное на вызов функции. Включает в себя параметрыQueuing Duration
иFunction Init Duration
.Billed Duration
– время, за которое взимается плата в соответствии с правилами тарификации.Memory Size
– объем памяти, указанный при создании версии, МБ.Max Memory Used
– объем использованной памяти на момент начала выполнения запроса.Queuing Duration
– время, которое запрос на выполнение провел во внутренней очереди. Если время растет, это может значить, что не хватает экземпляров функции. Максимальное количество экземпляров определяется квотами.Function Init Duration
– время, потраченное на инициализацию среды выполнения и загрузку кода функции.
Пользовательские сообщения
Перед запуском функции Cloud Functions настраивает для корневого логгера
- обработчик для записи логов в
stdout
; - форматтер, который добавляет к сообщению время его создания, идентификатор запроса и уровень логирования.
Важно
Изменить настройки корневого логгера с помощью функции logging.basicConfig()
нельзя.
По умолчанию уровень корневого логгера — Warning
, все логи с уровнем ниже игнорируются. Изменить уровень логирования можно с помощью метода setLevel
для:
- всего приложения.
logging.getLogger().setLevel(logging.DEBUG)
- любого логгера, кроме корневого.
logging.getLogger('requests.packages.urllib3').setLevel(logging.DEBUG) logging.getLogger('myapp').setLevel(logging.DEBUG)
Изменить формат логов можно так:
root_handler = logging.getLogger().handlers[0]
root_handler.setFormatter(logging.Formatter(
'[%(levelname)s]\t%(name)s\t%(request_id)s\t%(message)s\n'
))
В примере вместо времени создания сообщения выводится имя логгера.
Подробнее о настройках логирования читайте в документации Python