Журналирование выполнения функции на 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