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.
(Facultatif) Configurez Fluentd en tant que DaemonSet pour envoyer des journaux à Logs CloudWatch
Avertissement
Le support de Container Insights pour Fluentd est désormais en mode maintenance, ce qui signifie que cela ne AWS fournira aucune autre mise à jour pour Fluentd et que nous prévoyons de le rendre obsolète dans un futur proche. En outre, la configuration actuelle de Fluentd pour Container Insights utilise une ancienne version de l'image Fluentd fluent/fluentd-kubernetes-daemonset:v1.10.3-debian-cloudwatch-1.0
qui ne contient pas les dernières améliorations et les derniers correctifs de sécurité. Pour la dernière image Fluentd prise en charge par la communauté open source, voir. fluentd-kubernetes-daemonset
Nous vous recommandons vivement de migrer pour utiliser FluentBit Container Insights dans la mesure du possible. Son utilisation en FluentBit tant que redirecteur de journal pour Container Insights permet d'obtenir des gains de performances significatifs.
Pour plus d’informations, consultez Configurer Fluent Bit comme un DaemonSet pour envoyer des CloudWatch journaux à Logs et Différences si vous utilisez déjà Fluentd.
Pour configurer Fluentd afin de collecter les journaux de vos conteneurs, vous pouvez suivre les étapes de Configuration du démarrage rapide pour Container Insights sur Amazon EKS et Kubernetes ou celles de cette section. Dans les étapes suivantes, vous configurez Fluentd DaemonSet pour envoyer des journaux à CloudWatch Logs. Une fois que vous avez terminé cette étape, Fluentd crée les groupes de journaux suivants s'ils n'existent pas déjà.
Nom du groupe de journaux | Source des journaux |
---|---|
|
Tous les fichiers journaux situés dans |
|
Journaux provenant de |
|
Les journaux dans |
Étape 1 : créer un espace de noms pour CloudWatch
Procédez comme suit pour créer l'espace de noms Kubernetes demandé. amazon-cloudwatch
CloudWatch Vous pouvez ignorer cette étape si vous avez déjà créé cet espace de noms.
Pour créer un espace de noms pour CloudWatch
-
Entrez la commande suivante.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
Étape 2 : Installer Fluentd
Pour commencer cette procédure, téléchargez Fluentd. Lorsque vous avez terminé cette procédure, le déploiement crée les ressources suivantes sur le cluster :
-
Un compte de service nommé
fluentd
dans l'espace de nomsamazon-cloudwatch
. Ce compte de service est utilisé pour exécuter le Fluentd DaemonSet. Pour plus d'informations, consultez Managing Service Accounts (Gestion des comptes de service)dans la documentation Reference de Kubernetes. -
Un rôle de cluster rôle nommé
fluentd
dans l'espace de nomsamazon-cloudwatch
. Ce rôle de cluster octroie des autorisationsget
,list
etwatch
sur les journaux de pod au compte de servicefluentd
. Pour plus d'informations, consultez la section APIPrésentationdans la référence Kubernetes. -
Un ConfigMap nommé
fluentd-config
dans l'espace deamazon-cloudwatch
noms. Cela ConfigMap contient la configuration à utiliser par Fluentd. Pour plus d'informations, consultez Configurer un pod pour utiliser un ConfigMapdans la documentation des tâches Kubernetes.
Pour installer Fluentd
-
Créez un ConfigMap nom
cluster-info
avec le nom du cluster et la AWS région vers laquelle les journaux seront envoyés. Exécutez la commande suivante, en mettant à jour les espaces réservés avec les noms de votre cluster et de votre région.kubectl create configmap cluster-info \ --from-literal=cluster.name=
cluster_name
\ --from-literal=logs.region=region_name
-n amazon-cloudwatch -
Téléchargez et déployez le Fluentd DaemonSet sur le cluster en exécutant la commande suivante. Assurez-vous d'utiliser l'image de conteneur avec la bonne architecture. L'exemple de manifeste ne fonctionne que sur les instances x86 et sera saisi
CrashLoopBackOff
si vous avez des instances Advanced RISC Machine (ARM) dans votre cluster. Le Fluentd daemonSet ne possède pas d'image Docker multi-architecture officielle qui vous permet d'utiliser une seule balise pour plusieurs images sous-jacentes et de laisser le moteur d'exécution du conteneur sélectionner la bonne. L'ARMimage Fluentd utilise une balise différente avec unarm64
suffixe.kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluentd/fluentd.yaml
Note
En raison d'une récente modification visant à optimiser la configuration de Fluentd et à minimiser l'impact des API requêtes Fluentd sur les API points de terminaison Kubernetes, l'option « Watch » pour les filtres Kubernetes a été désactivée par défaut. Pour plus de détails, consultez fluent-plugin-kubernetes_metadata_filter
. -
Validez le déploiement en exécutant la commande suivante. Chaque nœud doit avoir un pod nommé
fluentd-cloudwatch-*
.kubectl get pods -n amazon-cloudwatch
Étape 3 : Vérifier la configuration de Fluentd
Pour vérifier votre configuration Fluentd, procédez comme suit.
Pour vérifier la configuration Fluentd pour Container Insights
Ouvrez la CloudWatch console à l'adresse https://console.aws.amazon.com/cloudwatch/
. -
Dans le panneau de navigation, choisissez Groupes de journaux. Assurez-vous que vous êtes dans la région où vous avez déployé Fluentd sur vos conteneurs.
Dans la liste des groupes de journaux associée à cette région, vous devez voir ce qui suit :
-
/aws/containerinsights/
Cluster_Name
/application -
/aws/containerinsights/
Cluster_Name
/host -
/aws/containerinsights/
Cluster_Name
/dataplane
Si vous voyez ces groupes de journaux, la vérification de la configuration Fluentd est terminée.
-
Prise en charge des journaux multilignes
Le 19 août 2019, nous avons ajouté la prise en charge des journaux multilignes pour les journaux collectés par Fluentd.
Par défaut, le déclencheur d'entrée de journal multiligne est n'importe quel caractère sans espace. Cela signifie que toutes les lignes de journal qui commencent par un caractère sans espace sont considérées comme une nouvelle entrée de journal multiligne.
Si vos propres journaux d'application utilisent un déclencheur multiligne différent, vous pouvez les prendre en charge en apportant deux modifications dans le fichier fluentd.yaml
.
Tout d'abord, excluez-les de la prise en charge multiligne par défaut en ajoutant les noms de chemin de vos fichiers journaux dans un champ exclude_path
de la section containers
de fluentd.yaml
. Voici un exemple.
<source> @type tail @id in_tail_container_logs @label @containers path /var/log/containers/*.log exclude_path ["
full_pathname_of_log_file
*", "full_pathname_of_log_file2
*"]
Ensuite, ajoutez un bloc pour vos fichiers journaux au fichier fluentd.yaml
. L'exemple ci-dessous est utilisé pour le fichier journal de l' CloudWatch agent, qui utilise une expression régulière d'horodatage comme point de départ multiligne. Vous pouvez copier ce bloc et l'ajouter à fluentd.yaml
. Modifiez les lignes indiquées pour refléter le nom du fichier journal de votre application et le déclencheur multiligne que vous souhaitez utiliser.
<source> @type tail @id
in_tail_cwagent_logs
@label @cwagentlogs
path/var/log/containers/cloudwatch-agent*
pos_file/var/log/cloudwatch-agent.log.pos
tag * read_from_head true <parse> @type json time_format %Y-%m-%dT%H:%M:%S.%NZ </parse> </source>
<label @
cwagentlogs
> <filter **> @type kubernetes_metadata @id filter_kube_metadata_cwagent </filter> <filter **> @type record_transformer @id filter_cwagent_stream_transformer <record> stream_name ${tag_parts[3]} </record> </filter> <filter **> @type concat key log multiline_start_regexp/^\d{4}[-/]\d{1,2}[-/]\d{1,2}/
separator "" flush_interval 5 timeout_label @NORMAL </filter> <match **> @type relabel @label @NORMAL </match> </label>
(En option) Réduction du volume des journaux de Fluentd
Par défaut, nous envoyons les journaux des applications Fluentd et les métadonnées Kubernetes à. CloudWatch Si vous souhaitez réduire le volume de données à destination CloudWatch, vous pouvez arrêter l'envoi à l'une de ces sources de données ou aux deux CloudWatch.
Pour arrêter les journaux d'application Fluentd, supprimez la section suivante du fichier fluentd.yaml
.
<source> @type tail @id in_tail_fluentd_logs @label @fluentdlogs path /var/log/containers/fluentd* pos_file /var/log/fluentd.log.pos tag * read_from_head true <parse> @type json time_format %Y-%m-%dT%H:%M:%S.%NZ </parse> </source> <label @fluentdlogs> <filter **> @type kubernetes_metadata @id filter_kube_metadata_fluentd </filter> <filter **> @type record_transformer @id filter_fluentd_stream_transformer <record> stream_name ${tag_parts[3]} </record> </filter> <match **> @type relabel @label @NORMAL </match> </label>
Pour empêcher l'ajout de métadonnées Kubernetes aux événements du journal envoyés à CloudWatch, ajoutez une ligne à la record_transformer
section du fichier. fluentd.yaml
Dans la source du journal dans laquelle vous souhaitez supprimer ces métadonnées, ajoutez la ligne suivante.
remove_keys $.kubernetes.pod_id, $.kubernetes.master_url, $.kubernetes.container_image_id, $.kubernetes.namespace_id
Par exemple :
<filter **> @type record_transformer @id filter_containers_stream_transformer <record> stream_name ${tag_parts[3]} </record> remove_keys $.kubernetes.pod_id, $.kubernetes.master_url, $.kubernetes.container_image_id, $.kubernetes.namespace_id </filter>
Résolution des problèmes
Si vous ne voyez pas ces groupes de journaux et que vous recherchez dans la bonne région, consultez les journaux des DaemonSet pods Fluentd pour rechercher l'erreur.
Exécutez la commande suivante et vérifiez que l'état est Running
.
kubectl get pods -n amazon-cloudwatch
Dans les résultats de la commande précédente, notez le nom du pod qui commence par fluentd-cloudwatch
. Utilisez ce nom de pod dans la commande suivante.
kubectl logs
pod_name
-n amazon-cloudwatch
Si les journaux contiennent des erreurs liées aux IAM autorisations, vérifiez le IAM rôle attaché aux nœuds du cluster. Pour plus d'informations sur les autorisations requises pour exécuter un EKS cluster Amazon, consultez EKSIAMles politiques, les rôles et les autorisations Amazon dans le guide de EKS l'utilisateur Amazon.
Si l'état du pod est CreateContainerConfigError
, exécutez la commande suivante pour obtenir l'erreur exacte.
kubectl describe pod
pod_name
-n amazon-cloudwatch
Si l'état du pod est CrashLoopBackOff
, assurez-vous que l'architecture de l'image du conteneur Fluentd est la même que le nœud lorsque vous avez installé Fluentd. Si votre cluster possède à la fois x86 et ARM64 des nœuds, vous pouvez utiliser une étiquette kubernetes.io/arch pour placer les images sur le bon nœud. Pour plus d'informations, consultez kuberntes.io/arch