Inizia la AWS Fargate registrazione per il tuo cluster - Amazon EKS

Aiutaci a migliorare questa pagina

Vuoi contribuire a questa guida per l'utente? Scorri fino alla fine di questa pagina e seleziona Modifica questa pagina su GitHub. I tuoi contributi contribuiranno a rendere la nostra guida utente migliore per tutti.

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à.

Inizia la AWS Fargate registrazione per il tuo cluster

Importante

AWS Fargate con Amazon non EKS è disponibile negli AWS GovCloud Stati Uniti orientali e AWS GovCloud negli Stati Uniti occidentali.

Amazon EKS on Fargate offre un router di log integrato basato su Fluent Bit. Ciò significa che non si esegue esplicitamente un Fluent Bit container come sidecar, ma Amazon lo gestisce per te. Tutto quello che devi fare è configurare il router di log. La configurazione avviene attraverso un ConfigMap dedicato che deve soddisfare i seguenti criteri:

  • Deve essere denominato aws-logging

  • Creato in uno spazio dei nomi dedicato denominato aws-observability

  • Non può contenere più di 5.300 caratteri.

Una volta creatoConfigMap, Amazon EKS on Fargate lo rileva automaticamente e configura il log router con esso. Fargate utilizza una versione di for AWS Fluent Bit, una distribuzione conforme a monte di Fluent Bit gestita da. AWS Per ulteriori informazioni, vedere AWSFluent Bitsu GitHub.

Il log router consente di utilizzare l'ampia gamma di servizi AWS per l'analisi e l'archiviazione dei log. Puoi trasmettere i log da Fargate direttamente ad Amazon CloudWatch, Amazon OpenSearch Service. Puoi anche trasmettere i log verso destinazioni come Amazon S3, AmazonKinesis Data Streams e strumenti partner tramite Amazon Data Firehose.

Prerequisiti

Configurazione del router di log

Configurazione del router di log

Nelle fasi seguenti, sostituisci example value con i valori in tuo possesso.

  1. Crea un file dedicato Kubernetes namespace denominato. aws-observability

    1. Salva nel tuo computer i seguenti contenuti in un file denominato aws-observability-namespace.yaml. Il valore per name deve essere aws-observability e l'etichetta aws-observability: enabled è obbligatoria.

      kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled
    2. Crea lo spazio dei nomi.

      kubectl apply -f aws-observability-namespace.yaml
  2. Crea una ConfigMap con valore dei dati Fluent Conf per spedire i log del container verso una destinazione. Fluent Conf è Fluent Bit, che è un linguaggio di configurazione dell'elaboratore di log veloce e leggero utilizzato per indirizzare i log dei container verso una destinazione di log di tua scelta. Per ulteriori informazioni, consulta File di configurazione nel Fluent Bit documentazione.

    Importante

    In una Fluent Conf tipica, le sezioni principali incluse sono Service, Input, Filter e Output. Tuttavia, il router di log di Fargate accetta solo:

    • Le sezioni Filter e Output.

    • Una sezione Parser.

    Se fornisci altre sezioni, queste verranno rifiutate.

    Il router di log Fargate gestisce le sezioni Service e Input. Ha la sezione Input seguente, che non può essere modificata e non è necessaria nel tuo ConfigMap. Tuttavia, è possibile ricavarne informazioni, ad esempio il limite del buffer di memoria e il tag applicato per i log.

    [INPUT] Name tail Buffer_Max_Size 66KB DB /var/log/flb_kube.db Mem_Buf_Limit 45MB Path /var/log/containers/*.log Read_From_Head On Refresh_Interval 10 Rotate_Wait 30 Skip_Long_Lines On Tag kube.*

    Quando crei la ConfigMap, ricorda le seguenti regole utilizzate da Fargate per convalidare i campi:

    • [FILTER], [OUTPUT], e [PARSER] dovrebbero essere specificati sotto ogni chiave corrispondente. Ad esempio: [FILTER] deve essere in filters.conf. È possibile avere uno o più [FILTER] in filters.conf. Anche le sezioni [OUTPUT] e [PARSER] dovrebbero essere specificate sotto le chiavi corrispondenti. Specificando più sezioni [OUTPUT], è possibile instradare i registritha a destinazioni diverse contemporaneamente.

    • Fargate convalida le chiavi richieste per ogni sezione. Name e match sono necessari per ogni [FILTER] e [OUTPUT]. Name e format sono necessari per ogni [PARSER]. Le chiavi non fanno distinzione tra maiuscole e minuscole.

    • Variabili di ambiente come ${ENV_VAR} non sono ammesse nella ConfigMap.

    • La rientranza deve essere la stessa sia per la direttiva che per la coppia chiave-valore all'interno di ogni filters.conf, output.conf e parsers.conf. Le coppie chiave-valore devono essere rientranti piuttosto che direttive.

    • Fargate effettua la convalida in base ai seguenti filtri supportati: grep, parser, record_modifier, rewrite_tag, throttle, nest, modify e kubernetes.

    • Fargate effettua la convalida in base al seguente output supportato: es, firehose, kinesis_firehose, cloudwatch, cloudwatch_logs, e kinesis.

    • Nella ConfigMap deve essere fornito almeno un plug-in Output supportato per abilitare il logging. Filter e Parser non sono necessari per abilitare il logging.

    Puoi anche eseguire Fluent Bit su Amazon EC2 utilizzando la configurazione desiderata per risolvere eventuali problemi derivanti dalla convalida. Crea il ConfigMap utilizzando uno degli esempi seguenti.

    Importante

    La registrazione di Amazon EKS Fargate non supporta la configurazione dinamica di. ConfigMaps Eventuali modifiche a ConfigMaps vengono applicate a nuove Pods solo. Le modifiche non vengono applicate a quelle esistenti Pods.

    Crea un ConfigMap utilizzando l'esempio per la destinazione di log desiderata.

    Nota

    Puoi anche utilizzare Flusso di dati Amazon Kinesis come destinazione dei log. Se utilizzi Flusso di dati Kinesis, assicurati che al ruolo di esecuzione del pod sia stata concessa l'autorizzazione kinesis:PutRecords. Per ulteriori informazioni, consulta la pagina Autorizzazioni di Amazon Kinesis Data Streams nel Fluent Bit: Manuale ufficiale.

    CloudWatch

    Creazione di una ConfigMap per CloudWatch

    Sono disponibili due opzioni di output quando si utilizza CloudWatch:

    L'esempio seguente mostra come utilizzare il cloudwatch_logs plugin a cui inviare CloudWatch i log.

    1. Salva i contenuti seguenti in un file denominato aws-logging-cloudwatch-configmap.yaml. region-codeSostituiscilo con Regione AWS quello in cui si trova il tuo cluster. I parametri in [OUTPUT] sono obbligatori.

      kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability data: flb_log_cw: "false" # Set to true to ship Fluent Bit process logs to CloudWatch. filters.conf: | [FILTER] Name parser Match * Key_name log Parser crio [FILTER] Name kubernetes Match kube.* Merge_Log On Keep_Log Off Buffer_Size 0 Kube_Meta_Cache_TTL 300s output.conf: | [OUTPUT] Name cloudwatch_logs Match kube.* region region-code log_group_name my-logs log_stream_prefix from-fluent-bit- log_retention_days 60 auto_create_group true parsers.conf: | [PARSER] Name crio Format Regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>P|F) (?<log>.*)$ Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L%z
    2. Applica il manifesto al cluster.

      kubectl apply -f aws-logging-cloudwatch-configmap.yaml
    3. Scarica la CloudWatch IAM politica sul tuo computer. Puoi visualizzare la politica anche su GitHub.

      curl -O https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.json
    Amazon OpenSearch Service

    Per creare un OpenSearch servizio ConfigMap per Amazon

    Se desideri inviare log ad Amazon OpenSearch Service, puoi utilizzare es output, che è un plug-in scritto in C. L'esempio seguente mostra come utilizzare il plugin per inviare i log a OpenSearch.

    1. Salva i contenuti seguenti in un file denominato aws-logging-opensearch-configmap.yaml. Sostituisci ogni example value con i valori in tuo possesso.

      kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability data: output.conf: | [OUTPUT] Name es Match * Host search-example-gjxdcilagiprbglqn42jsty66y.region-code.es.amazonaws.com Port 443 Index example Type example_type AWS_Auth On AWS_Region region-code tls On
    2. Applica il manifesto al cluster.

      kubectl apply -f aws-logging-opensearch-configmap.yaml
    3. Scarica la OpenSearch IAM policy sul tuo computer. Puoi visualizzare la politica anche su GitHub.

      curl -O https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/amazon-elasticsearch/permissions.json

      Assicurati che il controllo OpenSearch degli accessi di Dashboards sia configurato correttamente. all_access roleIn OpenSearch Dashboards deve essere installato il Fargate Pod ruolo di esecuzione e ruolo mappatoIAM. La stessa mappatura deve essere eseguita per il ruolo security_manager. È possibile aggiungere i mapping precedenti selezionando Menu, Security, Roles, quindi selezionare i rispettivi ruoli. Per ulteriori informazioni, consulta Come posso risolvere i CloudWatch log in modo che vengano trasmessi al mio dominio Amazon ES? .

    Firehose

    Per creare un file ConfigMap per Firehose

    Sono disponibili due opzioni di output per l'invio dei log a Firehose:

    L'esempio seguente mostra come utilizzare il kinesis_firehose plugin per inviare log a Firehose.

    1. Salva i contenuti seguenti in un file denominato aws-logging-firehose-configmap.yaml. region-codeSostituiscilo con quello in Regione AWS cui si trova il tuo cluster.

      kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability data: output.conf: | [OUTPUT] Name kinesis_firehose Match * region region-code delivery_stream my-stream-firehose
    2. Applica il manifesto al cluster.

      kubectl apply -f aws-logging-firehose-configmap.yaml
    3. Scarica la IAM politica Firehose sul tuo computer. Puoi anche visualizzare la politica su. GitHub

      curl -O https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/kinesis-firehose/permissions.json
  3. Crea una IAM policy dal file di policy scaricato in un passaggio precedente.

    aws iam create-policy --policy-name eks-fargate-logging-policy --policy-document file://permissions.json
  4. Associate la IAM policy al ruolo di esecuzione del pod specificato per il vostro profilo Fargate con il seguente comando. Sostituisci 111122223333 con l'ID del tuo account. Sostituisci AmazonEKSFargatePodExecutionRole con il tuo Pod ruolo di esecuzione (per ulteriori informazioni, vedereFase 2: Creare un Fargate Pod ruolo di esecuzione).

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/eks-fargate-logging-policy \ --role-name AmazonEKSFargatePodExecutionRole

Kubernetes supporto per i filtri

Questa funzionalità richiede i seguenti requisiti minimi Kubernetes versione e livello di piattaforma, o versioni successive.

Kubernetes version Livello di piattaforma
1.23 e versioni successive eks.1

Il Fluent Bit Kubernetes il filtro ti consente di aggiungere Kubernetes metadati ai tuoi file di registro. Per ulteriori informazioni sul filtro, vedere Kubernetesnel Fluent Bit documentazione. È possibile applicare un filtro utilizzando l'endpoint API del server.

filters.conf: | [FILTER] Name kubernetes Match kube.* Merge_Log On Buffer_Size 0 Kube_Meta_Cache_TTL 300s
Importante
  • Kube_URL, Kube_CA_File, Kube_Token_Command e Kube_Token_File sono parametri di configurazione di proprietà del servizio e non devono essere specificati. Amazon EKS Fargate inserisce questi valori.

  • Kube_Meta_Cache_TTLè il momento Fluent Bit attende che comunichi con il API server i metadati più recenti. Se Kube_Meta_Cache_TTL non è specificato, Amazon EKS Fargate aggiunge un valore predefinito di 30 minuti per ridurre il carico sul server. API

Per spedire Fluent Bit elabora i log relativi al tuo account

Opzionalmente puoi spedire Fluent Bit elabora i log su Amazon CloudWatch utilizzando quanto segueConfigMap. La spedizione dei log di processo di Fluent Bit a CloudWatch richiede costi aggiuntivi di inserimento e archiviazione dei log. Sostituiscilo region-code con Regione AWS quello in cui si trova il tuo cluster.

kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: # Configuration files: server, input, filters and output # ====================================================== flb_log_cw: "true" # Ships Fluent Bit process logs to CloudWatch. output.conf: | [OUTPUT] Name cloudwatch Match kube.* region region-code log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true

I log si trovano nell'area in Regione AWS cui risiede il cluster. CloudWatch Il nome del gruppo di log è my-cluster-fluent-bit-logs e il Fluent Bit il nome del logstream èfluent-bit-podname-pod-namespace.

Nota
  • I log del processo vengono spediti solo quando Fluent Bit il processo viene avviato con successo. Se si verifica un errore durante l'avvio Fluent Bit, i registri del processo non vengono visualizzati. È possibile inviare i registri dei processi solo a. CloudWatch

  • Per eseguire il debug della spedizione dei log di processo sull’account, è possibile applicare la ConfigMap precedente per ottenere i log di processo. Fluent Bit il mancato avvio è in genere dovuto al fatto che ConfigMap non sei stato analizzato o accettato da Fluent Bit durante l'avvio.

Per interrompere la spedizione Fluent Bit registri di processo

Spedizione Fluent Bit i log di processo CloudWatch richiedono costi aggiuntivi di inserimento e archiviazione dei log. Per escludere i registri dei processii in una configurazione ConfigMap esistente, effettua le seguenti operazioni.

  1. Individua il gruppo di CloudWatch log creato automaticamente per il tuo EKS cluster Amazon Fluent Bit elabora i log dopo aver abilitato la registrazione Fargate. Segue il formato {cluster_name}-fluent-bit-logs.

  2. Elimina i flussi di CloudWatch log esistenti creati per ciascuno Pod's elabora i log nel gruppo di CloudWatch log.

  3. Modifica la ConfigMap e imposta flb_log_cw: "false".

  4. Riavvia quelli esistenti Pods nel cluster.

Applicazione di prova

  1. Distribuisci un campione Pod.

    1. Salva nel tuo computer i seguenti contenuti in un file denominato sample-app.yaml.

      apiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace: same-namespace-as-your-fargate-profile spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80
    2. Applica il file manifesto al cluster.

      kubectl apply -f sample-app.yaml
  2. Visualizza NGINX i log utilizzando le destinazioni configurate in. ConfigMap

Considerazioni sulle dimensioni

Si consiglia di pianificare fino a 50 MB di memoria per il router di log. Se prevedi che l'applicazione generi registri a velocità di trasmissione effettiva molto elevata, dovresti pianificarla fino a 100 MB.

Risoluzione dei problemi

Per confermare se la funzionalità di registrazione è abilitata o disabilitata per qualche motivo, ad esempio se non è valida e perché non è validaConfigMap, controlla il Pod eventi con. kubectl describe pod pod_name L'output potrebbe includere Pod eventi che chiariscono se la registrazione è abilitata o meno, come l'output di esempio seguente.

[...] Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND kubernetes.io/psp: eks.privileged [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning LoggingDisabled <unknown> fargate-scheduler Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found

Il Pod gli eventi sono effimeri con un periodo di tempo che dipende dalle impostazioni. Puoi anche visualizzare un Pod's annotazioni utilizzandokubectl describe pod pod-name. Nel Pod nell'annotazione, sono disponibili informazioni sull'attivazione o disattivazione della funzione di registrazione e sul motivo.