Pilote de logging Amazon CloudWatch Logs
Le pilote de logging awslogs
envoie les logs de conteneur à
Amazon CloudWatch Logs.
Les entrées de log peuvent être récupérées via la Console de gestion AWS ou les SDK AWS
et outils de ligne de commande.
Utilisation
Pour utiliser le pilote awslogs
comme pilote de logging par défaut, définissez les clés log-driver
et log-opt
aux valeurs appropriées dans le fichier daemon.json
, qui se
trouve dans /etc/docker/
sur les hôtes Linux ou
C:\ProgramData\docker\config\daemon.json
sur Windows Server. Pour plus d'informations sur
la configuration de Docker en utilisant daemon.json
, voir
daemon.json.
L'exemple suivant définit le pilote de log à awslogs
et définit l'option
awslogs-region
.
{
"log-driver": "awslogs",
"log-opts": {
"awslogs-region": "us-east-1"
}
}
Redémarrez Docker pour que les changements prennent effet.
Vous pouvez définir le pilote de logging pour un conteneur spécifique en utilisant l'option
--log-driver
avec docker run
:
$ docker run --log-driver=awslogs ...
Si vous utilisez Docker Compose, définissez awslogs
en utilisant l'exemple de déclaration suivant :
myservice:
logging:
driver: awslogs
options:
awslogs-region: us-east-1
Options Amazon CloudWatch Logs
Vous pouvez ajouter des options de logging au daemon.json
pour définir des valeurs par défaut Docker-wide,
ou utiliser le drapeau --log-opt NAME=VALUE
pour spécifier les options du
pilote de logging Amazon CloudWatch Logs lors du démarrage d'un conteneur.
awslogs-region
Le pilote de logging awslogs
envoie vos logs Docker vers une région spécifique. Utilisez
l'option de log awslogs-region
ou la variable d'environnement AWS_REGION
pour définir
la région. Par défaut, si votre daemon Docker fonctionne sur une instance EC2
et qu'aucune région n'est définie, le pilote utilise la région de l'instance.
$ docker run --log-driver=awslogs --log-opt awslogs-region=us-east-1 ...
awslogs-endpoint
Par défaut, Docker utilise soit l'option de log awslogs-region
soit la
région détectée pour construire le point de terminaison API CloudWatch Logs distant.
Utilisez l'option de log awslogs-endpoint
pour remplacer le point de terminaison par défaut
par le point de terminaison fourni.
NoteL'option de log
awslogs-region
ou la région détectée contrôle la région utilisée pour la signature. Vous pourriez rencontrer des erreurs de signature si le point de terminaison que vous avez spécifié avecawslogs-endpoint
utilise une région différente.
awslogs-group
Vous devez spécifier un
groupe de logs
pour le pilote de logging awslogs
. Vous pouvez spécifier le groupe de logs avec l'option
de log awslogs-group
:
$ docker run --log-driver=awslogs --log-opt awslogs-region=us-east-1 --log-opt awslogs-group=myLogGroup ...
awslogs-stream
Pour configurer quel
flux de logs
devrait être utilisé, vous pouvez spécifier l'option de log awslogs-stream
. Si non
spécifié, l'ID du conteneur est utilisé comme flux de logs.
NoteLes flux de logs au sein d'un groupe de logs donné ne devraient être utilisés que par un conteneur à la fois. Utiliser le même flux de logs pour plusieurs conteneurs simultanément peut causer une performance de logging réduite.
awslogs-create-group
Le pilote de log retourne une erreur par défaut si le groupe de logs n'existe pas. Cependant, vous pouvez définir
awslogs-create-group
à true
pour créer automatiquement le groupe de logs selon le besoin.
L'option awslogs-create-group
est par défaut false
.
$ docker run \
--log-driver=awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=myLogGroup \
--log-opt awslogs-create-group=true \
...
NoteVotre politique AWS IAM doit inclure la permission
logs:CreateLogGroup
avant que vous tentiez d'utiliserawslogs-create-group
.
awslogs-create-stream
Par défaut, le pilote de log crée le flux AWS CloudWatch Logs utilisé pour la persistance des logs de conteneur.
Définissez awslogs-create-stream
à false
pour désactiver la création de flux de logs. Quand désactivé, le daemon Docker assume
que le flux de logs existe déjà. Un cas d'utilisation où ceci est bénéfique est quand la création de flux de logs est gérée par
un autre processus évitant les appels API AWS CloudWatch Logs redondants.
Si awslogs-create-stream
est défini à false
et que le flux de logs n'existe pas, la persistance des logs vers CloudWatch
échoue pendant l'exécution du conteneur, résultant en messages d'erreur Failed to put log events
dans les logs du daemon.
$ docker run \
--log-driver=awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=myLogGroup \
--log-opt awslogs-stream=myLogStream \
--log-opt awslogs-create-stream=false \
...
awslogs-datetime-format
L'option awslogs-datetime-format
définit un modèle de début multi-ligne en format Python
strftime
. Un message de log consiste en une ligne qui
correspond au modèle et toutes les lignes suivantes qui ne correspondent pas au modèle. Ainsi
la ligne correspondante est le délimiteur entre les messages de log.
Un exemple d'un cas d'utilisation pour utiliser ce format est pour analyser la sortie telle qu'un vidage de pile, qui pourrait autrement être loggé en plusieurs entrées. Le bon modèle permet qu'il soit capturé en une seule entrée.
Cette option prend toujours la précédence si à la fois awslogs-datetime-format
et
awslogs-multiline-pattern
sont configurés.
NoteLe logging multi-ligne effectue l'analyse et la correspondance d'expressions régulières de tous les messages de log, ce qui peut avoir un impact négatif sur les performances de logging.
Considérez le flux de logs suivant, où de nouveaux messages de log commencent par un horodatage :
[May 01, 2017 19:00:01] A message was logged
[May 01, 2017 19:00:04] Another multi-line message was logged
Some random message
with some random words
[May 01, 2017 19:01:32] Another message was logged
Le format peut être exprimé comme une expression strftime
de
[%b %d, %Y %H:%M:%S]
, et la valeur awslogs-datetime-format
peut être définie à
cette expression :
$ docker run \
--log-driver=awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=myLogGroup \
--log-opt awslogs-datetime-format='\[%b %d, %Y %H:%M:%S\]' \
...
Ceci analyse les logs en les événements de log CloudWatch suivants :
# Premier événement
[May 01, 2017 19:00:01] A message was logged
# Deuxième événement
[May 01, 2017 19:00:04] Another multi-line message was logged
Some random message
with some random words
# Troisième événement
[May 01, 2017 19:01:32] Another message was logged
Les codes strftime
suivants sont supportés :
Code | Signification | Exemple |
---|---|---|
%a |
Nom abrégé du jour de la semaine. | Mon |
%A |
Nom complet du jour de la semaine. | Monday |
%w |
Jour de la semaine comme nombre décimal où 0 est dimanche et 6 est samedi. | 0 |
%d |
Jour du mois comme nombre décimal avec zéro en préfixe. | 08 |
%b |
Nom abrégé du mois. | Feb |
%B |
Nom complet du mois. | February |
%m |
Mois comme nombre décimal avec zéro en préfixe. | 02 |
%Y |
Année avec siècle comme nombre décimal. | 2008 |
%y |
Année sans siècle comme nombre décimal avec zéro en préfixe. | 08 |
%H |
Heure (horloge 24 heures) comme nombre décimal avec zéro en préfixe. | 19 |
%I |
Heure (horloge 12 heures) comme nombre décimal avec zéro en préfixe. | 07 |
%p |
AM ou PM. | AM |
%M |
Minute comme nombre décimal avec zéro en préfixe. | 57 |
%S |
Seconde comme nombre décimal avec zéro en préfixe. | 04 |
%L |
Millisecondes comme nombre décimal avec zéro en préfixe. | .123 |
%f |
Microsecondes comme nombre décimal avec zéro en préfixe. | 000345 |
%z |
Décalage UTC sous la forme +HHMM ou -HHMM. | +1300 |
%Z |
Nom de fuseau horaire. | PST |
%j |
Jour de l'année comme nombre décimal avec zéro en préfixe. | 363 |
awslogs-multiline-pattern
L'option awslogs-multiline-pattern
définit un modèle de début multi-ligne utilisant une
expression régulière. Un message de log consiste en une ligne qui correspond au modèle
et toutes les lignes suivantes qui ne correspondent pas au modèle. Ainsi la ligne correspondante est
le délimiteur entre les messages de log.
Cette option est ignorée si awslogs-datetime-format
est aussi configuré.
NoteLe logging multi-ligne effectue l'analyse et la correspondance d'expressions régulières de tous les messages de log. Ceci peut avoir un impact négatif sur les performances de logging.
Considérez le flux de logs suivant, où chaque message de log devrait commencer par le
modèle INFO
:
INFO A message was logged
INFO Another multi-line message was logged
Some random message
INFO Another message was logged
Vous pouvez utiliser l'expression régulière ^INFO
:
$ docker run \
--log-driver=awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=myLogGroup \
--log-opt awslogs-multiline-pattern='^INFO' \
...
Ceci analyse les logs en les événements de log CloudWatch suivants :
# Premier événement
INFO A message was logged
# Deuxième événement
INFO Another multi-line message was logged
Some random message
# Troisième événement
INFO Another message was logged
tag
Spécifiez tag
comme alternative à l'option awslogs-stream
. tag
interprète
le balisage de modèle Go, tel que {{.ID}}
, {{.FullID}}
ou {{.Name}}
docker.{{.ID}}
. Voir
la documentation de l'option tag pour les détails sur les substitutions de modèle supportées.
Quand à la fois awslogs-stream
et tag
sont spécifiés, la valeur fournie pour
awslogs-stream
remplace le modèle spécifié avec tag
.
Si non spécifié, l'ID du conteneur est utilisé comme flux de logs.
NoteL'API de log CloudWatch ne supporte pas
:
dans le nom de log. Ceci peut causer quelques problèmes lors de l'utilisation de{{ .ImageName }}
comme tag, puisqu'une image Docker a un formatIMAGE:TAG
, tel quealpine:latest
. Le balisage de modèle peut être utilisé pour obtenir le bon format. Pour obtenir le nom d'image et les 12 premiers caractères de l'ID du conteneur, vous pouvez utiliser :--log-opt tag='{{ with split .ImageName ":" }}{{join . "_"}}{{end}}-{{.ID}}'
la sortie est quelque chose comme :
alpine_latest-bf0072049c76
awslogs-force-flush-interval-seconds
Le pilote awslogs
vide périodiquement les logs vers CloudWatch.
L'option awslogs-force-flush-interval-seconds
change l'intervalle de vidage des logs en secondes.
Par défaut 5 secondes.
awslogs-max-buffered-events
Le pilote awslogs
met les logs en mémoire tampon.
L'option awslogs-max-buffered-events
change la taille de la mémoire tampon des logs.
Par défaut 4K.
Informations d'identification
Vous devez fournir des informations d'identification AWS au daemon Docker pour utiliser le
pilote de logging awslogs
. Vous pouvez fournir ces informations d'identification avec les variables d'environnement AWS_ACCESS_KEY_ID
,
AWS_SECRET_ACCESS_KEY
, et AWS_SESSION_TOKEN
, le
fichier d'informations d'identification partagées AWS par défaut (~/.aws/credentials
de l'utilisateur root), ou
si vous exécutez le daemon Docker sur une instance Amazon EC2, le profil d'instance Amazon EC2.
Les informations d'identification doivent avoir une politique appliquée qui permet les actions logs:CreateLogStream
et logs:PutLogEvents
, comme montré dans l'exemple suivant.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["logs:CreateLogStream", "logs:PutLogEvents"],
"Effect": "Allow",
"Resource": "*"
}
]
}