Passer au contenu principal
TL;DRCe guide vous montre comment surveiller vos fonctions AWS Lambda avec ClickStack grâce à la Rotel Lambda Extension, afin de collecter et d’envoyer directement vers ClickHouse les logs des fonctions, les logs de l’extension et les données OpenTelemetry. Vous apprendrez à :
  • Déployer la couche Rotel Lambda Extension sur vos fonctions Lambda
  • Configurer l’extension pour exporter les logs et les traces vers ClickStack
  • Désactiver CloudWatch Logs de manière facultative pour réduire les coûts
Cette approche peut réduire considérablement vos coûts d’observabilité Lambda en contournant complètement CloudWatch Logs.Temps requis : 5 à 10 minutes

Intégration à des fonctions Lambda existantes

Cette section explique comment configurer vos fonctions AWS Lambda existantes pour envoyer des logs et des traces à ClickStack grâce à Rotel Lambda Extension.

Prérequis

  • Instance ClickStack en fonctionnement
  • Fonctions AWS Lambda à surveiller
  • AWS CLI configuré avec les autorisations appropriées
  • Rôle d’exécution Lambda disposant des autorisations nécessaires pour ajouter des couches
1

Choisissez la couche Rotel Lambda Extension appropriée

Choisissez la couche Lambda correspondant à l’architecture de l’environnement d’exécution de votre fonction Lambda. Le champ {version} dépend de la région AWS dans laquelle vous déployez. Consultez la page des versions pour connaître les derniers numéros de version correspondant à votre région.
ArchitectureARN
x86-64/amd64arn:aws:lambda:{region}:418653438961:layer:rotel-extension-amd64:{version}
arm64arn:aws:lambda:{region}:418653438961:layer:rotel-extension-arm64:{version}
Régions disponibles :
  • 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

Ajoutez la couche Rotel à votre fonction Lambda

Dans ces exemples, remplacez {arch}, {region} et {version} par les valeurs appropriées ci-dessus.
Option 1 : Console AWS
  1. Ouvrez la console AWS Lambda
  2. Accédez à votre fonction Lambda
  3. Faites défiler la page jusqu’à la section Couches, puis cliquez sur Ajouter une couche
  4. Sélectionnez Spécifier un ARN
  5. Saisissez l’ARN de la couche Rotel :
    arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}
    
  6. Cliquez sur Ajouter
Option 2 : AWS CLI
aws lambda update-function-configuration \
  --function-name my-function \
  --layers arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}
Option 3 : AWS SAM
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      # ... other configuration ...
      Layers:
        - arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}
3

Configurer l’extension pour exporter vers ClickStack

La Rotel Lambda Extension se configure à l’aide de variables d’environnement. Vous devez configurer le point de terminaison de l’exportateur OTLP pour qu’il pointe vers votre instance ClickStack. Les exemples supposent que votre fonction AWS Lambda peut accéder à l’instance ClickStack.
Configuration de base (variables d’environnement)
Ajoutez ces variables d’environnement à votre fonction 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"
Configuration avancée (à l’aide d’un fichier .env)
Pour des configurations plus complexes, créez un fichier rotel.env dans le package de votre fonction 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"
Ensuite, définissez la variable d’environnement pour qu’elle pointe vers ce fichier :
ROTEL_ENV_FILE=/var/task/rotel.env
Utilisation d’AWS Secrets Manager ou de Parameter Store
Pour les déploiements en production, stockez les valeurs sensibles, comme les clés d’API, dans AWS Secrets Manager ou Parameter Store :Exemple 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}"
Exemple avec 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}"
Autorisations IAM requises :Ajoutez ces autorisations à votre rôle d’exécution Lambda :Pour 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-*"
    }
  ]
}
Pour le Parameter Store :
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters"
      ],
      "Resource": "arn:aws:ssm:us-east-1:123456789012:parameter/clickstack-api-key"
    }
  ]
}
Les appels à l’API AWS pour récupérer des secrets ajoutent 100 à 150 ms de latence au démarrage à froid. Les secrets sont récupérés par lots (jusqu’à 10) et uniquement lors de l’initialisation, de sorte que les invocations suivantes ne sont pas affectées.
4

Tester l’intégration

Appelez votre fonction Lambda pour vérifier que les logs sont bien envoyés à ClickStack :
aws lambda invoke \
  --function-name my-function \
  --payload '{"test": "data"}' \
  response.json
Consultez les logs de Lambda pour vérifier s’il y a des erreurs :
aws logs tail /aws/lambda/my-function --follow
5

Vérifier les logs dans HyperDX

Une fois la configuration terminée, connectez-vous à HyperDX (l’UI de ClickStack) et vérifiez que les logs sont bien transmis :Recherchez ces attributs clés dans les logs :
  • service.name: Le nom de votre fonction Lambda
  • faas.name: Le nom de la fonction AWS Lambda
  • faas.invocation_id: ID d’invocation unique
  • cloud.provider: “aws”
  • cloud.platform: “aws_lambda”

Désactiver CloudWatch Logs (optimisation des coûts)

Par défaut, AWS Lambda envoie tous les logs vers CloudWatch Logs, ce qui peut s’avérer coûteux à grande échelle. Une fois que vous avez vérifié que les logs arrivent bien dans ClickStack, vous pouvez désactiver la journalisation dans CloudWatch pour réduire les coûts.
1

Supprimer les autorisations CloudWatch du rôle d’exécution

  1. Ouvrez la Console AWS et accédez à AWS Lambda
  2. Accédez à votre fonction Lambda
  3. Sélectionnez ConfigurationPermissions
  4. Cliquez sur le nom du rôle d’exécution pour ouvrir la console IAM
  5. Modifiez le rôle et supprimez toutes les actions logs:* :
    • Si vous utilisez une policy personnalisée, modifiez-la pour supprimer logs:CreateLogGroup, logs:CreateLogStream et logs:PutLogEvents
    • Si vous utilisez la policy gérée par AWS AWSLambdaBasicExecutionRole, supprimez-la du rôle
  6. Enregistrez le rôle
2

Vérifier que la journalisation CloudWatch est désactivée

Appelez à nouveau votre fonction et vérifiez que :
  1. Aucun nouveau flux de logs CloudWatch n’est créé
  2. Les logs continuent d’apparaître dans ClickStack/HyperDX
# Ceci ne devrait afficher aucun nouveau flux de logs après la modification de la policy
aws logs describe-log-streams \
  --log-group-name /aws/lambda/my-function \
  --order-by LastEventTime \
  --descending \
  --max-items 5

Ajout de l’auto-instrumentation OpenTelemetry

Rotel Lambda Extension s’intègre parfaitement aux couches d’auto-instrumentation OpenTelemetry pour collecter des traces distribuées et des métriques, en plus des logs.
1

Choisissez la couche d’instrumentation adaptée à votre langage

AWS fournit des couches d’auto-instrumentation OpenTelemetry pour plusieurs langages :
LangageModèle d’ARN de couche
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}
Consultez les versions les plus récentes dans le dépôt AWS OpenTelemetry Lambda.
2

Ajoutez les deux couches à votre fonction

Ajoutez les deux couches : la couche d’extension Rotel et la couche d’instrumentation :
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

Configurez l’auto-instrumentation

Définissez la variable d’environnement AWS_LAMBDA_EXEC_WRAPPER pour activer l’auto-instrumentation :Pour Node.js :
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler
Pour Python :
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
Pour Java :
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler
4

Vérifiez les traces dans HyperDX

Après avoir invoqué votre fonction :
  1. Accédez à la vue Traces dans HyperDX
  2. Vous devriez voir des traces contenant des spans issus de votre fonction Lambda
  3. Les traces seront corrélées aux logs via les attributs trace_id et span_id

Exemples d’applications

Découvrez l’application d’exemple Python présentant Rotel Lambda Extension :
  • Python + ClickHouse : application Python avec instrumentation OpenTelemetry manuelle, envoyant directement des traces et des logs à ClickHouse

Rejoignez la communauté Rotel

Si vous avez des questions sur Rotel, rejoignez le serveur Discord de Rotel et partagez vos retours ou vos questions. Consultez la Rotel Lambda Extension pour contribuer à des améliorations.

Ressources supplémentaires

Dernière modification le 25 juin 2026