Envoyer des logs de service AWS avec la destination Datadog pour Amazon Data Firehose
Présentation
Vous pouvez transmettre les logs de vos services AWS stockés dans des groupes de logs CloudWatch à un flux de données Amazon Kinesis, dans le but de les envoyer par la suite à une ou plusieurs destinations via Amazon Data Firehose. Par défaut, Datadog constitue l’une des destinations des flux de diffusion Amazon Data Firehose.
Amazon Data Firehose est entièrement géré par AWS : vous n’avez donc pas besoin de maintenir une infrastructure supplémentaire ou une configuration de redirection pour le streaming de logs. Vous pouvez configurer un flux de diffusion Amazon Data Firehose dans la console AWS Firehose ou configurer automatiquement la destination à l’aide d’un modèle CloudFormation.
Configuration
Datadog vous conseille d’utiliser un flux de données Kinesis en tant qu’entrée lorsque vous utilisez la destination Datadog avec Amazon Data Firehose. Cela vous permet de transmettre vos logs à plusieurs destinations si ces logs ne sont pas seulement utilisés par Datadog. Si vous souhaitez envoyer vos logs à Datadog uniquement, ou si vous disposez déjà d’un flux de données Kinesis avec vos logs, vous pouvez ignorer l’étape 1.
Vous pouvez également vous référer à la section Créer un flux de données (en anglais) de guide Amazon Kinesis Data Streams pour les développeurs afin de créer un flux de données Kinesis. Attribuez un nom pertinent au flux, par exemple DatadogLogStream
.
Accédez à Amazon Data Firehose.
Cliquez sur Create Firehose stream.
a. Définissez la source :
Amazon Kinesis Data Streams
si vos logs proviennent d’un flux de données KinesisDirect PUT
si vos logs proviennent directement d’un groupe de logs CloudWatch
b. Définissez la destination Datadog
.
c. Attribuez un nom au flux de diffusion.
d. Sous Destination settings, choisissez l’URL de l’endpoint HTTP Datadog logs
pour votre site Datadog.
e. Collez votre clé d’API dans le champ API key. Vous pouvez consulter votre clé d’API ou en créer une depuis la page Datadog dédiée.
f. Si vous le souhaitez, configurez le paramètre Retry duration spécifiant la durée avant une nouvelle tentative, définissez des paramètres de buffer ou ajoutez des paramètres qui seront joints à vos logs sous la forme de tags.
Remarque : si vos logs sont composés de messages d’une seule ligne, Datadog vous conseille de définir le paramètre Buffer size sur 2 MiB
.
g. Sous Backup settings, sélectionnez un compartiment de sauvegarde S3 afin de recevoir les événements échoués qui ont dépassé la durée de nouvelle tentative.
Remarque : pour veiller à ce que tous les logs qui ont échoué par le biais du flux de diffusion soient quand même envoyés à Datadog, configurez la fonction Lambda du Forwarder Datadog de façon à transmettre les logs provenant de ce compartiment S3.
h. Cliquez sur Create Firehose stream.
Envoyer des logs AWS à votre flux Firehose
Les logs CloudWatch nécessitent une autorisation pour placer des données dans votre flux de données Kinesis ou Amazon Data Firehose, en fonction de l’approche que vous utilisez. Créez un rôle IAM et une stratégie. Abonnez ensuite votre nouveau flux Kinesis ou flux de livraison Amazon Data Firehose aux groupes de logs CloudWatch que vous souhaitez ingérer dans Datadog. Les abonnements peuvent être créés via la console AWS ou CLI.
Remarque : chaque groupe de logs CloudWatch ne peut avoir que deux abonnements.
Créer un rôle IAM et une stratégie
Créez un rôle IAM et une stratégie d’autorisation afin que les logs CloudWatch puissent importer des données dans votre flux Kinesis.
- Vérifiez que vous avez bien configuré le service principal
logs.amazonaws.com
ou logs.<région>.amazonaws.com
dans les Trust relationships du rôle. Par exemple :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"Service": "logs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
- Assurez-vous que la stratégie relative aux autorisations du rôle autorisent les actions
firehose:PutRecord
, firehose:PutRecordBatch
, kinesis:PutRecord
et kinesis:PutRecords
. Si vous utilisez un flux de données Kinesis, indiquez son ARN dans le champ Resource. Si vous n’utilisez pas de flux de données Kinesis, indiquez l’ARN de votre flux Amazon Data Firehose dans le champ Resource.
Exemple :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"firehose:PutRecord",
"firehose:PutRecordBatch",
"kinesis:PutRecord",
"kinesis:PutRecords"
],
"Resource": "arn:aws:kinesis:<REGION>:<ACCOUNT_ID>:stream/<DELIVERY_STREAM>
}
]
}
Référez-vous à l’exemple d’utilisation de filtres d’abonnement avec Kinesis (étapes 3 à 6) pour découvrir comment configurer ces filtres avec l’interface de ligne de commande AWS.
Créer un filtre d’abonnement
Interface de ligne de commande
L’exemple suivant permet de créer un filtre d’abonnement à l’aide de l’interface de ligne de commande AWS :
aws logs put-subscription-filter \
--log-group-name "<MYLOGGROUPNAME>" \
--filter-name "<MyFilterName>" \
--filter-pattern "" \
--destination-arn "<DESTINATIONARN> (flux de données ou flux de diffusion)" \
--role-arn "<MYROLEARN>"
Console
Suivez ces étapes pour créer un filtre d’abonnement par l’intermédiaire de la console AWS.
Accédez à votre groupe de logs dans CloudWatch, cliquez sur l’onglet Subscription filters, puis cliquez sur Create.
- Si vous envoyez des logs via un flux de données Kinesis, sélectionnez
Create Kinesis subscription filter
. - Si vous envoyez des logs directement depuis votre groupe de logs vers votre flux de diffusion Amazon Data Firehose, sélectionnez
Create Amazon Data Firehose subscription filter
.
Sélectionnez le flux de données ou le flux de diffusion Firehose, selon le cas, ainsi que le rôle IAM précédemment créé.
Attribuez un nom au filtre d’abonnement, puis cliquez sur Start streaming.
Remarque importante : la destination du filtre d’abonnement doit se trouver dans le même compte que le groupe de logs, comme décrit dans la documentation relative à l’API de logs Amazon CloudWatch (en anglais).
Validation
Consultez lʼonglet Subscription filters de la page des détails de votre groupe de logs dans CloudWatch pour confirmer que le nouveau flux Kinesis ou Amazon Data Firehose est bien abonné à vos groupes de logs.
Rechercher des logs dans Datadog
Une fois votre flux de diffusion Amazon Data Firehose configuré, vous pouvez analyser les logs abonnés à votre flux de diffusion dans Datadog.
Pour consulter tous les logs correspondant à un ARN :
- Accédez au Log Explorer dans Datadog.
- Dans la barre de recherche, saisissez
@aws.firehose.arn:"<ARN>"
en remplaçant <ARN>
par l’ARN Amazon Kinesis Data Firehose, puis appuyez sur Entrée pour afficher lʼensemble de vos logs abonnés.
Remarque : chaque charge utile Kinesis ne doit pas comporter plus de 65 000 messages de log. Tous les messages dépassant cette limite sont ignorés.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: