Перейти к основному содержанию
КраткоЭто руководство показывает, как организовать мониторинг функций AWS Lambda с помощью ClickStack, используя Rotel Lambda Extension для сбора и прямой отправки журналов функций, журналов самого расширения и данных OpenTelemetry в ClickHouse. Вы узнаете, как:
  • Развернуть слой Rotel Lambda Extension для своих функций Lambda
  • Настроить расширение для экспорта журналов и трейсов в ClickStack
  • При необходимости отключить CloudWatch Logs, чтобы снизить расходы
Такой подход может значительно сократить ваши затраты на обсервабилити AWS Lambda, полностью обходя CloudWatch Logs.Требуемое время: 5–10 минут

Интеграция с существующими функциями AWS Lambda

В этом разделе описано, как настроить существующие функции AWS Lambda для отправки журналов и трейсов в ClickStack с помощью расширения Rotel Lambda Extension.

Требования

  • Запущенный экземпляр ClickStack
  • Функции AWS Lambda, которые нужно отслеживать
  • AWS CLI, настроенный с необходимыми разрешениями
  • Роль выполнения AWS Lambda с разрешениями на добавление слоёв
1

Выберите подходящий слой расширения Rotel Lambda

Выберите слой Lambda, соответствующий архитектуре среды выполнения вашей Lambda-функции. Поле {version} зависит от региона AWS, в который выполняется развертывание. Актуальные номера версий для вашего региона смотрите на странице релизов.
АрхитектураARN
x86-64/amd64arn:aws:lambda:{region}:418653438961:layer:rotel-extension-amd64:{version}
arm64arn: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
2

Добавьте слой Rotel в функцию Lambda

В этих примерах замените {arch}, {region} и {version} на соответствующие значения, указанные выше.
Вариант 1: консоль AWS
  1. Откройте консоль AWS Lambda
  2. Перейдите к нужной функции Lambda
  3. Прокрутите страницу до раздела Layers и нажмите Add a layer
  4. Выберите Specify an ARN
  5. Введите ARN слоя Rotel:
    arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}
    
  6. Нажмите 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:
      # ... другие настройки ...
      Layers:
        - arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}
3

Настройте расширение для экспорта в ClickStack

Rotel Lambda Extension настраивается с помощью переменных окружения. Вам нужно настроить конечную точку экспортера OTLP так, чтобы она указывала на ваш экземпляр ClickStack. В примерах предполагается, что ваша функция AWS Lambda может обращаться к экземпляру ClickStack.
Базовая конфигурация (переменные окружения)
Добавьте эти переменные окружения в функцию Lambda:
# Обязательно: конечная точка OTLP ClickStack
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,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"
    }
  ]
}
Вызовы AWS API для получения секретов увеличивают задержку холодного старта на 100–150 мс. Секреты извлекаются батчами (до 10 за раз) только при инициализации, поэтому на последующие вызовы это не влияет.
4

Проверьте интеграцию

Вызовите свою Lambda-функцию, чтобы убедиться, что журналы отправляются в ClickStack:
aws lambda invoke \
  --function-name my-function \
  --payload '{"test": "data"}' \
  response.json
Проверьте журналы Lambda на наличие ошибок:
aws logs tail /aws/lambda/my-function --follow
5

Проверьте логи в HyperDX

После настройки войдите в HyperDX (интерфейс ClickStack) и убедитесь, что логи поступают:Проверьте наличие следующих ключевых атрибутов в логах:
  • service.name: имя вашей лямбда-функции
  • faas.name: имя функции AWS Lambda
  • faas.invocation_id: уникальный идентификатор вызова
  • cloud.provider: “aws”
  • cloud.platform: “aws_lambda”

Отключение CloudWatch Logs (оптимизация затрат)

По умолчанию AWS Lambda отправляет все журналы в CloudWatch Logs, и при большом масштабе это может быть дорого. После того как вы убедитесь, что журналы поступают в ClickStack, можно отключить логирование в CloudWatch, чтобы сократить затраты.
1

Удалите разрешения CloudWatch из роли выполнения

  1. Откройте консоль AWS и перейдите в AWS Lambda
  2. Перейдите к нужной функции Lambda
  3. Выберите ConfigurationPermissions
  4. Нажмите на имя роли выполнения, чтобы открыть консоль IAM
  5. Измените роль и удалите все действия logs:*:
    • Если используется пользовательская политика, отредактируйте её и удалите logs:CreateLogGroup, logs:CreateLogStream и logs:PutLogEvents
    • Если используется управляемая политика AWS AWSLambdaBasicExecutionRole, удалите её из роли
  6. Сохраните роль
2

Убедитесь, что логирование в CloudWatch отключено

Снова вызовите функцию и убедитесь, что:
  1. Новые потоки журналов в CloudWatch не создаются
  2. Журналы по-прежнему появляются в 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, собирая распределённые трейсы и метрики в дополнение к журналам.
1

Выберите слой инструментирования для вашего языка

AWS предоставляет слои автоинструментирования OpenTelemetry для нескольких языков:
ЯзыкШаблон ARN слоя
Node.jsarn:aws:lambda:{region}:901920570463:layer:aws-otel-nodejs-{arch}-ver-{version}
Pythonarn:aws:lambda:{region}:901920570463:layer:aws-otel-python-{arch}-ver-{version}
Javaarn:aws:lambda:{region}:901920570463:layer:aws-otel-java-agent-{arch}-ver-{version}
Последние версии доступны в репозитории AWS OpenTelemetry Lambda.
2

Добавьте оба слоя в функцию

Добавьте оба слоя: слой расширения 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
3

Настройте автоинструментирование

Установите переменную окружения 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
4

Проверьте трейсы в HyperDX

После вызова функции:
  1. Перейдите в представление Traces в HyperDX
  2. Вы должны увидеть трейсы со спанами вашей Lambda-функции
  3. Трейсы будут коррелироваться с журналами по атрибутам 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, на котором построено расширение
Последнее изменение 10 июня 2026 г.