Интеграция с существующими функциями AWS Lambda
В этом разделе описано, как настроить существующие функции AWS Lambda для отправки журналов и трейсов в ClickStack с помощью расширения Rotel Lambda Extension.
Требования
- Запущенный экземпляр 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-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
- Откройте консоль AWS Lambda
- Перейдите к нужной функции Lambda
- Прокрутите страницу до раздела Layers и нажмите Add a layer
- Выберите Specify an ARN
- Введите ARN слоя Rotel:
arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version} - Нажмите Add
Вариант 2: AWS CLI
aws lambda update-function-configuration \
--function-name my-function \
--layers arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}Вариант 3: AWS SAM
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
# ... other configuration ...
Layers:
- arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}Настройте расширение для экспорта в ClickStack
Rotel Lambda Extension настраивается с помощью переменных окружения. Вам нужно настроить конечную точку экспортера OTLP так, чтобы она указывала на ваш экземпляр ClickStack. В примерах предполагается, что ваша функция AWS Lambda может обращаться к экземпляру ClickStack.
Базовая конфигурация (переменные окружения)
Добавьте эти переменные окружения в функцию Lambda:
# Required: ClickStack OTLP endpoint
ROTEL_OTLP_EXPORTER_ENDPOINT=https://clickstack.example.com:4317
# Optional: Authentication headers
ROTEL_OTLP_EXPORTER_CUSTOM_HEADERS="Authorization=<YOUR_INGESTION_API_KEY>"
# Optional: Service name (defaults to Lambda function name)
ROTEL_OTEL_RESOURCE_ATTRIBUTES="service.name=my-lambda-api,service.version=1.0.0"Расширенная конфигурация (с использованием файла .env)
Для более сложных конфигураций создайте файл rotel.env в пакете вашей функции Lambda:
rotel.env:
ROTEL_OTLP_EXPORTER_ENDPOINT=https://clickstack.example.com:4317
ROTEL_OTLP_EXPORTER_CUSTOM_HEADERS="Authorization=<YOUR_INGESTION_API_KEY>"
ROTEL_OTEL_RESOURCE_ATTRIBUTES="service.name=my-lambda-api,deployment.environment=production"Затем задайте переменную окружения, указав этот файл:
ROTEL_ENV_FILE=/var/task/rotel.envИспользование AWS Secrets Manager или Parameter Store
Для рабочих развертываний храните конфиденциальные значения, такие как ключи API, в AWS Secrets Manager или Parameter Store:
Пример для AWS Secrets Manager:
ROTEL_OTLP_EXPORTER_ENDPOINT=https://clickstack.example.com:4317
ROTEL_OTLP_EXPORTER_CUSTOM_HEADERS="Authorization=${arn:aws:secretsmanager:us-east-1:123456789012:secret:clickstack-api-key-abc123}"Пример для AWS Parameter Store:
ROTEL_OTLP_EXPORTER_ENDPOINT=https://clickstack.example.com:4317
ROTEL_OTLP_EXPORTER_CUSTOM_HEADERS="Authorization=${arn:aws:ssm:us-east-1:123456789012:parameter/clickstack-api-key}"Необходимые разрешения IAM:
Добавьте эти разрешения в роль Lambda:
Для Secrets Manager:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:BatchGetSecretValue"
],
"Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:clickstack-api-key-*"
}
]
}Для Parameter Store:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters"
],
"Resource": "arn:aws:ssm:us-east-1:123456789012:parameter/clickstack-api-key"
}
]
}Проверьте интеграцию
Вызовите свою Lambda-функцию, чтобы убедиться, что журналы отправляются в ClickStack:
aws lambda invoke \
--function-name my-function \
--payload '{"test": "data"}' \
response.jsonПроверьте журналы Lambda на наличие ошибок:
aws logs tail /aws/lambda/my-function --followПроверьте логи в HyperDX
После настройки войдите в HyperDX (интерфейс ClickStack) и убедитесь, что логи поступают:


Проверьте наличие следующих ключевых атрибутов в логах:
service.name: имя вашей лямбда-функцииfaas.name: имя функции AWS Lambdafaas.invocation_id: уникальный идентификатор вызоваcloud.provider: "aws"cloud.platform: "aws_lambda"
Отключение CloudWatch Logs (оптимизация затрат)
По умолчанию AWS Lambda отправляет все журналы в CloudWatch Logs, и при большом масштабе это может быть дорого. После того как вы убедитесь, что журналы поступают в ClickStack, можно отключить логирование в CloudWatch, чтобы сократить затраты.
Удалите разрешения CloudWatch из роли выполнения
- Откройте консоль AWS и перейдите в AWS Lambda
- Перейдите к нужной функции Lambda
- Выберите Configuration → Permissions
- Нажмите на имя роли выполнения, чтобы открыть консоль IAM
- Измените роль и удалите все действия
logs:*:- Если используется пользовательская политика, отредактируйте её и удалите
logs:CreateLogGroup,logs:CreateLogStreamиlogs:PutLogEvents - Если используется управляемая политика AWS
AWSLambdaBasicExecutionRole, удалите её из роли
- Если используется пользовательская политика, отредактируйте её и удалите
- Сохраните роль
Убедитесь, что логирование в CloudWatch отключено
Снова вызовите функцию и убедитесь, что:
- Новые потоки журналов в CloudWatch не создаются
- Журналы по-прежнему появляются в ClickStack/HyperDX
# После изменения политики здесь не должно быть новых потоков журналов
aws logs describe-log-streams \
--log-group-name /aws/lambda/my-function \
--order-by LastEventTime \
--descending \
--max-items 5Добавление автоинструментирования 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 update-function-configuration \
--function-name my-function \
--layers \
arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version} \
arn:aws:lambda:{region}:901920570463:layer:aws-otel-nodejs-{arch}-ver-1-30-2:1Настройте автоинструментирование
Установите переменную окружения AWS_LAMBDA_EXEC_WRAPPER, чтобы включить автоинструментирование:
Для Node.js:
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handlerДля Python:
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrumentДля Java:
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handlerПроверьте трейсы в 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, на котором построено расширение