Ajudar a melhorar esta página
Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.
Iniciar o log do AWS Fargate para seu cluster
Importante
O AWS Fargate com o Amazon EKS não está disponível para a AWS GovCloud (Leste dos EUA) e AWS GovCloud (Oeste dos EUA).
O Amazon EKS no Fargate oferece um roteador de log integrado baseado no Fluent Bit. Isso significa que você não executa explicitamente um contêiner do Fluent Bit separadamente, mas a Amazon o executa para você. Tudo o que você precisa fazer é configurar o roteador de log. A configuração acontece por meio de um ConfigMap
que deve atender aos seguintes critérios:
-
Nomeado
aws-logging
-
Criado em um namespace dedicado chamado
aws-observability
-
Não pode exceder 5.300 caracteres.
Depois de criar o ConfigMap
, o Amazon EKS no Fargate o detecta automaticamente e configura o roteador de log com ele. O Fargate usa uma versão do AWS para Fluent Bit, uma distribuição do Fluent Bit upstream compatível e gerenciada pela AWS. Para obter mais informações, consulte AWS para Fluent Bit
O roteador de log permite que você use toda a variedade de serviços da AWS para análise de log e armazenamento. Você pode transmitir logs do Fargate diretamente para o Amazon CloudWatch, Amazon OpenSearch Service. Você também pode transmitir logs para destinos como Amazon S3
Pré-requisitos
-
Um perfil existente do Fargate que especifica um namespace existente do Kubernetes no qual você implanta Pods do Fargate. Para ter mais informações, consulte Etapa 3: criar um perfil do Fargate para o cluster.
-
Um perfil de execução de Pod do Fargate existente. Para ter mais informações, consulte Etapa 2: criar um perfil de execução de Pod do Fargate.
Configuração do roteador de log
Para configurar o roteador de log
Nas etapas a seguir, substitua todos os
por seus próprios valores.example value
-
Criar um namespace Kubernetes dedicado com o nome
aws-observability
.-
Salve o seguinte conteúdo no seu computador, em um arquivo chamado
: O valor paraaws-observability-namespace
.yamlname
deve seraws-observability
e o rótuloaws-observability: enabled
é obrigatório.kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled
-
Crie o novo namespace.
kubectl apply -f
aws-observability-namespace
.yaml
-
-
Crie um
ConfigMap
com um valor de dados doFluent Conf
para enviar logs de contêiner a um destino. Fluent Conf é o Fluent Bit, uma linguagem de configuração de processador de log rápida e leve usada para encaminhar logs de contêiner para um destino de sua escolha. Para obter mais informações, consulte Arquivo de configuração, na documentação do Fluent Bit. Importante
As principais seções incluídas em um
Fluent Conf
típico sãoService
,Input
,Filter
eOutput
. No entanto, o roteador de log do Fargate só aceita:-
As seções
Filter
eOutput
. -
Uma seção
Parser
.
Se você fornecer outras seções, elas serão rejeitadas.
O roteador de log do Fargate gerencia as seções
Input
eService
. Ele tem a seçãoInput
a seguir, que não pode ser modificada e não é necessária noConfigMap
. Porém, ela pode oferecer informações, como o limite do buffer de memória e a tag aplicada aos logs.[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.*
Ao criar o
ConfigMap
, leve em consideração as seguintes regras que o Fargate usa para validar os campos:-
[FILTER]
,[OUTPUT]
, e[PARSER]
devem ser especificados sob cada chave correspondente. Por exemplo, o[FILTER]
deve estar emfilters.conf
. Você pode ter um ou mais[FILTER]
s emfilters.conf
. As seções[OUTPUT]
e[PARSER]
também devem estar sob suas chaves correspondentes. Ao especificar várias seções[OUTPUT]
, você pode rotear os logs para destinos diferentes ao mesmo tempo. -
O Fargate valida as chaves necessárias para cada seção.
Name
ematch
são necessários para cada[FILTER]
e[OUTPUT]
.Name
eformat
são necessários para cada[PARSER]
. As chaves não diferenciam maiúsculas de minúsculas. -
Variáveis de ambiente como
${ENV_VAR}
não são permitidas noConfigMap
. -
O recuo tem que ser o mesmo para o par de diretivas ou chave-valor dentro de cada
filters.conf
,output.conf
eparsers.conf
. Pares chave-valor têm que ser recuados mais do que as diretivas. -
O Fargate valida de acordo com os seguintes filtros compatíveis:
grep
,parser
,record_modifier
,rewrite_tag
,throttle
,nest
,modify
ekubernetes
. -
O Fargate valida de acordo com os seguintes filtros compatíveis:
es
,firehose
,kinesis_firehose
,cloudwatch
,cloudwatch_logs
ekinesis
. -
É necessário fornecer pelo menos um plugin
Output
com suporte noConfigMap
para habilitar o registro.Filter
eParser
não são necessários para habilitar o registro.
Você também pode executar o Fluent Bit no Amazon EC2 usando a configuração desejada para solucionar quaisquer problemas decorrentes da validação. Crie o
ConfigMap
usando um dos exemplos a seguir.Importante
O registro em log do Fargate no Amazon EKS não oferece suporte para a configuração dinâmica de
ConfigMaps
. Quaisquer alterações nosConfigMaps
são aplicadas somente a novos Pods. As alterações não são aplicadas a Pods existentes.Crie um
ConfigMap
usando o exemplo para o destino de log desejado.nota
Você também pode usar o Amazon Kinesis Data Streams para seu destino de log. Se você usar o Kinesis Data Streams, verifique se a função de execução do pod recebeu a permissão
kinesis:PutRecords
. Para obter mais informações, consulte Definição de preço do Amazon Kinesis Data Streamsem Fluent Bit: Manual oficial. -
-
Crie uma política do IAM usando ao arquivo de política obtido por download em uma etapa anterior.
aws iam create-policy --policy-name
eks-fargate-logging-policy
--policy-document file://permissions.json -
Anexe a política do IAM à função de execução de pod especificada para o seu perfil do Fargate com o comando a seguir. Substitua
pelo ID da sua conta. Substitua111122223333
pelo seu perfil de execução de Pod (para saber mais, consulte Etapa 2: criar um perfil de execução de Pod do Fargate).AmazonEKSFargatePodExecutionRole
aws iam attach-role-policy \ --policy-arn arn:aws:iam::
111122223333
:policy/eks-fargate-logging-policy
\ --role-nameAmazonEKSFargatePodExecutionRole
Suporte ao filtro Kubernetes
Esse recurso requer a seguinte versão mínima do Kubernetes e de nível de plataforma, ou versões superiores:
Versão do Kubernetes | Nível da plataforma |
---|---|
1.23 e posteriores | eks.1 |
O filtro Fluent Bit Kubernetes permite adicionar metadados Kubernetes a arquivos de log. Para obter mais informações sobre o filtro, consulte Kubernetes
filters.conf: | [FILTER] Name kubernetes Match kube.* Merge_Log On Buffer_Size 0 Kube_Meta_Cache_TTL
300
s
Importante
-
Kube_URL
,Kube_CA_File
,Kube_Token_Command
eKube_Token_File
são parâmetros de configuração de propriedade do serviço e não devem ser especificados. O Amazon EKS Fargate preenche esses valores. -
Kube_Meta_Cache_TTL
é o tempo em que o Fluent Bit aguarda até se comunicar com o servidor de API para obter os metadados mais recentes. SeKube_Meta_Cache_TTL
não for especificado, o Amazon EKS Fargate acrescentará um valor padrão de 30 minutos para diminuir a carga no servidor de API.
Para enviar logs de processo do Fluent Bit para sua conta
Você pode enviar logs de processo do Fluent Bit para o Amazon CloudWatch usando o ConfigMap
a seguir. O envio de logs do processo Fluent Bit para o CloudWatch exige custos adicionais de ingestão e armazenamento de logs. Substitua
pela Região da AWS em que está o cluster.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
Os logs estão na Região da AWS em que o cluster se localiza no CloudWatch. O nome do grupo de logs é
, e o nome do fluxo de logs do Fluent Bit é my-cluster
-fluent-bit-logsfluent-bit-
.podname
-pod-namespace
nota
-
Os logs de processo são enviados somente quando o processo do Fluent Bit é iniciado corretamente. Caso haja uma falha ao iniciar o Fluent Bit, os logs do processo serão perdidos. Só é possível enviar logs de processo ao CloudWatch.
-
Para depurar o envio de logs de processo na sua conta, é possível aplicar o
ConfigMap
anterior para obter os logs de processo. A falha de inicialização do Fluent Bit geralmente ocorre porque seuConfigMap
não foi analisado ou aceito pelo Fluent Bit durante a inicialização.
Para interromper os registros do processo Fluent Bit de envio
O envio de logs do processo Fluent Bit para o CloudWatch exige custos adicionais de ingestão e armazenamento de logs. Para excluir registros do processo em uma configuração ConfigMap
existente, siga as etapas a seguir.
-
Localize o grupo de logs do CloudWatch criado automaticamente para os registros de logs do processo Fluent Bit do cluster do Amazon EKS, após ativar o registro do Fargate. Ele segue o formato
{cluster_name}-fluent-bit-logs
. -
Exclua os fluxos de log existentes do CloudWatch criados para os logs de processo de cada Pod's no grupo de logs do CloudWatch.
-
Edite
ConfigMap
e configureflb_log_cw: "false"
. -
Reinicie todos os Pods existentes no cluster.
Testar a aplicação
-
Implante uma Pod de exemplo.
-
Salve o seguinte conteúdo no seu computador, em um arquivo chamado
: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 -
Aplique o manifesto ao cluster.
kubectl apply -f
sample-app
.yaml
-
-
Visualize os logs do NGINX usando os destinos que você configurou no
ConfigMap
.
Considerações sobre tamanho
Sugerimos que você planeje até 50 MB de memória para o roteador de log. Se você espera que a aplicação gere logs com um throughput muito alto, planeje até 100 MB.
Solução de problemas
Para confirmar se o recurso de registro em log está habilitado ou desabilitado por algum motivo, como um ConfigMap
inválido, e por que ele é inválido, verifique os eventos do Pod com
. A saída pode incluir eventos do Pod que esclarecem se o registro em log está habilitado ou não, como a saída de exemplo a seguir.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
Os eventos do Pod são efêmeros, com um intervalo de tempo que depende das configurações. Você também pode visualizar as anotações de um Pod's usando
. A anotação do Pod informa se o recurso de registro em log está habilitado ou desabilitado e o motivo.kubectl describe pod
pod-name