View a markdown version of this page

Envoi de journaux à Amazon CloudWatch - Amazon CloudWatch

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Envoi de journaux à Amazon CloudWatch

OTel Container Insights collecte et envoie les journaux des conteneurs à Amazon CloudWatch Logs en utilisant le pipeline de journaux du OpenTelemetry collecteur. Le module complémentaire Amazon CloudWatch Observability EKS déploie un OpenTelemetry collecteur DaemonSet qui utilise le récepteur de journaux de fichiers pour suivre les fichiers journaux du conteneur, les enrichir avec des métadonnées Kubernetes et les exporter vers des journaux via l'exportateur de journaux. CloudWatch CloudWatch

Aucune configuration supplémentaire n'est requise pour la collecte de journaux de base. La collecte de journaux est activée par défaut lorsque vous suivez leDémarrage rapide : OTel Container Insights sur Amazon EKS.

Conditions préalables

Avant de configurer la collecte des journaux, vérifiez que vous répondez aux exigences suivantes.

  • OTel Container Insights installé et amazon-cloudwatch-observability module complémentaire actif sur votre cluster

  • Autorisations IAM : logs:CreateLogGrouplogs:CreateLogStream,logs:PutLogEvents,logs:DescribeLogGroups, et logs:DescribeLogStreams (incluses dans la politique CloudWatchAgentServerPolicy gérée)

  • Accès au nœud : le collecteur doit avoir accès /var/log/pods à chaque nœud

Groupes de journaux et sources

Le tableau suivant décrit le groupe de journaux créé par OTel Container Insights et la source à partir de laquelle il collecte des données.

Groupe de journaux Source Table des matières
/aws/containerinsights/cluster-name/application /var/log/pods/**/*.log Tous les journaux stdout et stderr du conteneur
Note

Les journaux de l'hôte et du plan de données seront disponibles dans une future version.

Comment fonctionne le pipeline de logs OTel

Le OpenTelemetry collecteur du module complémentaire exécute un pipeline de logs avec les composants suivants.

  • Récepteurs — Le filelog récepteur extrait les fichiers journaux du conteneur depuis/var/log/pods/.

  • Processeurs : le k8sattributes processeur enrichit les journaux avec les métadonnées Kubernetes. Le batch processeur traite les enregistrements du journal par lots avant l'exportation. Le resource processeur ajoute des attributs de ressources.

  • Exportateurs — L'awscloudwatchlogsexportateur envoie les enregistrements du journal à CloudWatch Logs.

Enrichissement du journal

Le pipeline enrichit chaque enregistrement de journal avec les attributs suivants.

  • Attributs de ressources Kubernetesk8s.pod.name,,k8s.namespace.name, et k8s.container.name k8s.node.name k8s.deployment.name

  • Étiquettes de capsules : toutes les étiquettes de capsules sous forme d'k8s.pod.label.*attributs

  • Attributs du cloudcloud.regioncloud.account.id, et cloud.platform

  • Attributs du clusterk8s.cluster.name

Personnalisation de la collecte de journaux

Vous pouvez personnaliser la collecte des journaux en mettant à jour les valeurs de configuration du module complémentaire. Les sections suivantes décrivent les options de personnalisation courantes.

Désactiver la collecte de journaux

Pour désactiver complètement la collecte de journaux, mettez à jour la configuration du module complémentaire en désactivant les journaux de conteneur.

Pour désactiver la collecte de journaux
  • Exécutez la commande suivante. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":false}}' \ --resolve-conflicts OVERWRITE

Exclure les espaces de noms de la collecte de journaux

Pour exclure des espaces de noms spécifiques de la collecte de journaux, utilisez l'option excludeNamespaces de configuration.

Pour exclure les espaces de noms de la collecte de journaux
  • Exécutez la commande suivante. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS. Remplacez les valeurs des espaces de noms par les espaces de noms que vous souhaitez exclure.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"excludeNamespaces":["kube-system","load-testing","monitoring"]}}' \ --resolve-conflicts OVERWRITE

Inclure uniquement des espaces de noms spécifiques

Pour collecter des journaux uniquement à partir d'espaces de noms spécifiques, utilisez l'option includeNamespaces de configuration.

Pour inclure uniquement des espaces de noms spécifiques
  • Exécutez la commande suivante. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS. Remplacez les valeurs des espaces de noms par les espaces de noms que vous souhaitez inclure.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"includeNamespaces":["production","staging"]}}' \ --resolve-conflicts OVERWRITE

Configurer l'analyse des journaux multilignes

Pour combiner des entrées de journal multilignes (telles que des traces de pile) en un seul enregistrement de journal, configurez l'analyse multiligne avec un modèle de première ligne.

Pour configurer l'analyse des journaux multilignes
  • Exécutez la commande suivante. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS. Remplacez la firstLinePattern valeur par un modèle regex correspondant à la première ligne de chaque entrée du journal.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"multilineConfig":{"firstLinePattern":"^\\d{4}-\\d{2}-\\d{2}|^\\[\\d{4}","parseFormat":"auto"}}}' \ --resolve-conflicts OVERWRITE

Configurer la conservation des journaux

Par défaut, CloudWatch Logs conserve les données du journal indéfiniment. Pour contrôler les coûts de stockage, vous pouvez définir une politique de rétention pour le groupe de journaux.

Pour configurer la conservation des journaux
  • Exécutez la commande suivante. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS. Remplacez 30 par le nombre de jours pendant lesquels les journaux sont conservés.

    aws logs put-retention-policy \ --log-group-name "/aws/containerinsights/cluster-name/application" \ --retention-in-days 30

Vérification

Pour vérifier que la collecte de journaux fonctionne, vérifiez que les groupes de journaux attendus existent et contiennent des données.

Pour vérifier la collecte des journaux
  • Exécutez la commande suivante. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS.

    aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].{Name:logGroupName,StoredBytes:storedBytes}" \ --output table

    La sortie affiche les noms des groupes de journaux et le nombre d'octets stockés. Une valeur différente de zéro pour StoredBytes confirme que le pipeline fournit des logs.

Résolution des problèmes

Suivez les instructions suivantes pour résoudre les problèmes courants de collecte de journaux.

Les groupes de journaux ne sont pas créés après 5 minutes

Symptôme : le groupe de /aws/containerinsights/cluster-name/application journaux n'apparaît pas dans CloudWatch les journaux après 5 minutes.

Cause : Le collecteur ne dispose pas des autorisations IAM requises pour créer des groupes de journaux et des flux de journaux.

Solution : Vérifiez que la politique CloudWatchAgentServerPolicy gérée est attachée au rôle IAM associé au collecteur. Cette politique inclut les logs:CreateLogStream autorisations logs:CreateLogGroup et.

Le groupe de journaux d'applications existe mais est vide

Symptôme : le groupe de journaux d'applications existe dans CloudWatch les journaux, mais il ne contient aucun flux de journal ni aucun événement de journal.

Cause : Ce problème se produit lorsque les conteneurs n'écrivent pas sur stdout ou stderr, ou lorsque le récepteur du journal de fichiers ne peut pas accéder au nœud. /var/log/pods/

Solution : Procédez comme suit pour résoudre ce problème.

  1. Vérifiez que les conteneurs de votre application écrivent des journaux sur stdout ou stderr.

  2. Vérifiez que le DaemonSet module collecteur est équipé d'un support de volume pour/var/log/pods.

    kubectl get daemonset -n amazon-cloudwatch -o yaml | grep -A 5 "var/log/pods"
  3. Vérifiez les journaux du collecteur pour détecter les erreurs d'accès aux fichiers.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=50 | grep -i "error\|permission"

Coûts de CloudWatch journalisation élevés

Symptôme : CloudWatch les coûts d'ingestion ou de stockage des logs sont plus élevés que prévu.

Cause : les High-volume espaces de noms (tels que les tests de charge ou la surveillance des espaces de noms) génèrent de gros volumes de journaux.

Solution : Procédez comme suit pour réduire les coûts.

  1. Excluez les espaces de noms à volume élevé de la collecte de journaux. Pour obtenir des instructions, veuillez consulter Exclure les espaces de noms de la collecte de journaux.

  2. Définissez une politique de conservation sur le groupe de journaux afin de supprimer automatiquement les anciens journaux. Pour obtenir des instructions, veuillez consulter Configurer la conservation des journaux.