Configura Fluent Bit come DaemonSet per inviare i log ai Logs CloudWatch - Amazon CloudWatch

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configura Fluent Bit come DaemonSet per inviare i log ai Logs CloudWatch

Le seguenti sezioni aiutano a implementare Fluent Bit per inviare i log dai contenitori ai Logs. CloudWatch

Differenze se stai già usando Fluentd

Se state già utilizzando Fluentd per inviare i log dai contenitori ai CloudWatch log, leggete questa sezione per vedere le differenze tra Fluentd e Fluent Bit. Se non stai già utilizzando Fluentd con Container Insights, puoi passare a Configurazione di Fluent Bit.

Offriamo due configurazioni predefinite per Fluent Bit:

  • Configurazione ottimizzata di Fluent Bit: una configurazione allineata con le best practice di Fluent Bit.

  • Configurazione compatibile con Fluentd: una configurazione il più possibile allineata al comportamento di Fluentd.

Nell'elenco seguente vengono illustrate in dettaglio le differenze tra Fluentd e ciascuna configurazione di Fluent Bit.

  • Differenze nei nomi dei flussi di log: se utilizzi la configurazione ottimizzata di Fluent Bit, i nomi dei flussi di log saranno diversi.

    In /aws/containerinsights/Cluster_Name/application

    • La configurazione ottimizzata di Fluent Bit invia i log a kubernetes-nodeName-application.var.log.containers.kubernetes-podName_kubernetes-namespace_kubernetes-container-name-kubernetes-containerID

    • Fluentd invia i log a kubernetes-podName_kubernetes-namespace_kubernetes-containerName_kubernetes-containerID

    In /aws/containerinsights/Cluster_Name/host

    • La configurazione ottimizzata di Fluent Bit invia i log a kubernetes-nodeName.host-log-file

    • Fluentd invia i log a host-log-file-Kubernetes-NodePrivateIp

    In /aws/containerinsights/Cluster_Name/dataplane

    • La configurazione ottimizzata di Fluent Bit invia i log a kubernetes-nodeName.dataplaneServiceLog

    • Fluentd invia i log a dataplaneServiceLog-Kubernetes-nodeName

  • I file di log kube-proxy e aws-node che Container Insights scrive si trovano in posizioni diverse. Nella configurazione di Fluentd, sono in /aws/containerinsights/Cluster_Name/application. Nella configurazione ottimizzata di Fluent Bit, sono in /aws/containerinsights/Cluster_Name/dataplane.

  • La maggior parte dei metadati ad esempio pod_name e namespace_name sono gli stessi in Fluent Bit e Fluentd, ma i seguenti sono diversi.

    • La configurazione ottimizzata Fluent Bit utilizza docker_id e Fluentd usa Docker.container_id.

    • Entrambe le configurazioni di Fluent Bit non utilizzano i seguenti metadati. Sono presenti solo in Fluentd: container_image_id, master_url, namespace_id e namespace_labels.

Configurazione di Fluent Bit

Per configurare Fluent Bit per raccogliere log dai container, puoi seguire le fasi in Configurazione rapida per Container Insights su Amazon EKS e Kubernetes o seguire le fasi in questa sezione.

Con entrambi i metodi, il IAM ruolo collegato ai nodi del cluster deve disporre di autorizzazioni sufficienti. Per ulteriori informazioni sulle autorizzazioni necessarie per gestire un EKS cluster Amazon, consulta Amazon EKS IAM Policies, Roles and Permissions nella Amazon EKS User Guide.

Nei passaggi seguenti, configuri Fluent Bit daemonSet per inviare i log ai Logs. CloudWatch Una volta completata questa fase, Fluent Bit crea i seguenti gruppi di log se non esistono già.

Importante

Se hai già configurato FluentD in Container Insights e FluentD non funziona come previsto (questo può succedere se usi containerd il runtime), devi disinstallarlo prima di installare DaemonSet Fluent Bit per evitare che FluentBit elabori i messaggi di registro degli errori FluentD. Altrimenti, è necessario disinstallare FluentD immediatamente dopo aver installato con successo Fluent Bit. La disinstallazione di Fluentd dopo l'installazione di Fluent Bit garantisce la continuità della registrazione durante questo processo di migrazione. È necessario solo uno tra Fluent Bit o FluentD per inviare i log ai Logs. CloudWatch

Nome del gruppo di log Origine del log

/aws/containerinsights/Cluster_Name/application

Tutti i file di log in /var/log/containers

/aws/containerinsights/Cluster_Name/host

I log da /var/log/dmesg, /var/log/secure e /var/log/messages

/aws/containerinsights/Cluster_Name/dataplane

I log in /var/log/journal per kubelet.service kubeproxy.service e docker.service.

Per installare Fluent Bit per inviare i log dai contenitori ai Logs CloudWatch
  1. Se non hai già uno spazio dei nomi chiamato amazon-cloudwatch, creane uno inserendo il seguente comando:

    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. Esegui il comando seguente per creare un ConfigMap nome cluster-info con il nome del cluster e la regione a cui inviare i log. Replace (Sostituisci) cluster-name e cluster-region con il nome e la regione del 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

    In questo comando, il FluentBitHttpServer per il monitoraggio dei parametri dei plugin è attivo per impostazione predefinita. Per disattivarlo, cambia la terza riga del comando in FluentBitHttpPort='' (stringa vuota) nel comando.

    Inoltre, per impostazione predefinita, Fluent Bit legge i file di log dalla coda e acquisisce solo i nuovi log dopo che è stato implementato. Se avere l'effetto contrario, imposta FluentBitReadFromHead='On' e raccoglierà tutti i log nel file system.

  3. Scarica e implementa il daemonset Fluent BIt nel cluster eseguendo uno dei seguenti comandi.

    • Se desideri la configurazione ottimizzata di Fluent Bit per computer Linux, esegui questo comando.

      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
    • Se desideri la configurazione ottimizzata di Fluent Bit per computer Windows, esegui questo comando.

      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
    • Se utilizzi computer Linux e desideri una configurazione Fluent Bit più simile a Fluentd, esegui questo comando.

      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
    Importante

    La configurazione del daemset Fluent Bit di default imposta il livello di registro suINFO, il che può comportare costi di ingestione dei log più elevati. CloudWatch Se si desidera ridurre il volume e i costi di acquisizione dei log, è possibile modificare il livello di registro in. ERROR

    Per ulteriori informazioni sulla riduzione del volume di log, consulta Riduzione del volume di log da Fluent Bit (facoltativo)

  4. Convalida l'implementazione immettendo il seguente comando. Ogni nodo deve avere un pod denominato fluent-bit-*.

    kubectl get pods -n amazon-cloudwatch

Le fasi precedenti creano le seguenti risorse nel cluster:

  • Un account di servizio denominato Fluent-Bit nello spazio dei nomi amazon-cloudwatch. Questo account di servizio viene utilizzato per eseguire Fluent Bit. daemonSet Per ulteriori informazioni, consulta Gestione degli account di servizio nella documentazione di riferimento di Kubernetes.

  • Un ruolo cluster denominato Fluent-Bit-role nello spazio dei nomi amazon-cloudwatch. Questo ruolo di cluster concede le autorizzazioni get, list e watch sui log di pod all'account di servizio Fluent-Bit. Per ulteriori informazioni, consulta APIPanoramica nel Kubernetes Reference.

  • Un ConfigMap nome Fluent-Bit-config nel namespace. amazon-cloudwatch ConfigMap Contiene la configurazione che deve essere utilizzata da Fluent Bit. Per ulteriori informazioni, consulta Configurare un pod per utilizzare a ConfigMap nella documentazione di Kubernetes Tasks.

Se si desidera verificare la configurazione di Fluent Bit, procedi come segue.

Verifica l'impostazione di Fluent Bit
  1. Apri la console all' CloudWatch indirizzo. https://console.aws.amazon.com/cloudwatch/

  2. Nel pannello di navigazione, selezionare Log groups (Gruppi di log).

  3. Assicurati di trovarti nella regione in cui è stato implementato Fluent Bit.

  4. Controlla l'elenco dei gruppi di log nella regione. Verrà visualizzato un codice analogo al seguente:

    • /aws/containerinsights/Cluster_Name/application

    • /aws/containerinsights/Cluster_Name/host

    • /aws/containerinsights/Cluster_Name/dataplane

  5. Passa a uno di questi gruppi di log e controlla Last Event Time (Ora ultimo evento) per i flussi di log. Se è recente rispetto a quando è stato implementato Fluent Bit, l'installazione viene verificata.

    Potrebbe esserci un leggero ritardo nella creazione del gruppo di log /dataplane. Questo è normale in quanto questi gruppi di log vengono creati solo quando Fluent Bit inizia a inviare i log per quel gruppo di log.

Supporto per log multi-linea

Per informazioni su come utilizzare Fluent Bit con log multi-linea, consulta le sezioni della documentazione di Fluent Bit riportate di seguito.

Riduzione del volume di log da Fluent Bit (facoltativo)

Per impostazione predefinita, inviamo i log delle applicazioni Fluent Bit e i metadati Kubernetes a. CloudWatch Se desideri ridurre il volume di dati a cui inviare CloudWatch, puoi impedire l'invio a una o entrambe queste fonti di dati. CloudWatch Se hai seguito i passaggi in questa pagina per configurare Fluent Bit, scarica il YAML file manifest di Kubernetes dal apply comando kubectl che hai eseguito in precedenza e modificalo con le modifiche, che puoi quindi riapplicare al tuo cluster. In alternativa, se utilizzi il EKS componente aggiuntivo Amazon CloudWatch Observability o il grafico Helm, consulta (Facoltativo) Configurazione aggiuntiva per informazioni sulla gestione della configurazione Fluent Bit utilizzando la configurazione avanzata del componente aggiuntivo o il diagramma Helm.

Per arrestare i log dell'applicazione Fluent Bit, rimuovi la sezione seguente dal file 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

Per evitare che i metadati di Kubernetes vengano aggiunti agli eventi di registro a cui vengono inviati CloudWatch, aggiungi i seguenti filtri alla sezione della configurazione Fluent Bit. application-log.conf Replace (Sostituisci) <Metadata_1> e i campi simili con gli identificatori di metadati effettivi.

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.

Risoluzione dei problemi

Se non vedi questi gruppi di log e stai cercando nella regione corretta, controlla i log dei daemonSet pod Fluent Bit per cercare l'errore.

Esegui il comando seguente e accertati che lo stato sia Running.

kubectl get pods -n amazon-cloudwatch

Se i log presentano errori relativi alle IAM autorizzazioni, controlla il IAM ruolo associato ai nodi del cluster. Per ulteriori informazioni sulle autorizzazioni necessarie per gestire un EKS cluster Amazon, consulta Amazon EKS IAM Policies, Roles and Permissions nella Amazon EKS User Guide.

Se lo stato del pod è CreateContainerConfigError, ottieni l'errore preciso eseguendo il seguente comando.

kubectl describe pod pod_name -n amazon-cloudwatch

Dashboard

Puoi creare un pannello di controllo per monitorare i parametri di ciascun plug-in in esecuzione. Puoi visualizzare i dati per i byte di input e output e per le velocità di elaborazione dei record, nonché gli errori di output e le percentuali di nuovi tentativi/fallimenti. Per visualizzare questi parametri, dovrai installare l' CloudWatch agente con la raccolta di metriche Prometheus per i cluster Amazon e Kubernetes. EKS Per ulteriori informazioni su come configurare il pannello di controllo, consulta Installa l' CloudWatch agente con la raccolta di metriche Prometheus sui cluster Amazon e Kubernetes EKS.

Nota

Prima di configurare questo pannello di controllo, è necessario impostare Container Insights per i parametri Prometheus. Per ulteriori informazioni, consulta la pagina Monitoraggio dei parametri di Container Insights Prometheus.

Per creare un pannello di controllo per i parametri Prometheus di Fluent Bit
  1. Crea variabili di ambiente, sostituendo i valori a destra nelle righe seguenti in modo che corrispondano all'implementazione.

    DASHBOARD_NAME=your_cw_dashboard_name REGION_NAME=your_metric_region_such_as_us-west-1 CLUSTER_NAME=your_kubernetes_cluster_name
  2. Crea il pannello di controllo eseguendo il comando seguente.

    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