Integración con funciones de Lambda existentes
En esta sección se explica cómo configurar sus funciones de AWS Lambda existentes para enviar logs y trazas a ClickStack mediante Rotel Lambda Extension.
Requisitos previos
- Instancia de ClickStack en ejecución
- Funciones de AWS Lambda que se van a supervisar
- AWS CLI configurado con los permisos adecuados
- Rol de ejecución de Lambda con permisos para añadir capas
Elige la capa adecuada de Rotel Lambda Extension
Elige la capa de Lambda que coincida con la arquitectura del entorno de ejecución de tu función Lambda. El campo {version}
depende de la región de AWS en la que la estés desplegando. Consulta la página de releases
para ver los números de versión más recientes correspondientes a tu región.
| Arquitectura | 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} |
Regiones disponibles:
- 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
Añade la capa Rotel a tu función Lambda
En estos ejemplos, sustituye {arch}, {region} y {version} por los valores adecuados indicados arriba.
Opción 1: Consola de AWS
- Abre la consola de AWS Lambda
- Ve a tu función Lambda
- Desplázate hasta la sección Layers y haz clic en Add a layer
- Selecciona Specify an ARN
- Introduce el ARN de la capa Rotel:
arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version} - Haz clic en Add
Opción 2: AWS CLI
aws lambda update-function-configuration \
--function-name my-function \
--layers arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}Opción 3: AWS SAM
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
# ... other configuration ...
Layers:
- arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}Configura la extensión para exportar a ClickStack
Rotel Lambda Extension se configura mediante variables de entorno. Debes configurar el endpoint del exportador OTLP para que apunte a tu instancia de ClickStack. Los ejemplos asumen que tu función de AWS Lambda puede acceder a la instancia de ClickStack.
Configuración básica (variables de entorno)
Agrega estas variables de entorno a tu función de 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"Configuración avanzada (con el archivo .env)
Para configuraciones más complejas, crea un archivo rotel.env en el paquete de tu función 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"A continuación, configura la variable de entorno para que apunte a este archivo:
ROTEL_ENV_FILE=/var/task/rotel.envUso de AWS Secrets Manager o de Parameter Store
Para implementaciones de producción, almacena valores confidenciales, como claves de API, en AWS Secrets Manager o Parameter Store:
Ejemplo de 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}"Ejemplo de 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}"Permisos de IAM necesarios:
Añada estos permisos a su rol de ejecución de Lambda:
Para 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-*"
}
]
}Para Parameter Store:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters"
],
"Resource": "arn:aws:ssm:us-east-1:123456789012:parameter/clickstack-api-key"
}
]
}Probar la integración
Invoca tu función Lambda para comprobar que los logs se están enviando a ClickStack:
aws lambda invoke \
--function-name my-function \
--payload '{"test": "data"}' \
response.jsonRevise los logs de Lambda para ver si hay errores:
aws logs tail /aws/lambda/my-function --followVerifica los logs en HyperDX
Una vez configurado, inicia sesión en HyperDX (la UI de ClickStack) y verifica que los logs se estén enviando:


Busca estos atributos clave en los logs:
service.name: El nombre de tu función Lambdafaas.name: Nombre de la función AWS Lambdafaas.invocation_id: ID de invocación únicocloud.provider: "aws"cloud.platform: "aws_lambda"
Deshabilitar CloudWatch Logs (optimización de costos)
De forma predeterminada, AWS Lambda envía todos los logs a CloudWatch Logs, lo que puede resultar costoso a gran escala. Una vez que hayas verificado que los logs se están enviando a ClickStack, puedes deshabilitar el logging de CloudWatch para reducir costos.
Quitar los permisos de CloudWatch del rol de ejecución
- Abre la consola de AWS y ve a AWS Lambda
- Ve a tu función Lambda
- Selecciona Configuration → Permissions
- Haz clic en el nombre del rol de ejecución para abrir la consola de IAM
- Edita el rol y elimina cualquier acción
logs:*:- Si usas una política personalizada, edítala para quitar
logs:CreateLogGroup,logs:CreateLogStreamylogs:PutLogEvents - Si usas la política administrada por AWS
AWSLambdaBasicExecutionRole, quítala del rol
- Si usas una política personalizada, edítala para quitar
- Guarda el rol
Verifica que el logging de CloudWatch esté deshabilitado
Invoca tu función de nuevo y verifica que:
- No se creen nuevos streams de logs en CloudWatch
- Los logs sigan apareciendo en ClickStack/HyperDX
# Esto no debería mostrar nuevos streams de logs después del cambio de política
aws logs describe-log-streams \
--log-group-name /aws/lambda/my-function \
--order-by LastEventTime \
--descending \
--max-items 5Agregar autoinstrumentación de OpenTelemetry
Rotel Lambda Extension funciona perfectamente con las capas de autoinstrumentación de OpenTelemetry para recopilar trazas distribuidas y métricas, además de logs.
Elige la capa de instrumentación para tu lenguaje
AWS ofrece capas de autoinstrumentación de OpenTelemetry para varios lenguajes:
| Lenguaje | Patrón de ARN de la capa |
|---|---|
| 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} |
Consulta las versiones más recientes en el repositorio de AWS OpenTelemetry Lambda.
Agrega ambas capas a tu función
Agrega ambas capas: la capa de extensión de Rotel y la capa de instrumentación:
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:1Configura la autoinstrumentación
Define la variable de entorno AWS_LAMBDA_EXEC_WRAPPER para habilitar la autoinstrumentación:
Para Node.js:
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handlerPara Python:
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrumentPara Java:
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handlerVerifica las trazas en HyperDX
Después de invocar tu función:
- Ve a la vista Traces de HyperDX
- Deberías ver trazas con spans de tu función Lambda
- Las trazas aparecerán correlacionadas con los logs mediante los atributos
trace_idyspan_id
Aplicaciones de ejemplo
Consulta la aplicación de ejemplo en Python que muestra la Rotel Lambda Extension:
- Python + ClickHouse: Aplicación de Python con instrumentación manual de OpenTelemetry, que envía trazas y logs directamente a ClickHouse
Únete a la comunidad de Rotel
Si tienes preguntas sobre Rotel, únete al servidor de Discord de Rotel y comparte tus comentarios o dudas. Échale un vistazo a la Rotel Lambda Extension para contribuir con mejoras.
Recursos adicionales
- Rotel Lambda Extension: Código fuente y documentación detallada
- Rotel Core: El plano de datos ligero de OTel que sirve de base para la extensión