КраткоЭто руководство показывает, как организовать мониторинг функций AWS Lambda с помощью ClickStack, используя Rotel Lambda Extension для сбора и прямой отправки журналов функций, журналов самого расширения и данных OpenTelemetry в ClickHouse. Вы узнаете, как:
- Развернуть слой Rotel Lambda Extension для своих функций Lambda
- Настроить расширение для экспорта журналов и трейсов в ClickStack
- При необходимости отключить CloudWatch Logs, чтобы снизить расходы
Интеграция с существующими функциями AWS Lambda
Требования
- Запущенный экземпляр ClickStack
- Функции AWS Lambda, которые нужно отслеживать
- AWS CLI, настроенный с необходимыми разрешениями
- Роль выполнения AWS Lambda с разрешениями на добавление слоёв
1
Выберите подходящий слой расширения Rotel Lambda
Выберите слой Lambda, соответствующий архитектуре среды выполнения вашей Lambda-функции. Поле{version}
зависит от региона AWS, в который выполняется развертывание. Актуальные номера версий для вашего региона
смотрите на странице релизов.Доступные регионы:
- 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
2
Добавьте слой 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
3
Настройте расширение для экспорта в 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 за раз) только при инициализации, поэтому на последующие вызовы это не влияет.
4
Проверьте интеграцию
Вызовите свою Lambda-функцию, чтобы убедиться, что журналы отправляются в ClickStack:5
Проверьте логи в HyperDX
После настройки войдите в HyperDX (интерфейс ClickStack) и убедитесь, что логи поступают:Проверьте наличие следующих ключевых атрибутов в логах:service.name: имя вашей лямбда-функцииfaas.name: имя функции AWS Lambdafaas.invocation_id: уникальный идентификатор вызоваcloud.provider: “aws”cloud.platform: “aws_lambda”
Отключение CloudWatch Logs (оптимизация затрат)
1
Удалите разрешения CloudWatch из роли выполнения
- Откройте консоль AWS и перейдите в AWS Lambda
- Перейдите к нужной функции Lambda
- Выберите Configuration → Permissions
- Нажмите на имя роли выполнения, чтобы открыть консоль IAM
- Измените роль и удалите все действия
logs:*:- Если используется пользовательская политика, отредактируйте её и удалите
logs:CreateLogGroup,logs:CreateLogStreamиlogs:PutLogEvents - Если используется управляемая политика AWS
AWSLambdaBasicExecutionRole, удалите её из роли
- Если используется пользовательская политика, отредактируйте её и удалите
- Сохраните роль
2
Убедитесь, что логирование в CloudWatch отключено
Снова вызовите функцию и убедитесь, что:- Новые потоки журналов в CloudWatch не создаются
- Журналы по-прежнему появляются в ClickStack/HyperDX
Добавление автоинструментирования OpenTelemetry
1
Выберите слой инструментирования для вашего языка
AWS предоставляет слои автоинструментирования OpenTelemetry для нескольких языков:Последние версии доступны в репозитории AWS OpenTelemetry Lambda.
2
3
Настройте автоинструментирование
Установите переменную окруженияAWS_LAMBDA_EXEC_WRAPPER, чтобы включить автоинструментирование:Для Node.js:4
Проверьте трейсы в HyperDX
После вызова функции:- Перейдите в представление Traces в HyperDX
- Вы должны увидеть трейсы со спанами вашей Lambda-функции
- Трейсы будут коррелироваться с журналами по атрибутам
trace_idиspan_id
Примеры приложений
- Python + ClickHouse: Приложение на Python с ручной инструментацией OpenTelemetry, отправляющее трейсы и журналы напрямую в ClickHouse
Присоединяйтесь к сообществу Rotel
Дополнительные ресурсы
- Rotel Lambda Extension: Исходный код и подробная документация
- Rotel Core: Лёгкий компонент плоскости данных OTEL, на котором построено расширение