Come posso risolvere i problemi di configurazione quando integro Fluent Bit con Container Insights per Amazon EKS?

5 minuti di lettura
0

Desidero risolvere i problemi di configurazione quando integro Fluent Bit con Container Insights per Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Fluent Bit è un processore e sistema di inoltro di log leggero che può essere utilizzato per raccogliere i log dei container in Amazon CloudWatch.

È preferibile utilizzare Fluent Bit anziché Fluentd (un programma open source legacy) a causa del suo basso impatto sulle risorse e della funzionalità Use_Kubelet. Per ulteriori informazioni, consulta Attivazione della funzionalità Use_Kubelet per cluster di grandi dimensioni.

Per consentire a Fluent Bit di fornire i log dei container a File di log Amazon CloudWatch, è necessario concedere le autorizzazioni AWS Identity and Access Management (IAM) a Fluent Bit. Con Amazon EKS, esistono due modi per concedere le autorizzazioni IAM:

  • Associare una policy al ruolo IAM dei tuoi nodi worker.
  • Utilizzare un ruolo di account del servizio IAM.

Se concedi le autorizzazioni IAM a Fluent Bit, Fluent Bit è in grado di eseguire le seguenti azioni:

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

I problemi più comuni includono:

  • I pod Fluent Bit vengono arrestati in maniera anomala.
  • Fluent Bit non invia i log a CloudWatch.
  • I pod Fluent Bit restituiscono CreateContainerConfigError.

Risoluzione

Configurazione di un ruolo IAM per l'account di servizio

Crea un ruolo IAM per l'account del serviziocloudwatch-agent per lo spazio dei nomi amazon-cloudwatch con la policy gestita da AWS CloudWatchAgentServerPolicy.

1.    Esegui i seguenti comandi per impostare le variabili di ambiente:

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

Nota: sostituisci "clustername", "awsregion" e "awsaccountid" (comprese le virgolette) con il nome del tuo cluster, la regione AWS e l'ID account.

2.    Esegui il seguente comando eksctl:

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

Per ulteriori informazioni sui prerequisiti di Container Insights, consulta Verifica dei prerequisiti.

Configurazione dell'agente CloudWatch per raccogliere i parametri del cluster e attivare Container Insights

1.    Per implementare Container Insights utilizzando l'avvio rapido, esegui il seguente comando:

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 -

Nota: sostituisci "my-cluster-name" e "my-cluster-region" (comprese le virgolette) con il nome del tuo cluster e la tua Regione AWS.

Il comando precedente crea uno spazio dei nomi, ClusterRole, ClusterRoleBinding e ConfigMap per l'agente CloudWatch e Fluent Bit.

2.    Dopo l'esecuzione del comando, esegui il comando seguente per creare l'account del servizio 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.    Esegui il comando seguente per convalidare l'implementazione dell'agente CloudWatch:

kubectl get pods -n amazon-cloudwatch

4.    Al termine, l'agente CloudWatch crea il gruppo di log /aws/containerinsights/cluster_name/performance. Quindi, l'agente CloudWatch invia gli eventi del log delle prestazioni al gruppo di log.

Risoluzione dei problemi

I pod Fluent Bit vengono arrestati in maniera anomala

1.    Controlla i messaggi di errore nei log del pod Fluent Bit. Esegui questi comandi per cercare gli eventi dai pod Fluent Bit:

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

kubectl -n amazon-cloudwatch describe pod fluent_pod pod_name

2.    Verifica che cluster-info (il file di configurazione Fluent Bit archiviato in ConfigMap) sia preciso e non contenga errori di sintassi. Assicurati che tutti i valori del nome del cluster e della regione siano impostati. Per ulteriori informazioni, consulta amazon-cloudwatch-container-insights sul sito Web di GitHub.

Fluent Bit non invia i log a CloudWatch

1.    Verifica che il plug-in di output sia impostato correttamente nel file di configurazione Fluent Bit. Per verificare se ci sono errori di trasferimento dei dati, utilizza il seguente comando per controllare i log del pod Fluent Bit:

kubectl -n amazon-cloudwatch logs fluent_pod_name

2.    Assicurati che i pod Fluent Bit dispongano delle autorizzazioni IAM necessarie per lo streaming dei log su CloudWatch. I nodi worker Amazon EKS inviano parametri e log a CloudWatch grazie alla policy CloudWatchAgentServerPolicy applicata da IAM. Esistono due modi per concedere le autorizzazioni IAM necessarie:

  • Aggiungere una policy ai ruoli IAM dei nodi worker.
  • Creare un ruolo IAM per gli account di servizio del cluster e inserire su di essi la policy.

Per ulteriori informazioni, consulta la sezione Configurazione di un ruolo IAM per l'account di servizio.

I pod Fluent Bit sono bloccati in CreateContainerConfigError

Se lo stato del pod è CreateContainerConfigError, esegui il seguente comando per ottenere il messaggio di errore esatto:

kubectl describe pod pod_name -n amazon-cloudwatch

Nella sezione Events (Eventi) dall'output del comando, cerca un messaggio di errore simile al seguente:

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

Se questo messaggio di errore è presente, è probabile che sia stata creata la ConfigMap per Fluent Bit (fluent-bit-config). Esegui nuovamente la procedura di installazione per assicurarti di creare ConfigMap.


Informazioni correlate

Configurazione dell'agente CloudWatch per raccogliere i parametri del cluster

Avvio rapido con l'agente CloudWatch e Fluent Bit

Abilitazione della registrazione di debug (sito Web GitHub)

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa