AWS
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

AWS

Crawler Crawler

Présentation

Associez Amazon Web Services (AWS) pour :

  • Consulter des mises à jour automatiques de statut AWS dans votre flux
  • Obtenir des métriques CloudWatch pour les hosts EC2 sans installer l’Agent
  • Appliquer un tag à vos hosts EC2 comportant des informations spécifiques à EC2 (p. ex., leur zone de disponibilité)
  • Consulter les événements de maintenance EC2 planifiés dans votre flux
  • Recueillir des métriques et des événements CloudWatch depuis de nombreux autres produits AWS
L'intégration Amazon de Datadog est conçue pour recueillir TOUTES les métriques en provenance de CloudWatch. Datadog s'efforce de mettre régulièrement à jour sa documentation afin d'inclure chaque sous-intégration. Toutefois, les métriques et les services proposés par les différents services cloud étant en permanente évolution, il est possible que la liste ne soit pas actuelle.
IntégrationDescription
API GatewayCréez, publiez, maintenez et sécurisez des API
AppstreamStreaming d’applications entièrement géré sur AWS
AppSyncUn service GraphQL offrant des fonctionnalités de synchronisation des données en temps réel et de programmation hors ligne
AthenaService de requêtes interactif sans serveur
Autos ScalingConfiguration du dimensionnement d’EC2
BillingFacturation et budgets
CloudFrontRéseau de diffusion de contenu local
CloudHSMModule de sécurité matérielle (HSM) géré
CloudSearchAccès aux fichiers de log et aux appels d’API AWS
CloudTrailAccès aux fichiers de log et aux appels d’API AWS
CodeBuildService de génération entièrement géré
CodeDeployAutomatisation des déploiements de code
CognitoInscription et connexion utilisateur sécurisées
ConnectUn centre de contacts clients fonctionnant en libre-service et basé sur le cloud
Direct ConnectConnexion réseau dédiée à AWS
DMSService de migration de base de données
DocumentDBBase de données compatible avec MongoDB
DynamoDBBase de données NoSQL
EBS (Elastic Block Store)Volumes de stockage permanent par bloc
EC2 (Elastic Cloud Compute)Capacité de calcul redimensionnable dans le cloud
EC2 SpotExploitation des capacités inutilisées d’EC2
ECS (Elastic Container Service)Service de gestion de conteneurs prenant en charge les conteneurs Docker
EFS (Elastic File System)Stockage de fichiers partagés
EKSElastic Container Service pour Kubernetes
Elastic TranscoderTranscodage de fichiers multimédias et de vidéos dans le cloud
ElastiCacheCache en mémoire dans le cloud
Elastic BeanstalkService pour le déploiement et le dimensionnement d’applications et de services Web
ELB (Elastic Load Balancing)Distribution du trafic entrant d’applications sur plusieurs instances Amazon EC2
EMR (Elastic Map Reduce)Traitement de données avec Hadoop
ES (Elasticsearch)Déploiement, utilisation et mise à l’échelle des clusters Elasticsearch
FirehoseCapture et chargement de données de streaming
GameliftHébergement de serveurs de jeux dédiés
GlueExtraction, transformation et chargement de données pour l’analyse
GuardDutyDétection des menaces intelligente
HealthVisibilité sur l’état de vos ressources, services et comptes AWS
InspectorÉvaluation automatisée de la sécurité
IOT (Internet of Things)Connexion d’appareils IoT à des services cloud
KinesisService de traitement en temps réel de grands flux de données distribués
KMS (Key Management Service)Création et contrôle des clés de chiffrement
LambdaService de calcul sans serveur
LexCréation de bots de discussion
Machine LearningCréation des modèles d’apprentissage automatique
MediaConnectTransport vidéo en direct
MediaConvertTraitement vidéo pour la diffusion et la distribution multi-écran
MediaPackagePréparation et protection de vidéos en vue de leur diffusion sur Internet
MediaTailorInsertion évolutive de publicités côté serveur
MQAgent de message géré pour ActiveMQ
Managed Streaming for KafkaConception et exécution d’applications qui utilisent Kafka pour le traitement des données de streaming
Passerelle NATAutoriser les instances d’un sous-réseau privé à se connecter à Internet ou à d’autres services AWS
NeptuneService de base de données orienté graph fiable et rapide conçu pour le cloud
OpsWorksGestion de la configuration
PollyService de synthèse vocale
RDS (Relational Database Service)Base de données relationnelle dans le cloud
RedshiftSolution d’entrepôt de données
RekognitionAnalyse d’images et de vidéos pour les applications
Route 53Gestion de noms de domaine et de trafic avec surveillance de la disponibilité
S3 (Simple Storage Service)Service de stockage dans le cloud hautement disponible et évolutif
SageMakerAlgorithmes et modèles d’apprentissage automatique
SES (Simple Email Service)Service économique d’envoi d’e-mails
SNS (Simple Notification System)Alertes et notifications
SQS (Simple Queue Service)Service de file d’attente de messagerie
Storage GatewayStockage cloud hybride
SWF (Simple Workflow Service)Gestion de workflows dans le cloud
VPC (Virtual Private Cloud)Lancement de ressources AWS dans un réseau virtuel
Web Application Firewall (WAF)Protection des applications Web contre les failles Web les plus courantes
WorkSpacesService de bureau sécurisé
X-RayCréation de traces pour les applications distribuées

Implémentation

La configuration de l’intégration de Datadog à Amazon Web Services nécessite de configurer la délégation de rôles à l’aide d’AWS IAM. Pour mieux comprendre le principe de délégation des rôles, reportez-vous au guide des bonnes pratiques pour AWS IAM.

Délégation des rôles

Choisissez la méthode que vous souhaitez utiliser pour configurer le rôle AWS nécessaire. Nous vous conseillons d’utiliser CloudFormation.

  1. Ouvrez le carré d’intégration AWS dans Datadog.
  2. Depuis l’onglet Configuration, choisissez Automatically Using CloudFormation. Si vous avez déjà un compte AWS associé, commencez par cliquer sur Add another account.
  3. Connectez-vous à la console AWS.
  4. Depuis la page CloudFormation, créez une nouvelle pile et spécifiez votre clé d’API Datadog.
  5. Mettez à jour le carré d’intégration Datadog/AWS en saisissant le nom du rôle IAM et l’ID du compte utilisé pour créer la pile CloudFormation.

AWS

  1. Créez un nouveau rôle dans la console IAM d’AWS.
  2. Sélectionnez le type de rôle Another AWS account.
  3. Pour Account ID, saisissez 464622532012 (identifiant de compte Datadog). Cela signifie que vous accordez à Datadog un accès en lecture seule à vos données AWS.
  4. Sélectionnez Require external ID et saisissez l’ID généré dans le carré d’intégration AWS. Assurez-vous de ne pas cocher Require MFA. Pour en savoir plus sur l’External ID, consultez ce document du guide de l’utilisateur d’IAM.
  5. Cliquez sur Next: Permissions.
  6. Si vous avez déjà créé la stratégie, sélectionnez-la sur cette page, puis passez à l’étape 12. Si ce n’est pas le cas, cliquez sur Create Policy afin d’ouvrir une nouvelle fenêtre.
  7. Sélectionnez l’onglet JSON. Afin de profiter de toutes les intégrations AWS proposées par Datadog, utilisez l’extrait de stratégie sous la zone de texte. Étant donné que d’autres composants sont ajoutés à une intégration, ces autorisations peuvent évoluer.
  8. Cliquez sur Review policy.
  9. Nommez la stratégie DatadogAWSIntegrationPolicy ou utilisez le nom de votre choix, et saisissez une description pertinente.
  10. Cliquez sur Create policy. Vous pouvez ensuite fermer cette fenêtre.
  11. Depuis la fenêtre « Create role », actualisez la liste des stratégies et sélectionnez celle que vous venez de créer.
  12. Cliquez sur Next: Review.
  13. Saisissez le nom DatadogAWSIntegrationRole ou un nom similaire pour le rôle, ainsi qu’une description pertinente. Cliquez sur Create role.

Étape facultative : si vous utilisez Terraform, configurez votre stratégie IAM Datadog à l’aide de l’intégration AWS avec Terraform.

Datadog

  1. Ouvrez le carré d’intégration AWS.
  2. Sélectionnez l’onglet Role Delegation, puis cliquez sur Manually.
  3. Saisissez votre ID de compte AWS sans tiret, p. ex. 123456789012. Votre ID de compte est indiqué dans l’ARN du rôle créé durant l’installation de l’intégration AWS.
  4. Saisissez le nom du rôle créé. Remarque : le nom de rôle saisi dans le carré d’intégration est sensible à la casse et doit correspondre parfaitement au nom du rôle créé sur AWS.
  5. Depuis le côté gauche de la fenêtre, choisissez les services pour lesquels vous souhaitez récupérer des métriques.
  6. Si vous le souhaitez, ajoutez des tags à l’ensemble des hosts et des métriques.
  7. Vous pouvez surveiller un sous-ensemble d’instances EC2 en saisissant les tags AWS correspondants dans la zone de texte to hosts with tag.
  8. Vous pouvez surveiller un sous-ensemble de Lambdas en saisissant les tags AWS correspondants dans la zone de texte to Lambdas with tag.
  9. Cliquez sur Install Integration.

Stratégie IAM AWS Datadog

Les autorisations énumérées ci-dessous sont incluses dans le document de stratégie à l’aide de wildcards comme List* et Get*. Si vous avez besoin de stratégies strictes, utilisez les noms d’action complets indiqués et consultez la documentation sur l’API Amazon pour les services requis.

Toutes les autorisations

Si vous ne souhaitez pas accorder toutes les autorisations à la fois, nous vous conseillons d’utiliser au strict minimum les stratégies AmazonEC2ReadOnlyAccess et CloudWatchReadOnlyAccess. Pour en savoir plus sur les autorisations, consultez la section Autorisations de base.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "apigateway:GET",
                "autoscaling:Describe*",
                "budgets:ViewBudget",
                "cloudfront:GetDistributionConfig",
                "cloudfront:ListDistributions",
                "cloudtrail:DescribeTrails",
                "cloudtrail:GetTrailStatus",
                "cloudwatch:Describe*",
                "cloudwatch:Get*",
                "cloudwatch:List*",
                "codedeploy:List*",
                "codedeploy:BatchGet*",
                "directconnect:Describe*",
                "dynamodb:List*",
                "dynamodb:Describe*",
                "ec2:Describe*",
                "ecs:Describe*",
                "ecs:List*",
                "elasticache:Describe*",
                "elasticache:List*",
                "elasticfilesystem:DescribeFileSystems",
                "elasticfilesystem:DescribeTags",
                "elasticloadbalancing:Describe*",
                "elasticmapreduce:List*",
                "elasticmapreduce:Describe*",
                "es:ListTags",
                "es:ListDomainNames",
                "es:DescribeElasticsearchDomains",
                "health:DescribeEvents",
                "health:DescribeEventDetails",
                "health:DescribeAffectedEntities",
                "kinesis:List*",
                "kinesis:Describe*",
                "lambda:AddPermission",
                "lambda:GetPolicy",
                "lambda:List*",
                "lambda:RemovePermission",
                "logs:TestMetricFilter",
                "logs:PutSubscriptionFilter",
                "logs:DeleteSubscriptionFilter",
                "logs:DescribeSubscriptionFilters",
                "rds:Describe*",
                "rds:List*",
                "redshift:DescribeClusters",
                "redshift:DescribeLoggingStatus",
                "route53:List*",
                "s3:GetBucketLogging",
                "s3:GetBucketLocation",
                "s3:GetBucketNotification",
                "s3:GetBucketTagging",
                "s3:ListAllMyBuckets",
                "s3:PutBucketNotification",
                "ses:Get*",
                "sns:List*",
                "sns:Publish",
                "sqs:ListQueues",
                "states:ListStateMachines",
                "states:DescribeStateMachine",
                "support:*",
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "xray:BatchGetTraces",
                "xray:GetTraceSummaries"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
Autorisations de base

L’intégration Datadog/AWS de base récupère des données à partir d’AWS CloudWatch. Votre document de stratégie doit au minimum autoriser les actions suivantes :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "cloudwatch:Get*",
                "cloudwatch:List*",
                "ec2:Describe*",
                "support:*",
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
Autorisation AWSDescription
cloudwatch:ListMetricsRépertorie les métriques CloudWatch disponibles.
cloudwatch:GetMetricDataRécupère des points de données pour une métrique donnée.
support:*Ajoute des métriques à propos des limites de service.
Nécessite un accès complet en raison des limites d’AWS.
tag:getResourcesRécupère des tags personnalisés en fonction du type de ressource.
tag:getTagKeysRécupère des clés de tag selon les régions d’un compte AWS.
tag:getTagValuesRécupère les valeurs de tag selon les régions d’un compte AWS.

L’API Resource Group Tagging vise notamment à réduire le nombre d’appels API requis pour recueillir des tags personnalisés. Pour en savoir plus, consultez la documentation relative aux stratégies sur les tags sur le site Web d’AWS.

GovCloud et Chine

  1. Ouvrez le carré d’intégration AWS.
  2. Sélectionnez l’onglet Access Keys (GovCloud or China Only).
  3. Saisissez votre clé d’accès et votre clé de secret AWS. Seules les clés d’accès et de secret pour GovCloud et la Chine sont acceptées.
  4. Depuis le côté gauche de la fenêtre, choisissez les services pour lesquels vous souhaitez récupérer des métriques.
  5. Si vous le souhaitez, ajoutez des tags à l’ensemble des hosts et des métriques.
  6. Vous pouvez surveiller un sous-ensemble d’instances EC2 en saisissant les tags AWS correspondants dans la zone de texte to hosts with tag.
  7. Vous pouvez surveiller un sous-ensemble de Lambdas en saisissant les tags AWS correspondants dans la zone de texte to Lambdas with tag.
  8. Cliquez sur Install Integration.

Collecte de logs

Les logs de service AWS sont recueillis via la fonction Lambda du Forwarder Datadog. Ce Lambda, qui se déclenche sur les compartiments S3, les groupes de logs CloudWatch et les événements CloudWatch, transmet des logs à Datadog.

Pour commencer à recueillir des logs à partir de vos services AWS :

  1. Configurez la fonction Lambda du Forwarder Datadog dans votre compte AWS en suivant les instructions figurant dans le référentiel Github DataDog/datadog-serverless-functions.
  2. Activez la journalisation pour votre service AWS (la plupart des services AWS peuvent se connecter à un compartiment S3 ou à un groupe de logs CloudWatch).
  3. Configurez les déclencheurs entraînant l’exécution du Lambda. Il existe deux façons de les configurer :

    • Automatiquement : Datadog récupère les logs pour les services AWS sélectionnés et les ajoute en tant que déclencheurs pour la fonction Lambda de Datadog. Datadog met également la liste à jour.
    • Manuellement : configurez vous-même chaque déclencheur via la console AWS.

Remarque : si vous appartenez à la région us-east-1 d’AWS, utilisez l’intégration Datadog/AWS PrivateLink pour transmettre vos logs à Datadog. Pour ce faire, votre fonction Forwarder doit disposer de l’autorisation VPCLambdaExecutionRole.

Avancé : Ingestion de logs avec Kinesis

Au lieu de déclencher le Forwarder Datadog sur les groupes de logs CloudWatch de vos fonctions Lambda, vous pouvez configurer un flux Kinesis abonné aux groupes de logs de vos fonctions Lambda, puis abonner le Forwarder Datadog à ce flux.

Configuration de la transmission de logs avec Kinesis

  1. Suivez ces instructions pour lancer la pile CloudFormation du Forwarder Datadog dans votre compte AWS.
  2. Identifiez les groupes de logs CloudWatch de vos fonctions Lambda dont les données doivent être transmises à Datadog. Ces groupes de logs sont intitulés /aws/lambda/{Nom de la fonction Lambda}. Pour les retrouver, filtrez les groupes de logs avec le préfixe /aws/lambda/.
  3. Vérifiez si un service est déjà abonné aux groupes de logs qui vous intéressent à l’aide de la colonne Subscriptions sur la page des groupes de logs. Seul un abonnement est possible pour chaque groupe de logs CloudWatch : tout abonnement existant devra donc être supprimé avant d’ajouter le nouveau flux Kinesis en tant qu’abonné.
    • Notez que si vous souhaitez abonner un autre service à ces logs, vous aurez la possibilité de l’abonner au nouveau flux Kinesis une fois la configuration terminée.
  4. Créez un nouveau flux Kinesis (référez-vous à la documentation de Kinesis). Donnez un nom explicite à votre flux, par exemple DatadogLambdaLogStream, et définissez le nombre de shards (partitions) sur 1.
  5. Abonnez votre nouveau flux Kinesis aux groupes de logs CloudWatch que vous souhaitez intégrer à Datadog. Consultez cette section de la documentation sur les logs CloudWatch pour :
    1. Utiliser la commande aws iam create-role pour créer un rôle IAM qui autorise CloudWatch à transmettre ses données de logs au flux Kinesis.
    2. Créer une stratégie autorisant l’action kinesis:PutRecord.
    3. Associer la stratégie d’autorisation au rôle IAM que vous venez de créer avec la commande aws iam put-role-policy.
    4. Utiliser la commande aws logs put-subscription-filter pour abonner votre flux Kinesis à chaque groupe de logs CloudWatch que vous souhaitez intégrer à Datadog.
  6. Examinez la colonne Subscriptions de la page des groupes de logs pour vérifier que votre nouveau flux Kinesis est bien abonné aux groupes de logs de vos Lambdas.
  7. Ajoutez le flux Kinesis en tant que déclencheur à la fonction Lambda du Forwarder Datadog. Afin de limiter la latence des métriques et des logs, nous vous conseillons de définir le paramètre Batch window sur 60 secondes.
  8. La fonction Lambda du Forwarder Datadog commence alors à être déclenchée par les logs de vos autres fonctions Lambda, et vos logs se mettent à apparaître dans Datadog.

Avantages de Kinesis pour le streaming de logs

  • Si les groupes de logs CloudWatch sont limités à un seul abonnement, ce n’est pas le cas des flux Kinesis. Après avoir abonné le flux Kinesis aux groupes de logs, vous pouvez abonner plusieurs services à ce flux afin de tous leur transmettre les données de logs.
  • Étant donné qu’il est possible de configurer la taille des lots et l’intervalle de collecte dans Kinesis, vous êtes libre de définir la fréquence à laquelle la fonction Lambda du Forwarder Datadog doit se déclencher.

Inconvénients de Kinesis pour le streaming de logs

  • Il n’est pas possible d’utiliser un flux Kinesis pour vos logs en même temps que le système de déclenchement automatique du Forwarder de Datadog. Vous devrez ajouter vote flux en tant qu’abonné à chaque groupe de logs que vous souhaitez intégrer à Datadog.
  • L’utilisation du flux Kinesis est facturée par AWS. Consultez la documentation sur les tarifs de Kinesis pour en savoir plus.

Activer la journalisation pour votre service AWS

Tous les services AWS qui génèrent des logs dans un compartiment S3 ou un groupe de logs CloudWatch sont pris en charge. Consultez les instructions de configuration spécifiques des services les plus utilisés dans le tableau ci-dessous :

Service AWSActivation de la journalisation de service AWSEnvoi de logs AWS à Datadog
API GatewayActiver les logs AWS API GatewayCollecte de logs manuelle
CloudfrontActiver les logs AWS CloudFrontCollecte de logs manuelle et automatique
CloudtrailActiver les logs AWS CloudtrailCollecte de logs manuelle
DynamoDBActiver les logs AWS DynamoDBCollecte de logs manuelle
EC2-Utiliser l’Agent Datadog pour envoyer vos logs à Datadog
ECS-Utiliser l’Agent Docker pour rassembler vos logs
Elastic Load Balancing (ELB)Activer les logs AWS ELBCollecte de logs manuelle et automatique
Lambda-Collecte de logs manuelle et automatique
RDSActiver les logs AWS RDSCollecte de logs manuelle
Route 53Activer les logs AWS Route 53Collecte de logs manuelle
S3Activer les logs AWS S3Collecte de logs manuelle et automatique
SNSIl n’y a pas de « logs SNS ». Traitez les logs et les événements transmis via le service SNS.Collecte de logs manuelle
RedShiftActiver les logs AWS RedshiftCollecte de logs manuelle et automatique
VPCActiver les logs AWS VPCCollecte de logs manuelle

Envoyer des logs de service AWS à Datadog

Vous pouvez choisir entre deux options pour la configuration des déclencheurs de la fonction Lambda de Datadog :

  • Configurer manuellement des déclencheurs sur des compartiments S3, des groupes de logs CloudWatch ou des événements CloudWatch.
  • Laisser Datadog définir et gérer automatiquement la liste des déclencheurs.

Configurer automatiquement des déclencheurs

Si vous stockez des logs dans de nombreux compartiments S3 ou groupes de logs CloudWatch, Datadog peut gérer automatiquement les déclencheurs à votre place.

  1. Si vous ne l’avez pas déjà fait, configurez la fonction Lambda de collecte de logs AWS avec Datadog.
  2. Vérifiez que la stratégie du rôle IAM utilisé pour l’intégration Datadog/AWS possède les autorisations suivantes. Le fonctionnement de ces autorisations est décrit ci-dessous :

    "cloudfront:GetDistributionConfig",
    "cloudfront:ListDistributions",
    "elasticloadbalancing:DescribeLoadBalancers",
    "elasticloadbalancing:DescribeLoadBalancerAttributes",
    "lambda:List*",
    "lambda:AddPermission",
    "lambda:GetPolicy",
    "lambda:RemovePermission",
    "redshift:DescribeClusters",
    "redshift:DescribeLoggingStatus",
    "s3:GetBucketLogging",
    "s3:GetBucketLocation",
    "s3:GetBucketNotification",
    "s3:ListAllMyBuckets",
    "s3:PutBucketNotification",
    "logs:PutSubscriptionFilter",
    "logs:DeleteSubscriptionFilter",
    "logs:DescribeSubscriptionFilters"
    Autorisation AWSDescription
    cloudfront:GetDistributionConfigRécupère le nom du compartiment S3 contenant les logs d’accès CloudFront.
    cloudfront:ListDistributionsRépertorie toutes les distributions CloudFront.
    elasticloadbalancing:
    DescribeLoadBalancers
    Répertorie tous les répartiteurs de charge.
    elasticloadbalancing:
    DescribeLoadBalancerAttributes
    Récupère le nom du compartiment S3 contenant les logs d’accès ELB.
    lambda:List*Énumère toutes les fonctions Lambda.
    lambda:AddPermissionAjoute une autorisation permettant à un compartiment S3 de déclencher une fonction Lambda.
    lambda:GetPolicyRécupère la stratégie Lambda lorsque des déclencheurs doivent être supprimés.
    lambda:RemovePermissionSupprime des autorisations d’une stratégie Lambda.
    redshift:DescribeClustersRépertorie tous les clusters Redshift.
    redshift:DescribeLoggingStatusRécupère le nom du compartiment S3 contenant des logs Redshift.
    s3:GetBucketLoggingRécupère le nom du compartiment S3 contenant les logs d’accès S3.
    s3:GetBucketLocationRécupère la région du compartiment S3 contenant les logs d’accès S3.
    s3:GetBucketNotificationRécupère les configurations des déclencheurs Lambda existants.
    s3:ListAllMyBucketsRépertorie tous les compartiments S3.
    s3:PutBucketNotificationAjoute ou supprime un déclencheur Lambda basé sur des événements de compartiment S3.
    logs:PutSubscriptionFilterAjoute un déclencheur Lambda basé sur des événements de log CloudWatch.
    logs:DeleteSubscriptionFilterSupprime un déclencheur Lambda basé sur des événements de log CloudWatch.
    logs:DescribeSubscriptionFiltersRépertorie les filtres d’abonnement pour le groupe de logs spécifié.
  3. Accédez à l’onglet Collect logs dans le carré d’intégration AWS.

  4. Sélectionnez le compte AWS à partir duquel vous souhaitez recueillir des logs, puis saisissez l’ARN du Lambda créé dans la section précédente.

  5. Sélectionnez les services à partir desquels vous souhaitez recueillir des logs, puis enregistrez. Pour arrêter la collecte de logs d’un service spécifique, décochez la case associée.

  6. Si vous possédez des logs dans plusieurs régions, vous devez créer des fonctions Lambda supplémentaires dans ces régions et les indiquer dans ce carré.

  7. Pour arrêter la collecte de l’ensemble des logs AWS, appuyez sur la croix en regard de chaque ARN de Lambda. Tous les déclencheurs de cette fonction seront supprimés.

  8. Quelques minutes après cette première configuration, vos logs AWS apparaissent sur votre page Log Explorer Datadog en temps quasi-réel.

Configurer manuellement des déclencheurs

Collecte de logs depuis un groupe de logs CloudWatch

Si vous stockez des logs dans un groupe de logs CloudWatch, suivez les étapes ci-dessous pour les transmettre à Datadog :

  1. Si vous ne l’avez pas déjà fait, configurez la fonction Lambda de collecte de logs AWS avec Datadog.
  2. Une fois la fonction Lambda installée, ajoutez manuellement un déclencheur dans la console AWS sur le groupe de logs CloudWatch qui contient vos logs :

Sélectionnez le groupe de logs CloudWatch correspondant, ajoutez un nom de filtre (vous pouvez toutefois laisser le filtre vide) et ajoutez le déclencheur :

Accédez ensuite à la section Logs de Datadog pour commencer à explorer vos logs !

Si vous utilisez Terraform, vous pouvez provisionner et gérer vos déclencheurs avec la ressource aws_cloudwatch_log_subscription_filter. Consultez l’exemple de code ci-dessous.

resource "aws_cloudwatch_log_subscription_filter" "datadog_log_subscription_filter" {
  name            = "datadog_log_subscription_filter"
  log_group_name  = <NOM_GROUPE_LOGS_CLOUDWATCH> # p. ex. /aws/lambda/nom_fonction_lambda
  destination_arn = <ARN_FORWARDER_DATADOG> # p. ex. arn:aws:lambda:us-east-1:123:function:datadog-forwarder
  filter_pattern  = ""
}

Si vous utilisez Serverless Framework, SAM ou CloudFormation, vous pouvez provisionner et gérer vos déclencheurs avec la ressource AWS::Logs::SubscriptionFilter de CloudFormation. Un exemple de code est fourni ci-dessous. Si vous utilisez Serverless Framework, le bloc de code doit être placé dans la section resources de votre fichier serverless.yml.

Resources:
  MyLogSubscriptionFilter:
    Type: "AWS::Logs::SubscriptionFilter"
    Properties:
      DestinationArn: "<ARN_FORWARDER_DATADOG>"
      LogGroupName: "<NOM_GROUPE_LOGS_CLOUDWATCH>"
      FilterPattern: ""
Collecte de logs depuis des compartiments S3

Si vous stockez des logs dans un compartiment S3, suivez les étapes ci-dessous pour les transmettre à Datadog :

  1. Si vous ne l’avez pas déjà fait, configurez la fonction Lambda de collecte de logs AWS avec Datadog.
  2. Une fois la fonction Lambda installée, ajoutez manuellement un déclencheur dans la console AWS sur le compartiment S3 qui contient vos logs :

  3. Sélectionnez le compartiment, puis suivez les instructions d’AWS :

  4. Définissez le bon type d’événement sur les compartiments S3 :

Accédez ensuite à votre section Logs de Datadog pour commencer à explorer vos logs !

Si vous utilisez Terraform, vous pouvez provisionner et gérer vos déclencheurs avec la ressource aws_s3_bucket_notification. Consultez l’exemple de code ci-dessous.

resource "aws_s3_bucket_notification" "my_bucket_notification" {
  bucket = my_bucket
  lambda_function {
    lambda_function_arn = "<ARN_FORWARDER_DATADOG>"
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "AWSLogs/"
    filter_suffix       = ".log"
  }
}

resource "aws_lambda_permission" "allow_bucket" {
  statement_id  = "AllowExecutionFromS3Bucket"
  action        = "lambda:InvokeFunction"
  function_name = "<ARN_FORWARDER_DATADOG>"
  principal     = "s3.amazonaws.com"
  source_arn    = "<ARN_DU_COMPARTIMENT>"
}

Si vous utilisez Serverless Framework, SAM ou CloudFormation, vous pouvez configurer vos déclencheurs avec la propriété NotificationConfiguration de CloudFormation pour votre compartiment S3. Un exemple de code est fourni ci-dessous. Si vous utilisez Serverless Framework, le bloc de code doit être placé dans la section resources de votre fichier serverless.yml.

Resources:
  Bucket:
    Type: AWS::S3::Bucket
    DependsOn: BucketPermission
    Properties:
      BucketName: "<MON_COMPARTIMENT>"
      NotificationConfiguration:
        LambdaConfigurations:
        - Event: 's3:ObjectCreated:*'
          Function: "<ARN_FORWARDER_DATADOG>"
  BucketPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: 'lambda:InvokeFunction'
      FunctionName: "<ARN_FORWARDER_DATADOG>"
      Principal: s3.amazonaws.com
      SourceArn: <ARN_DU_COMPARTIMENT>
      SourceAccount: !Ref "AWS::AccountId"

Données collectées

Métriques

aws.logs.incoming_bytes
(gauge)
The volume of log events in uncompressed bytes uploaded to Cloudwatch Logs.
Shown as byte
aws.logs.incoming_log_events
(count)
The number of log events uploaded to Cloudwatch Logs.
Shown as event
aws.logs.forwarded_bytes
(gauge)
The volume of log events in compressed bytes forwarded to the subscription destination.
Shown as byte
aws.logs.forwarded_log_events
(count)
The number of log events forwarded to the subscription destination.
Shown as event
aws.logs.delivery_errors
(count)
The number of log events for which CloudWatch Logs received an error when forwarding data to the subscription destination.
Shown as event
aws.logs.delivery_throttling
(count)
The number of log events for which CloudWatch Logs was throttled when forwarding data to the subscription destination.
Shown as event
aws.events.invocations
(count)
Measures the number of times a target is invoked for a rule in response to an event. This includes successful and failed invocations but does not include throttled or retried attempts until they fail permanently.
aws.events.failed_invocations
(count)
Measures the number of invocations that failed permanently. This does not include invocations that are retried or that succeeded after a retry attempt
aws.events.triggered_rules
(count)
Measures the number of triggered rules that matched with any event.
aws.events.matched_events
(count)
Measures the number of events that matched with any rule.
aws.events.throttled_rules
(count)
Measures the number of triggered rules that are being throttled.
aws.usage.call_count
(count)
The number of specified operations performed in your account
Shown as operation
aws.usage.resource_count
(count)
The number of specified resources in your account
Shown as resource

Événements

Vous pouvez configurer la collecte d’événements AWS pour chaque service AWS. Consultez la documentation des différents services AWS pour en savoir plus sur la collecte d’événements.

Dépannage

Écart entre vos données dans CloudWatch et Datadog

Il est important de tenir compte des deux distinctions suivantes :

  1. Pour les counters AWS, un graphique défini sur « sum » « 1minute » affiche le nombre total d’occurrences en l’espace d’une minute, soit le taux par minute. Datadog affiche les données brutes à partir des valeurs AWS normalisées par seconde, peu importe l’intervalle sélectionné dans AWS. Cela explique pourquoi la valeur affichée dans Datadog peut être plus faible.
  2. Les valeurs minimales, maximales et moyennes n’ont généralement pas la même signification dans AWS et dans Datadog. Dans AWS, les latences moyenne, minimale et maximale correspondent à trois métriques distinctes recueillies. Lorsque Datadog récupère des métriques à partir d’AWS CloudWatch, la latence moyenne est transmise sous la forme de séries temporelles distinctes par ELB. Dans Datadog, lorsque vous sélectionnez les valeurs « min », « max » ou « avg », vous définissez les critères de rassemblement de séries temporelles. Par exemple, si vous cherchez à obtenir system.cpu.idle sans appliquer de filtre, une série est envoyée pour chaque host qui renvoie cette métrique. Ces séries doivent être combinées pour être représentées graphiquement. À l’inverse, si vous cherchez à obtenir system.cpu.idle pour un seul host, aucune agrégation n’est nécessaire. Les valeurs maximale et moyenne sont identiques.

Métriques en retard

Lorsque vous utilisez l’intégration AWS, Datadog récupère vos métriques via l’API CloudWatch. Il est possible que les données des métriques AWS accusent un léger retard, en raison des contraintes liées à l’API.

Pour commencer, l’API CloudWatch propose uniquement une analyse métrique par métrique afin d’extraire des données. Les API CloudWatch prévoient une limite de débit qui varie en fonction des informations d’authentification, de la région et du service. Les métriques sont transmises par AWS en fonction du niveau du compte. Par exemple, si vous payez pour des « métriques détaillées » dans AWS, vous y avez accès plus rapidement. Ce niveau de service pour les métriques détaillées s’applique également à la granularité. Ainsi, certaines métriques sont transmises toutes les minutes, tandis que d’autres sont envoyées toutes les cinq minutes.

Datadog vous permet de hiérarchiser certaines métriques d’un compte afin de les récupérer en priorité, en fonction de certaines circonstances. Contactez l’assistance Datadog pour en savoir plus.

Pour obtenir des métriques en temps quasi-réel, installez l’Agent Datadog sur le host. Pour en savoir plus, consultez l’article de blog de Datadog Tout ce que vous devez savoir pour effectuer une surveillance à partir d’Agents (en anglais).

Métriques manquantes

L’API CloudWatch renvoie uniquement les métriques avec des points de données. Ainsi, si un ELB ne possède aucune instance liée, aucune métrique associée à cet ELB n’apparaît dans Datadog.

Nombre aws.elb.healthy_host_count incorrect

Lorsque l’option d’équilibrage des charges entre zones est activée sur un ELB, toutes les instances liées à cet ELB font partie de toutes les zones de disponibilité (pour CloudWatch). Ainsi, si vous possédez deux instances dans 1a et trois dans ab, la métrique affiche cinq instances par zone de disponibilité. Puisque cela peut s’avérer contre-intuitif, nous avons ajouté de nouvelles métriques, aws.elb.healthy_host_count_deduped et aws.elb.un_healthy_host_count_deduped, qui affichent le nombre d’instances saines et non saines par zone de disponibilité, que vous ayez activé ou non l’option d’équilibrage des charges entre zones.

Hosts dupliqués lors de l’installation de l’Agent

Lors de l’installation de l’Agent sur un host AWS, il est possible que des hosts soient dupliqués pendant quelques heures sur la page d’infrastructure si vous avez défini manuellement le hostname dans la configuration de l’Agent. Ces doublons disparaîtront après quelques heures et ne seront pas pris en compte pour la facturation.