Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Supervision des logs AWS Lambda avec ClickStack à l’aide de Rotel

Géré par la communauté

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

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.

Architecture 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}

Régions 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

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}

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"
    }
  ]
}

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

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 :

Vue des logs Lambda
Détail des logs Lambda

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.

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

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.

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

AWS fournit des couches d’auto-instrumentation OpenTelemetry pour plusieurs langages :

Langage Modèle d’ARN de couche
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}

Consultez les versions les plus récentes dans le dépôt AWS OpenTelemetry Lambda.

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

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

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

Navigation