Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Cloud Functions
  • Сопоставление с другими сервисами Yandex Cloud
    • Все инструкции
    • Получение IAM-токена сервисного аккаунта с помощью функции
    • Подключение к управляемым БД из функции
      • Добавить переменные окружения
      • Указать облачную сеть
      • Передать секреты Yandex Lockbox
      • Выделить память для директории /tmp
      • Посмотреть графики мониторинга
        • Посмотреть логи
        • Записать логи
      • Миграция в зону ru-central1-d
      • Удалить версию функции
      • Удалить функцию
    • Просмотр операций с ресурсами сервиса
  • Инструменты
  • Правила тарификации
  • Управление доступом
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Структурированные логи
  • Примеры функций
  1. Пошаговые инструкции
  2. Управление функцией
  3. Управлять логами
  4. Записать логи

Записать логи в журнал выполнения функции

Статья создана
Yandex Cloud
Улучшена
Обновлена 11 июля 2025 г.
  • Структурированные логи
    • Примеры функций

Примечание

Логирование тарифицируется. Подробнее см. в документации Yandex Cloud Logging.

Консоль управления
CLI
Terraform
API
  1. В консоли управления перейдите в каталог, в котором находится функция.

  2. Выберите сервис Cloud Functions.

  3. Выберите функцию, для которой хотите настроить логирование.

  4. Перейдите на вкладку Редактор.

  5. В блоке Логирование:

    1. Включите опцию Запись логов.

    2. В поле Назначение выберите:

      • Каталог — чтобы записывать логи в лог-группу по умолчанию для каталога, в котором находится функция.
      • Лог-группа — чтобы записывать логи в пользовательскую лог-группу.

        Выберите лог-группу, в которую будут записываться логи, или создайте новую.

    3. (Опционально) Выберите минимальный уровень логирования.

  6. Нажмите кнопку Сохранить изменения.

Если минимальный уровень логирования задан, в журнал выполнения записываются логи указанного уровня и выше. Если минимальный уровень логирования не задан, в журнал выполнения записываются все логи функции.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

Назначение логированияНазначение логирования

Если в параметрах версии функции не указана пользовательская лог-группа или логирование не отключено, функция автоматически пишет все логи в лог-группу по умолчанию для каталога, в котором она находится.

Чтобы записывать логи в лог-группу по умолчанию для другого каталога, укажите идентификатор этого каталога в параметре --log-folder-id при создании версии функции. Аккаунту, от имени которого выполняется команда, на этот каталог должна быть назначена роль logging.editor или выше.

Чтобы записывать логи в пользовательскую лог-группу, укажите идентификатор этой лог-группы в параметре --log-group-id при создании версии функции. Лог-группа может находиться в другом каталоге. Аккаунту, от имени которого выполняется команда, на этот каталог должна быть назначена роль logging.editor или выше.

Минимальный уровень логированияМинимальный уровень логирования

Чтобы задать минимальный уровень логирования, укажите его в параметре --min-log-level при создании версии функции.

Если минимальный уровень логирования задан, в журнал выполнения записываются логи указанного уровня и выше. Если минимальный уровень логирования не задан, в журнал выполнения записываются все логи функции.

Отключение логированияОтключение логирования

Чтобы отключить логирование, при создании версии функции укажите параметр --no-logging.

Пример командыПример команды

Чтобы записывать логи в пользовательскую лог-группу, выполните команду:

yc serverless function version create \
  --function-id <идентификатор_функции> \
  --runtime <среда_выполнения> \
  --entrypoint <точка_входа> \
  --memory <объем_RAM> \
  --source-path <ZIP-архив_c_кодом_функции> \
  --log-group-id <идентификатор_лог-группы> \
  --min-log-level <минимальный_уровень_логирования>

Где:

  • --function-id — идентификатор функции.
  • --runtime — среда выполнения.
  • --entrypoint — точка входа, указывается в формате <имя_файла_без_расширения>.<имя_обработчика>.
  • --memory — объем RAM.
  • --source-path — ZIP-архив c кодом функции и необходимыми зависимостями.
  • --log-group-id — идентификатор лог-группы, в которую будут записываться логи.
  • --min-log-level — минимальный уровень логирования. Необязательный параметр.

Результат:

done (4s)
id: d4ech7qdki6r********
function_id: d4e7tbg7m4np********
created_at: "2024-04-19T10:13:00.019Z"
runtime: python37
entrypoint: index.handler
resources:
  memory: "134217728"
execution_timeout: 5s
image_size: "53248"
status: ACTIVE
tags:
  - $latest
log_options:
  log_group_id: e23u2vn449av********
  min_level: DEBUG

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

Назначение логированияНазначение логирования

Если в параметрах версии функции не указана пользовательская лог-группа или логирование не отключено, функция автоматически пишет все логи в лог-группу по умолчанию для каталога, в котором она находится.

Чтобы записывать логи в лог-группу по умолчанию для другого каталога, укажите идентификатор этого каталога в блоке log_options в параметре folder_id при создании версии функции. Аккаунту, от имени которого выполняется команда, на этот каталог должна быть назначена роль logging.editor или выше.

Чтобы записывать логи в пользовательскую лог-группу, укажите идентификатор этой лог-группы в блоке log_options в параметре log_group_id при создании версии функции. Лог-группа может находиться в другом каталоге. Аккаунту, от имени которого выполняется команда, на этот каталог должна быть назначена роль logging.editor или выше.

Минимальный уровень логированияМинимальный уровень логирования

Чтобы задать минимальный уровень логирования, укажите его в блоке log_options в параметре min_level при создании версии функции.

Если минимальный уровень логирования задан, в журнал выполнения записываются логи указанного уровня и выше. Если минимальный уровень логирования не задан, в журнал выполнения записываются все логи функции.

Отключение логированияОтключение логирования

Чтобы отключить логирование, при создании версии функции в блоке log_options укажите параметр disabled со значением true.

ПримерПример

Чтобы записывать логи в пользовательскую лог-группу:

  1. Откройте файл конфигурации Terraform и добавьте к описанию ресурса yandex_function блок log_options:

    Примеры структуры конфигурационного файла:

    resource "yandex_function" "my-function" {
      name       = "<имя_функции>"
      user_hash  = "<хeш_версии_функции>"
      runtime    = "<среда_выполнения>"
      entrypoint = "<точка_входа>"
      memory     = "<объем_RAM>"
      content {
        zip_filename = "<путь_к_ZIP-архиву>"
      }
      log_options {
        log_group_id = "<идентификатор_лог-группы>"
        min_level    = "<минимальный_уровень_логирования>"
      }
    }
    

    Где:

    • name — имя функции.
    • user_hash — произвольная строка, определяющая версию функции. При изменениях функции необходимо менять и эту строку. Функция обновится при изменении этой строки.
    • runtime — среда выполнения функции.
    • entrypoint — имя функции в исходном коде, которая будет служить точкой входа в приложения.
    • memory — объем памяти в мегабайтах, отведенный для выполнения функции.
    • content — исходный код функции:
      • zip_filename — путь к ZIP-архиву, содержащему исходный код функции и необходимые зависимости.
    • log_options — настройки логирования:
      • log_group_id — идентификатор лог-группы, в которую будут записываться логи.
      • min_level — минимальный уровень логирования. Необязательный параметр.

    Более подробную информацию о параметрах ресурса yandex_function см. в документации провайдера.

  2. Примените изменения:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

Чтобы записывать логи в журнал выполнения функции, воспользуйтесь методом REST API createVersion для ресурса Function или вызовом gRPC API FunctionService/LogOptions.

Структурированные логиСтруктурированные логи

Кроме текстовых записей, в стандартный поток вывода (stdout) и стандартный поток вывода ошибок (stderr) можно писать структурированные логи.

Примеры функцийПримеры функций

Node.js
Python
Go
Java

package.json

{
  "name": "server-app",
  "version": "1.0.0",
  "dependencies": {
    "winston": "^3.8.2"
  }
}

index.js

const winston = require('winston');

const logger = winston.createLogger({
    level: 'debug',
    format: winston.format.json(),
    transports: [new winston.transports.Console()],
});

module.exports.handler = async function (event, context) {
    logger.info({"message": "My log message", "my-key": "my-value"})
    return {
        statusCode: 200,
        body: 'Hello World!',
    };
};

requirements.txt

python-json-logger==2.0.4

index.py

import logging
from pythonjsonlogger import jsonlogger


class YcLoggingFormatter(jsonlogger.JsonFormatter):
    def add_fields(self, log_record, record, message_dict):
        super(YcLoggingFormatter, self).add_fields(log_record, record, message_dict)
        log_record['logger'] = record.name
        log_record['level'] = str.replace(str.replace(record.levelname, "WARNING", "WARN"), "CRITICAL", "FATAL")

logHandler = logging.StreamHandler()
logHandler.setFormatter(YcLoggingFormatter('%(message)s %(level)s %(logger)s'))

logger = logging.getLogger('MyLogger')
logger.propagate = False
logger.addHandler(logHandler)
logger.setLevel(logging.DEBUG)

def handler(event, context):
    logger.info("My log message", extra={"my-key": "my-value"})
    
    return "Hello, world!"

index.go

package main

import (
    "context"
    "go.uber.org/zap"
)

type Response struct {
    StatusCode int         `json:"statusCode"`
    Body       interface{} `json:"body"`
}

func Handler(ctx context.Context) (*Response, error) {
    config := zap.NewProductionConfig()
    config.DisableCaller = true
    config.Level.SetLevel(zap.DebugLevel)
    logger, _ := config.Build()
    defer logger.Sync()

    logger.Info(
        "My log message",
        zap.String("my-key", "my-value"),
    )

    return &Response{
        StatusCode: 200,
        Body:       "Hello, world!",
    }, nil
}

pom.xml

...
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.19.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.19.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-layout-template-json</artifactId>
    <version>2.19.0</version>
</dependency>
...

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <JsonTemplateLayout eventTemplateUri="classpath:YcLoggingLayout.json"/>
            </Console>
        </Appenders>
        <Loggers>
            <Root level="TRACE">
                <AppenderRef ref="Console"/>
            </Root>
        </Loggers>
    </Configuration>

YcLoggingLayout.json

{
  "message": {
    "$resolver": "message",
    "stringified": true
  },
  "level": {
    "$resolver": "level",
    "field": "name"
  },
  "logger": {
    "$resolver": "logger",
    "field": "name"
  },
  "labels": {
    "$resolver": "mdc",
    "flatten": true,
    "stringified": true
  },
  "tags": {
    "$resolver": "ndc"
  }
}

Handler.java

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

import java.util.function.Function;

public class Handler implements Function<String, String> {

    private static final Logger logger = LogManager.getLogger();

    @Override
    public String apply(String s) {
        ThreadContext.put("my-key", "my-value");
        logger.info("My log message");
        ThreadContext.clearAll();
        return "Hello, world!";
    }
}

Была ли статья полезна?

Предыдущая
Посмотреть логи
Следующая
Миграция в зону ru-central1-d
Проект Яндекса
© 2025 ООО «Яндекс.Облако»