Configurer Fluent Bit comme un DaemonSet pour envoyer des CloudWatch journaux à Logs - 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.

Configurer Fluent Bit comme un DaemonSet pour envoyer des CloudWatch journaux à Logs

Les sections suivantes vous aident à déployer Fluent Bit pour envoyer des journaux depuis des conteneurs vers CloudWatch des journaux.

Différences si vous utilisez déjà Fluentd

Si vous utilisez déjà Fluentd pour envoyer des logs depuis des conteneurs vers Logs, lisez cette section pour voir les différences entre Fluentd et Fluentd CloudWatch Bit. Si vous n'utilisez pas déjà Fluentd avec Container Insights, vous pouvez passer à Configuration de Fluent Bit.

Nous proposons deux configurations par défaut pour Fluent Bit :

  • Configuration optimisée pour Fluent Bit – Configuration alignée sur les bonnes pratiques de Fluent Bit.

  • Configuration compatible Fluentd – Configuration alignée autant que possible sur le comportement Fluentd.

La liste suivante explique en détail les différences entre Fluentd et chaque configuration Fluent Bit.

  • Différences dans les noms de flux de journaux – Si vous utilisez la configuration optimisée Fluent Bit, les noms de flux de journaux seront différents.

    Sous /aws/containerinsights/Cluster_Name/application

    • La configuration optimisée Fluent Bit envoie les journaux à kubernetes-nodeName-application.var.log.containers.kubernetes-podName_kubernetes-namespace_kubernetes-container-name-kubernetes-containerID

    • Fluentd envoie les journaux à kubernetes-podName_kubernetes-namespace_kubernetes-containerName_kubernetes-containerID

    Sous /aws/containerinsights/Cluster_Name/host

    • La configuration optimisée Fluent Bit envoie les journaux à kubernetes-nodeName.host-log-file

    • Fluentd envoie les journaux à host-log-file-Kubernetes-NodePrivateIp

    Sous /aws/containerinsights/Cluster_Name/dataplane

    • La configuration optimisée Fluent Bit envoie les journaux à kubernetes-nodeName.dataplaneServiceLog

    • Fluentd envoie les journaux à dataplaneServiceLog-Kubernetes-nodeName

  • Les fichiers journaux kube-proxy et aws-node écrits par Container Insights se trouvent dans des emplacements différents. Dans la configuration Fluentd, ils sont dans /aws/containerinsights/Cluster_Name/application. Dans la configuration optimisée Fluent Bit, ils sont dans /aws/containerinsights/Cluster_Name/dataplane.

  • La plupart des métadonnées, comme pod_name et namespace_name, sont les mêmes dans Fluent Bit et Fluentd, mais ce qui suit est différent.

    • La configuration optimisée Fluent Bit utilise docker_id et Fluentd utilise Docker.container_id.

    • Les deux configurations Fluent Bit n'utilisent pas les métadonnées suivantes. Elles ne sont présentes que dans Fluentd : container_image_id, master_url, namespace_id, et namespace_labels.

Configuration de Fluent Bit

Pour configurer Fluent Bit 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.

Quelle que soit la méthode, le IAM rôle attaché aux nœuds du cluster doit disposer d'autorisations suffisantes. 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.

Dans les étapes suivantes, vous configurez Fluent Bit daemonSet pour envoyer des CloudWatch journaux à Logs. Une fois que vous avez terminé cette étape, Fluent Bit crée les groupes de journaux suivants, s'ils n'existent pas déjà.

Important

Si FluentD est déjà configuré dans Container Insights et que le FluentD ne fonctionne pas comme prévu (cela peut se produire si vous utilisez le moteur d'exécution), vous devez containerd le désinstaller avant d'installer DaemonSet FluentD pour empêcher FluentD de traiter les messages du journal d'erreurs FluentD. Sinon, vous devez désinstaller Fluentd immédiatement après avoir installé Fluent Bit. La désinstallation de Fluentd après l'installation de Fluent Bit garantit la continuité de la journalisation pendant ce processus de migration. Un seul Fluent Bit ou FluentD est nécessaire pour envoyer des journaux à Logs. CloudWatch

Nom du groupe de journaux Source des journaux

/aws/containerinsights/Cluster_Name/application

Tous les fichiers journaux situés dans /var/log/containers

/aws/containerinsights/Cluster_Name/host

Journaux provenant de /var/log/dmesg, /var/log/secure et /var/log/messages

/aws/containerinsights/Cluster_Name/dataplane

Les journaux dans /var/log/journal pour kubelet.service, kubeproxy.service et docker.service.

Pour installer Fluent Bit pour envoyer des journaux depuis des conteneurs vers des CloudWatch journaux
  1. Si vous n'avez pas encore d'espace de noms appelé amazon-cloudwatch, créez-en un en saisissant 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
  2. Exécutez la commande suivante pour créer un ConfigMap nom cluster-info avec le nom du cluster et la région à laquelle envoyer les journaux. Remplacez cluster-name and cluster-region avec le nom et la région de votre cluster.

    ClusterName=cluster-name RegionName=cluster-region FluentBitHttpPort='2020' FluentBitReadFromHead='Off' [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On' [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On' kubectl create configmap fluent-bit-cluster-info \ --from-literal=cluster.name=${ClusterName} \ --from-literal=http.server=${FluentBitHttpServer} \ --from-literal=http.port=${FluentBitHttpPort} \ --from-literal=read.head=${FluentBitReadFromHead} \ --from-literal=read.tail=${FluentBitReadFromTail} \ --from-literal=logs.region=${RegionName} -n amazon-cloudwatch

    Dans cette commande, le FluentBitHttpServer permettant de surveiller les métriques de plugin est activé par défaut. Pour le désactiver, remplacez la troisième ligne de la commande par FluentBitHttpPort='' (chaîne vide) dans la commande.

    Également par défaut, Fluent Bit lit les fichiers journaux de processus, et ne capture que les nouveaux journaux après son déploiement. Si vous souhaitez faire le contraire, définissez FluentBitReadFromHead='On' et il va collecter tous les journaux dans le système de fichiers.

  3. Téléchargez et déployez le daemonset Fluent Bit sur le cluster en exécutant l'une des commandes suivantes.

    • Si vous souhaitez une configuration optimisée de Fluent Bit pour les ordinateurs Linux, exécutez cette commande.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yaml
    • Si vous souhaitez une configuration optimisée de Fluent Bit pour les ordinateurs Windows, exécutez cette commande.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-windows.yaml
    • Si vous utilisez des ordinateurs Linux et que vous souhaitez une configuration Fluent Bit plus similaire à Fluentd, exécutez cette commande.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-compatible.yaml
    Important

    La configuration du daemonset Fluent Bit définit par défaut le niveau de journalisation surINFO, ce qui peut entraîner des coûts d'ingestion de CloudWatch logs plus élevés. Si vous souhaitez réduire le volume et les coûts d'ingestion des journaux, vous pouvez modifier le niveau des journaux surERROR.

    Pour plus d'informations sur la réduction du volume des journaux, consultez (En option) Réduction du volume des journaux de Fluent Bit

  4. Validez le déploiement en entrant la commande suivante. Chaque nœud doit avoir un pod nommé fluent-bit-*.

    kubectl get pods -n amazon-cloudwatch

Les étapes ci-dessus créent les ressources suivantes dans le cluster :

  • Un compte de service nommé Fluent-Bit dans l'espace de noms amazon-cloudwatch. Ce compte de service est utilisé pour exécuter le Fluent BitdaemonSet. 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é Fluent-Bit-role dans l'espace de noms amazon-cloudwatch. Ce rôle de cluster octroie des autorisations get, list et watch sur les journaux de pod au compte de service Fluent-Bit. Pour plus d'informations, consultez la section APIPrésentation dans la référence Kubernetes.

  • Un ConfigMap nommé Fluent-Bit-config dans l'espace de amazon-cloudwatch noms. Il ConfigMap contient la configuration à utiliser par Fluent Bit. Pour plus d'informations, consultez Configurer un pod pour utiliser un ConfigMap dans la documentation des tâches Kubernetes.

Si vous souhaitez vérifier votre configuration Fluent Bit, procédez comme suit.

Vérifier la configuration Fluent Bit
  1. Ouvrez la CloudWatch console à l'adresse https://console.aws.amazon.com/cloudwatch/.

  2. Dans le panneau de navigation, choisissez Groupes de journaux.

  3. Assurez-vous que vous êtes dans la région où vous avez déployé Fluent Bit.

  4. Vérifiez la liste des groupes de journaux dans la région. Vous devez voir ce qui suit :

    • /aws/containerinsights/Cluster_Name/application

    • /aws/containerinsights/Cluster_Name/host

    • /aws/containerinsights/Cluster_Name/dataplane

  5. Accédez à l'un de ces groupes de journaux et cochez la case Last Event Time (Heure du dernier événement) pour les flux de journaux. S'il est récent par rapport au moment où vous avez déployé Fluent Bi , la configuration est vérifiée.

    Il peut y avoir un léger retard dans la création du groupe de journaux /dataplane. Ceci est normal, car ces groupes de journaux ne sont créés que lorsque Fluent Bit commence à envoyer des journaux pour ce groupe de journaux.

Prise en charge des journaux multilignes

Pour plus d'informations sur l'utilisation de Fluent Bit avec des journaux multilignes, consultez les sections suivantes de la documentation Fluent Bit :

(En option) Réduction du volume des journaux de Fluent Bit

Par défaut, nous envoyons les journaux des applications Fluent Bit 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. Si vous avez suivi les étapes décrites sur cette page pour configurer Fluent Bit, téléchargez le YAML fichier manifeste Kubernetes à partir de la apply commande kubectl que vous avez précédemment exécutée et modifiez-le avec vos modifications, que vous pourrez ensuite réappliquer à votre cluster. Sinon, si vous utilisez le EKS module complémentaire Amazon CloudWatch Observability ou le graphique Helm, consultez (Facultatif) Configuration supplémentaire pour plus d'informations sur la gestion de la configuration Fluent Bit à l'aide de la configuration avancée du module complémentaire ou du graphique Helm.

Pour arrêter les journaux d'application Fluent Bit, supprimez la section suivante du fichier Fluent Bit configuration.

[INPUT] Name tail Tag application.* Path /var/log/containers/fluent-bit* Parser docker DB /fluent-bit/state/flb_log.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10

Pour empêcher l'ajout de métadonnées Kubernetes aux événements de journal envoyés à CloudWatch, ajoutez les filtres suivants à la application-log.conf section de la configuration Fluent Bit. Remplacez <Metadata_1> et les champs similaires avec les identificateurs de métadonnées réels.

application-log.conf: | [FILTER] Name nest Match application.* Operation lift Nested_under kubernetes Add_prefix Kube. [FILTER] Name modify Match application.* Remove Kube.<Metadata_1> Remove Kube.<Metadata_2> Remove Kube.<Metadata_3> [FILTER] Name nest Match application.* Operation nest Wildcard Kube.* Nested_under kubernetes Remove_prefix Kube.

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 daemonSet des modules Fluent Bit pour rechercher l'erreur.

Exécutez la commande suivante et vérifiez que l'état est Running.

kubectl get pods -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

Tableau de bord

Vous pouvez créer un tableau de bord pour surveiller les métriques de chaque plugin en cours d'exécution. Vous pouvez voir les données pour les octets d'entrée et de sortie, et pour les taux de traitement des enregistrements, ainsi que les erreurs de sortie et les taux de nouvelle tentative/échec. Pour consulter ces métriques, vous devez installer l' CloudWatch agent avec la collecte de métriques Prometheus pour les clusters EKS Amazon et Kubernetes. Pour plus d'informations sur la configuration du tableau de bord, consultez Installez l' CloudWatch agent avec la collecte de métriques Prometheus sur les clusters Amazon EKS et Kubernetes.

Note

Avant de pouvoir configurer ce tableau de bord, vous devez configurer Container Insights pour les métriques Prometheus. Pour plus d'informations, consultez Surveillance des métriques Prometheus Container Insights.

Pour créer un tableau de bord pour les métriques Prometheus de Fluent Bit
  1. Créez des variables d'environnement, en remplaçant les valeurs à droite dans les lignes suivantes pour correspondre à votre déploiement.

    DASHBOARD_NAME=your_cw_dashboard_name REGION_NAME=your_metric_region_such_as_us-west-1 CLUSTER_NAME=your_kubernetes_cluster_name
  2. Créez le tableau de bord en exécutant la commande suivante.

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/fluent-bit/cw_dashboard_fluent_bit.json \ | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \ | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --dashboard-body