Comment résoudre les problèmes de configuration lorsque j'intègre Fluent Bit à Container Insights pour Amazon EKS ?

Lecture de 5 minute(s)
0

Je souhaite résoudre les problèmes de configuration liés à l'intégration de Fluent Bit à Container Insights pour Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Fluent Bit est un processeur de journaux et un redirecteur léger que vous utilisez pour collecter des journaux de conteneurs dans Amazon CloudWatch.

Il est recommandé d'utiliser Fluent Bit au lieu de Fluentd (un ancien programme open source) en raison de sa faible empreinte sur les ressources et de la fonctionnalité Use_Kubelet. Pour plus d'informations, voir Activer la fonctionnalité Use_Kubelet pour les clusters de grande taille.

Pour permettre à Fluent Bit de transmettre des journaux de conteneurs à Amazon CloudWatch Logs, vous devez accorder des autorisations de la Gestion des identités et des accès AWS (IAM) à Fluent Bit. Avec Amazon EKS, il existe deux manières d'accorder des autorisations IAM :

  • Associez une politique au rôle IAM de vos composants master.
  • Utilisez un rôle de compte de service IAM.

Si vous accordez des autorisations IAM à Fluent Bit, Fluent Bit est en mesure d'effectuer les actions suivantes :

  • logs:DescribeLogGroups
  • logs:DescribeLogStreams
  • logs:CreateLogGroup
  • logs:CreateLogStream
  • logs:PutLogEvents

Les problèmes les plus courants sont les suivants :

  • Les pods de Fluent Bit se plantent.
  • Fluent Bit n'envoie pas de journaux à CloudWatch.
  • Les pods Fluent Bit renvoient CreateContainerConfigError.

Solution

Configurer un rôle IAM pour le compte de service

Créez un rôle IAM pour le compte de service cloudwatch-agent pour l'espace de noms amazon-cloudwatch à l'aide de la politique CloudWatchAgentServerPolicy gérée par AWS.

1.    Exécutez les commandes suivantes pour configurer les variables d'environnement :

export CLUSTER="clustername"
export AWS_REGION="awsregion"
export AWS_ACCOUNT="awsaccountid"

Remarque : remplacez « clustername », « awsregion » et « awsaccountid » (y compris les guillemets) par le nom de votre cluster, votre Région AWS et votre identifiant de compte.

2.    Exécutez la commande eksctl suivante :

eksctl create iamserviceaccount \
    --name cloudwatch-agent \
    --namespace amazon-cloudwatch \
    --cluster $CLUSTER \
    --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
    --approve \
    --override-existing-serviceaccounts

Pour plus d'informations sur les prérequis de Container Insights, voir la section Vérifier les prérequis.

Configurez l'agent CloudWatch pour collecter les métriques du cluster et activez Container Insights

1.    Pour déployer Container Insights en utilisant le démarrage rapide, exécutez la commande suivante :

ClusterName="my-cluster-name"
RegionName="my-cluster-region"
FluentBitHttpPort='2020'
FluentBitReadFromHead='Off'
[[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
[[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || 
FluentBitHttpServer='On'
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-
container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-
monitoring/quickstart/cwagent-fluent-bit-quickstart.yaml | sed 's/
{{cluster_name}}/'${ClusterName}'/;s/
{{region_name}}/'${RegionName}'/;s/
{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/
{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/
{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/
{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl apply -f -

Remarque : remplacez « my-cluster-name » et « my-cluster-region » (y compris les guillemets) par le nom de votre cluster et de votre Région AWS.

La commande précédente crée un espace de nom, ClusterRole, ClusterRoleBinding et ConfigMap pour l'agent CloudWatch et Fluent Bit.

2.    Après l'exécution de cette commande, exécutez la commande suivante pour créer le compte de service de Fluent Bit :

eksctl create iamserviceaccount \
    --name fluent-bit \
    --namespace amazon-cloudwatch \
    --cluster $CLUSTER \
    --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
    --approve \
    --override-existing-serviceaccounts

3.    Exécutez la commande suivante pour valider le déploiement de l'agent CloudWatch :

kubectl get pods -n amazon-cloudwatch

4.    Une fois terminé, l'agent CloudWatch crée le groupe de journaux /aws/containerinsights/Cluster_Name/performance. Ensuite, l'agent CloudWatch envoie les événements du journal des performances au groupe de journaux.

Dépannage

Les pods Fluent Bit se plantent

1.    Vérifiez les messages d'erreur dans les journaux des pods de Fluent Bit. Exécutez ces commandes pour rechercher des événements provenant des pods de Fluent Bit :

kubectl -n amazon-cloudwatch logs -l k8s-app=fluent-bit 

kubectl -n amazon-cloudwatch describe pod fluent_pod pod_name

2.    Vérifiez que cluster-info (le fichier de configuration Fluent Bit stocké dans ConfigMap) est exact et ne contient pas d’erreur de syntaxe. Assurez-vous que toutes les valeurs de nom de cluster et de région sont définies. Pour plus d'informations, voir amazon-cloudwatch-container-insights sur le site Web de GitHub.

Fluent Bit n'envoie pas de journaux à CloudWatch

1.    Vérifiez que le plug-in de sortie est correctement configuré dans le fichier de configuration Fluent Bit. Pour vérifier s'il y a des erreurs d'envoi de données, utilisez la commande suivante pour vérifier les journaux des pods de Fluent Bit :

kubectl -n amazon-cloudwatch logs fluent_pod_name

2.    Assurez-vous que les pods de Fluent Bit ont les permissions IAM nécessaires pour diffuser les journaux vers CloudWatch. Vos composants mater Amazon EKS soumettent des métriques et des journaux à CloudWatch en raison de la politique CloudWatchAgentServerPolicy appliquée par IAM. Il existe deux façons d'accorder les autorisations IAM nécessaires :

  • Ajoutez une politique aux rôles IAM des composants master.
  • Créez un rôle IAM pour les comptes de service du cluster, et apposez-y la politique.

Voir la section Configurer un rôle IAM pour un compte de service pour plus d'informations.

Les pods Fluent Bit bloqués dans CreateContainerConfigError

Si l'état du pod est CreateContainerConfigError, exécutez la commande suivante pour obtenir le message d'erreur exact :

kubectl describe pod pod_name -n amazon-cloudwatch

Dans la section Événements de la sortie de la commande, recherchez un message d'erreur comme le suivant :

Error syncing pod ("fluent-bit-xxxxxxx"), skipping: failed to "StartContainer" with CreateContain
erConfigError: "configmap \"fluent-bit-config\" not found"

Si ce message d'erreur s'affiche, il est probable que vous n'ayez pas créé la ConfigMap pour Fluent Bit (fluent-bit-config). Suivez à nouveau les étapes d'installation pour vous assurer de créer la ConfigMap.


Informations connexes

Configurer l'agent CloudWatch pour collecter les métriques du cluster

Démarrage rapide avec l'agent CloudWatch et Fluent Bit

Activer la journalisation du débogage (site Web GitHub)

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an