Registrazione Fargate
Amazon EKS su Fargate offre un router di registro integrato basato su Fluent Bit. Ciò significa che non esegui esplicitamente un container Fluent Bit come sidecar, ma Amazon lo gestisce per te. Tutto quello che devi fare è configurare il router di registro. 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
Una volta creato il ConfigMap
, Amazon EKS su Fargate lo rileva automaticamente e con esso configura il router di log. Fargate utilizza una versione di AWS per Fluent Bit, una distribuzione upstream conforme di Fluent Bit gestita da AWS. Per ulteriori informazioni, consultare AWS per Fluent Bit
Il router di log consente di utilizzare l'ampiezza dei servizi su AWS per l'analisi dei log e per l'archiviazione. É possibile trasmettere i log da Fargate direttamente ad Amazon CloudWatch, Amazon OpenSearch Service. É possibile anche trasmettere i log in destinazioni come Amazon S3, Amazon Kinesis Data Streams e gli strumenti partner tramite Amazon Kinesis Data Firehose.
Prerequisiti
-
Profilo Fargate esistente che specifichi uno spazio dei nomi Kubernetes esistente in cui si distribuiscono i pod di Fargate. Per ulteriori informazioni, consulta . Creazione di un profilo Fargate per il cluster.
-
Ruolo di esecuzione del pod Fargate esistente. Per ulteriori informazioni, consulta . Creazione di un ruolo di esecuzione del pod Fargate.
Configurazione del router di registro
Per configurare il router di registro
Nei passaggi che seguono, sostituire
con i propri valori.example-value
-
Creare uno spazio dei nomi Kubernetes dedicato denominato
aws-observability
.-
Salva nel tuo computer i seguenti contenuti in un file denominato
. Il valore peraws-observability-namespace
.yamlname
deve essereaws-observability
e l'etichettaaws-observability: enabled
è obbligatoria.kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled
-
Crea lo spazio dei nomi.
kubectl apply -f
aws-observability-namespace
.yaml
-
-
Crea una
ConfigMap
con valore dei datiFluent Conf
per spedire i log del container verso una destinazione. Fluent Conf è Fluent Bit, un linguaggio di configurazione del processore di log veloce e leggero che viene utilizzato per instradare i log del container verso una destinazione di log selezionata. Per ulteriori informazioni, consultare File di configurazionenella documentazione di Fluent Bit. Importante In una
Fluent Conf
tipica, le sezioni principali incluse sonoService
,Input
,Filter
eOutput
. Tuttavia, il router di log di Fargate accetta solo:-
Le sezioni
Filter
eOutput
e gestisce le sezioniService
eInput
autonomamente. -
Una sezione
Parser
.
Se si fornisce un'altra sezione rispetto a
Filter
,Output
eParser
, le sezioni vengono rifiutate.Quando si crea la
ConfigMap
, prendere in considerazione 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 infilters.conf
. È possibile avere uno o più[FILTER]
infilters.conf
. Anche le sezioni[OUTPUT]
e[PARSER]
dovrebbero essere specificate sotto le loro chiavi corrispondenti. Specificando più sezioni[OUTPUT]
, è possibile instradare i registritha a destinazioni diverse contemporaneamente. -
Fargate convalida le chiavi richieste per ogni sezione.
Name
ematch
sono necessari per ogni[FILTER]
e[OUTPUT]
.Name
eformat
sono necessari per ogni[PARSER]
. Le chiavi non fanno distinzione tra maiuscole e minuscole. -
Variabili di ambiente come
${ENV_VAR}
non sono ammesse nellaConfigMap
. -
La rientranza deve essere la stessa sia per la direttiva che per la coppia chiave-valore all'interno di ogni
filters.conf
,output.conf
eparsers.conf
. Le coppie di chiave-valore devono essere rientranti piuttosto che direttive. -
Fargate convalida in base ai seguenti filtri supportati:
grep
,parser
,record_modifier
,rewrite_tag
,throttle
,nest
,modify
ekubernetes
. -
Fargate convalida rispetto al seguente output supportato:
es
,firehose
,kinesis_firehose
,cloudwatch
,cloudwatch_logs
,kinesis
ekubernetes
. -
Almeno un plug-in
Output
supportato deve essere fornito nellaConfigMap
per abilitare la registrazione.Filter
eParser
non sono necessari per abilitare la registrazione.
È possibile 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 Amazon EKS Fargate non supporta la configurazione dinamica di
ConfigMaps
. Eventuali modifiche aConfigMaps
vengono applicate solo ai nuovi pod. Le modifiche non vengono applicate ai pod esistenti.Creazione di un
ConfigMap
utilizzando l'esempio per la destinazione del registro desiderata. -
-
Creare una policy IAM utilizzando il file della policy scaricato nel passaggio precedente.
aws iam create-policy --policy-name
eks-fargate-logging-policy
--policy-document file://permissions.json -
Collegare la policy IAM al ruolo di esecuzione del pod specificato per il profilo Fargate. Sostituire
con l'ID del proprio account.111122223333
aws iam attach-role-policy \ --policy-arn arn:aws:iam::
111122223333
:policy/eks-fargate-logging-policy
\ --role-nameyour-pod-execution-role
Supporto filtri Kubernetes
Questa funzionalità richiede la versione minima di Kubernetes e il livello della piattaforma seguenti o versioni successive. Sono supportate anche tutte le versioni Kubernetes e della piattaforma successive a quelle elencate.
Versione di Kubernetes | Livello della piattaforma |
---|---|
1.21 | eks.3 |
1.20 | eks.3 |
1.19 | eks.7 |
1.18 | eks.9 |
1,17 | eks.10 |
Il filtro Fluent Bit Kubernetes consente di aggiungere metadati Kubernetes ai file di log. Per ulteriori informazioni sul filtro, consultare Kubernetes
filters.conf: | [FILTER] Name kubernetes Match kube.* Merge_Log On Buffer_Size 0 Kube_Meta_Cache_TTL
300
s
-
Kube_URL
,Kube_CA_File
,Kube_Token_Command
eKube_Token_File
sono parametri di configurazione di proprietà del servizio e non devono essere specificati. Amazon EKS Fargate popola questi valori. -
Kube_Meta_Cache_TTL
è il momento in cui Fluent Bit attende il momento in cui comunica al server API i metadati più recenti. SeKube_Meta_Cache_TTL
non è specificato, Amazon EKS Fargate aggiunge un valore predefinito di 30 minuti per ridurre il carico sul server API, poiché Fluent Bit comunica con il server API per ottenere i metadati più recenti.
Per spedire i log dei processi Fluent-bit al tuo account
È possibile spedire i log dei processi di Fluent Bit ad Amazon CloudWatch utilizzando la seguente ConfigMap
. Sostituisci
con la Regione AWS.region-code
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 registri si trovano nella Regione AWS in cui si trova il cluster in CloudWatch. Il nome del gruppo di log è
e il nome del flusso di log Fluent Bit è my-cluster
-fluent-bit-logsfluent-bit-
.podname
-pod-namespace
-
I log dei processi vengono spediti solo quando il processo Fluent Bit viene avviato correttamente. Se si verifica un errore durante l'avvio di Fluent Bit, i log di processo vengono mancati. È possibile spedire i log di processo 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. Il mancato avvio di Fluent Bit solitamente è dovuto al fatto che laConfigMap
non viene analizzata o accettata da Fluent Bit durante l'avvio.
Applicazione di prova
-
Implementa un pod di esempio.
-
Salva nel tuo computer i seguenti contenuti in un file denominato
.sample-app
.yamlapiVersion: 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 -
Applica il file manifesto al cluster.
kubectl apply -f
sample-app
.yaml
-
-
Visualizza i log NGINX utilizzando la/le destinazione/i configurata/e nel
ConfigMap
.
Considerazioni sulle dimensioni
Si consiglia di pianificare fino a 50 MB di memoria per il router del registro. Se si prevede che l'applicazione generi registri a velocità effettiva molto elevata, è necessario pianificarla fino a 100 MB.
Risoluzione dei problemi
Per confermare se la caratteristica di registrazione è abilitata o disabilitata per qualche motivo, ad esempio per una ConfigMap
non valida, e perché questa non è valida, controllare gli eventi pod con
. L'output potrebbe includere eventi pod che chiariscono se la registrazione è abilitata o meno, ad esempio l'output di esempio seguente.kubectl describe pod
pod_name
... 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
Gli eventi pod sono effimeri, con un periodo di tempo che dipende dalle impostazioni. È inoltre possibile visualizzare le annotazioni di un pod utilizzando
. Nell'annotazione del pod, è possibile sapere se, e per quale motivo, la caratteristica di registrazione è abilitata o disabilitata.kubectl describe pod
pod-name