КраткоЭто руководство показывает, как организовать мониторинг функций AWS Lambda с помощью ClickStack, используя Rotel Lambda Extension для сбора и прямой отправки журналов функций, журналов самого расширения и данных OpenTelemetry в ClickHouse. Вы узнаете, как:
- Развернуть слой Rotel Lambda Extension для своих функций Lambda
- Настроить расширение для экспорта журналов и трейсов в ClickStack
- При необходимости отключить CloudWatch Logs, чтобы снизить расходы
Интеграция с существующими функциями AWS Lambda
Требования
- Запущенный экземпляр ClickStack
- Функции AWS Lambda, которые нужно отслеживать
- AWS CLI, настроенный с необходимыми разрешениями
- Роль выполнения AWS Lambda с разрешениями на добавление слоёв
Выберите подходящий слой расширения Rotel Lambda
Выберите слой Lambda, соответствующий архитектуре среды выполнения вашей Lambda-функции. Поле{version}
зависит от региона AWS, в который выполняется развертывание. Актуальные номера версий для вашего региона
смотрите на странице релизов.| Архитектура | ARN |
|---|---|
| x86-64/amd64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-amd64:{version} |
| arm64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-arm64:{version} |
- us-east-, us-west-
- eu-central-1, eu-north-1, eu-west-
- ca-central-1
- ap-southeast-, ap-northeast-
- ap-south-1
- sa-east-1
Добавьте слой Rotel в функцию Lambda
В этих примерах замените{arch}, {region} и {version} на соответствующие значения, указанные выше.Вариант 1: консоль AWS
- Откройте консоль AWS Lambda
- Перейдите к нужной функции Lambda
- Прокрутите страницу до раздела Layers и нажмите Add a layer
- Выберите Specify an ARN
- Введите ARN слоя Rotel:
- Нажмите Add
Вариант 2: AWS CLI
Вариант 3: AWS SAM
Настройте расширение для экспорта в ClickStack
Rotel Lambda Extension настраивается с помощью переменных окружения. Вам нужно настроить конечную точку экспортера OTLP так, чтобы она указывала на ваш экземпляр ClickStack. В примерах предполагается, что ваша функция AWS Lambda может обращаться к экземпляру ClickStack.Базовая конфигурация (переменные окружения)
Добавьте эти переменные окружения в функцию Lambda:Расширенная конфигурация (с использованием файла .env)
Для более сложных конфигураций создайте файлrotel.env в пакете вашей функции Lambda:rotel.env:Использование AWS Secrets Manager или Parameter Store
Для рабочих развертываний храните конфиденциальные значения, такие как ключи API, в AWS Secrets Manager или Parameter Store:Пример для AWS Secrets Manager:Вызовы AWS API для получения секретов увеличивают задержку холодного старта на 100–150 мс. Секреты извлекаются батчами (до 10 за раз) только при инициализации, поэтому на последующие вызовы это не влияет.
Проверьте интеграцию
Вызовите свою Lambda-функцию, чтобы убедиться, что журналы отправляются в ClickStack:Проверьте логи в HyperDX
После настройки войдите в HyperDX (интерфейс ClickStack) и убедитесь, что логи поступают:Проверьте наличие следующих ключевых атрибутов в логах:service.name: имя вашей лямбда-функцииfaas.name: имя функции AWS Lambdafaas.invocation_id: уникальный идентификатор вызоваcloud.provider: “aws”cloud.platform: “aws_lambda”
Отключение CloudWatch Logs (оптимизация затрат)
Удалите разрешения CloudWatch из роли выполнения
- Откройте консоль AWS и перейдите в AWS Lambda
- Перейдите к нужной функции Lambda
- Выберите Configuration → Permissions
- Нажмите на имя роли выполнения, чтобы открыть консоль IAM
- Измените роль и удалите все действия
logs:*:- Если используется пользовательская политика, отредактируйте её и удалите
logs:CreateLogGroup,logs:CreateLogStreamиlogs:PutLogEvents - Если используется управляемая политика AWS
AWSLambdaBasicExecutionRole, удалите её из роли
- Если используется пользовательская политика, отредактируйте её и удалите
- Сохраните роль
Убедитесь, что логирование в CloudWatch отключено
Снова вызовите функцию и убедитесь, что:- Новые потоки журналов в CloudWatch не создаются
- Журналы по-прежнему появляются в ClickStack/HyperDX
Добавление автоинструментирования 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_LAMBDA_EXEC_WRAPPER, чтобы включить автоинструментирование:Для Node.js:Проверьте трейсы в HyperDX
После вызова функции:- Перейдите в представление Traces в HyperDX
- Вы должны увидеть трейсы со спанами вашей Lambda-функции
- Трейсы будут коррелироваться с журналами по атрибутам
trace_idиspan_id
Примеры приложений
- Python + ClickHouse: Приложение на Python с ручной инструментацией OpenTelemetry, отправляющее трейсы и журналы напрямую в ClickHouse
Присоединяйтесь к сообществу Rotel
Дополнительные ресурсы
- Rotel Lambda Extension: Исходный код и подробная документация
- Rotel Core: Лёгкий компонент плоскости данных OTEL, на котором построено расширение