Мониторинг логов AWS Lambda с ClickStack с использованием Rotel
В этом руководстве показано, как отслеживать функции AWS Lambda с помощью ClickStack, используя Rotel Lambda Extension для сбора и пересылки логов функций, логов расширения и данных OpenTelemetry напрямую в ClickHouse. Вы узнаете, как:
- Развернуть слой Rotel Lambda Extension для ваших функций Lambda
- Настроить расширение для экспорта логов и трейсов в ClickStack
- При необходимости отключить CloudWatch Logs для снижения затрат
Этот подход может значительно снизить ваши расходы на обсервабилити Lambda за счёт полного отказа от CloudWatch Logs.
Необходимое время: 5–10 минут
Интеграция с существующими функциями Lambda
В этом разделе описывается настройка ваших существующих функций AWS Lambda для отправки логов и трассировок в ClickStack с помощью расширения Rotel Lambda Extension.
Предварительные требования
- Запущенный экземпляр ClickStack
- Функции AWS Lambda для мониторинга
- AWS CLI, настроенный с соответствующими правами доступа
- Роль выполнения Lambda с правами на добавление слоёв
Выберите подходящий слой расширения Rotel Lambda Extension
Расширение Rotel Lambda Extension доступно в виде предварительно собранного слоя AWS Lambda. Выберите ARN слоя, который соответствует архитектуре вашей Lambda-функции:
| Архитектура | Шаблон ARN | Актуальная версия |
|---|---|---|
| x86-64/amd64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-amd64-alpha:{version} | |
| arm64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-arm64-alpha:{version} |
Доступные регионы:
- us-east-2, us-west-2
- eu-central-1, eu-north-1, eu-west-3
- ca-central-1
- ap-southeast-2, ap-northeast-2
- ap-south-1
- sa-east-1
Добавьте слой Rotel в вашу Lambda-функцию
В этих примерах замените {arch}, {region} и {version} соответствующими значениями, указанными выше.
Вариант 1: Консоль AWS
- Откройте консоль Lambda в AWS
- Откройте свою функцию Lambda
- Прокрутите страницу до раздела Layers и нажмите Add a layer
- Выберите Specify an ARN
- Введите ARN слоя Rotel:
- Нажмите Add
Вариант 2: AWS CLI
Вариант 3: AWS SAM
Настройте расширение для экспорта данных в ClickStack
Расширение Rotel Lambda настраивается с помощью переменных окружения. Необходимо настроить конечную точку экспортера OTLP так, чтобы она указывала на ваш экземпляр ClickStack. В примерах предполагается, что ваша функция AWS Lambda имеет доступ к экземпляру ClickStack.
Базовая конфигурация (переменные среды)
Добавьте следующие переменные окружения в вашу Lambda-функцию:
Расширенная конфигурация (через файл .env)
Для более сложных конфигураций создайте файл rotel.env в пакете Lambda-функции:
rotel.env:
Затем задайте переменную окружения, указывающую на этот файл:
Использование AWS Secrets Manager или AWS Systems Manager Parameter Store
Для производственных развертываний храните конфиденциальные данные, такие как API-ключи, в AWS Secrets Manager или Parameter Store:
Пример использования AWS Secrets Manager:
Пример хранилища параметров AWS (AWS Parameter Store):
Требуемые разрешения IAM:
Добавьте эти разрешения в роль выполнения Lambda:
Для Secrets Manager:
Для Parameter Store:
Вызовы AWS API для получения секретов добавляют 100-150 мс к задержке холодного старта. Секреты извлекаются пакетами (до 10) и только при инициализации, поэтому последующие вызовы не подвержены влиянию.
Тестирование интеграции
Вызовите Lambda-функцию, чтобы убедиться, что логи отправляются в ClickStack:
Проверьте журналы Lambda на наличие ошибок:
Проверьте логи в HyperDX
После настройки войдите в HyperDX (UI ClickStack) и убедитесь, что логи поступают:


Найдите следующие ключевые атрибуты в логах:
service.name: имя вашей функции Lambdafaas.name: имя функции AWS Lambdafaas.invocation_id: Уникальный идентификатор вызова функцииcloud.provider: "aws"cloud.platform: "aws_lambda"
Отключение CloudWatch Logs (оптимизация затрат)
По умолчанию AWS Lambda отправляет все логи в CloudWatch Logs, что может быть дорого при масштабном использовании. После того как вы проверили, что логи поступают в ClickStack, вы можете отключить логирование в CloudWatch, чтобы снизить затраты.
Удаление прав CloudWatch из роли выполнения
- Откройте AWS Console и перейдите в AWS Lambda
- Перейдите к своей функции Lambda
- Выберите Configuration → Permissions
- Нажмите на имя роли выполнения, чтобы открыть консоль IAM
- Отредактируйте роль и удалите все действия
logs:*:- Если используется пользовательская политика, отредактируйте её, чтобы удалить
logs:CreateLogGroup,logs:CreateLogStreamиlogs:PutLogEvents - Если используется управляемая политика AWS
AWSLambdaBasicExecutionRole, удалите её из роли
- Если используется пользовательская политика, отредактируйте её, чтобы удалить
- Сохраните роль
Проверка отключения логирования в CloudWatch
Вызовите функцию ещё раз и убедитесь, что:
- Новые потоки логов CloudWatch не создаются
- Логи продолжают отображаться в ClickStack/HyperDX
Добавление автоинструментирования OpenTelemetry
Расширение Rotel Lambda Extension без дополнительной настройки работает со слоями автоинструментирования OpenTelemetry для сбора распределённых трейсов и метрик в дополнение к логам.
Выберите слой автоинструментирования для вашего языка
AWS предоставляет слои автоинструментирования OpenTelemetry для нескольких языков:
| Язык | Шаблон ARN слоя |
|---|---|
| Node.js | arn:aws:lambda:{region}:901920570463:layer:aws-otel-nodejs-{arch}-ver-{version} |
| Python | arn:aws:lambda:{region}:901920570463:layer:aws-otel-python-{arch}-ver-{version} |
| Java | arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-agent-{arch}-ver-{version} |
Найдите последние версии в репозитории AWS OpenTelemetry Lambda.
Добавьте оба слоя в вашу функцию
Добавьте оба слоя: слой расширения Rotel и слой автоинструментирования:
Настройте автоинструментирование
Установите переменную окружения AWS_LAMBDA_EXEC_WRAPPER, чтобы включить автоинструментирование:
Для Node.js:
Для Python:
Для Java:
Проверьте трейсы в HyperDX
После вызова вашей функции:
- Перейдите в раздел Traces в HyperDX
- Вы должны увидеть трейсы со спанами из вашей функции Lambda
- Трейсы будут скоррелированы с логами через атрибуты
trace_idиspan_id
Примеры приложений
Ознакомьтесь с примером приложения на Python, демонстрирующим Rotel Lambda Extension:
- Python + ClickHouse: приложение на Python с ручной инструментировкой OpenTelemetry, которое отправляет трейсы и логи напрямую в ClickHouse
Присоединяйтесь к сообществу Rotel
Если у вас есть вопросы о Rotel, присоединяйтесь к серверу Rotel в Discord и делитесь своими отзывами или вопросами. Ознакомьтесь с Rotel Lambda Extension, чтобы предложить улучшения.
Дополнительные ресурсы
- Rotel Lambda Extension: Исходный код и подробная документация
- Rotel Core: Легковесная плоскость данных OTel, лежащая в основе расширения