Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Como faço para transmitir logs de contêineres para o CloudWatch no Amazon EKS?
Quero usar o Fluent Bit ou o Fluentd para transmitir logs de contêineres executados no Amazon Elastic Kubernetes Service (Amazon EKS) para o Amazon CloudWatch Logs.
Breve descrição
Como o Fluent Bit é a solução de log padrão do CloudWatch Container Insights, é uma prática recomendada usar o Fluent Bit em vez do Fluentd.A Amazon fornece uma imagem de contêiner do Fluent Bit no Amazon Elastic Container Registry (Amazon ECR). Para mais informações, consulte Repositórios de imagem da AWS para Fluent Bit para Amazon ECS.
Para baixar o Fluent Bit, consulte Introdução ao Fluent Bit no site do Fluent Bit. Para Fluentd, consulte Baixar Fluentd no site do Fluentd.
Quando você configura o Fluent Bit como um DaemonSet para enviar logs ao CloudWatch, o Fluent Bit cria os seguintes grupos e fontes de log:
- /aws/containerinsights/Cluster_Name/application: A fonte do log são todos os arquivos de log em /var/log/containers.
- /aws/containerinsights/Cluster_Name/host: A origem do log são os logs de /var/log/dmesg, /var/log/secure e /var/log/messages.
- /aws/containerinsights/Cluster_Name/dataplane: A fonte do log são os logs em /var/log/journal para kubelet.service, kubeproxy.service e docker.service.
Resolução
Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Transmitir logs de contêineres que são executados no Amazon EKS em um cluster do Amazon EC2
Conclua as etapas a seguir:
-
Para criar um namespace chamado amazon-cloudwatch, execute o seguinte 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 -
Para criar um ConfigMap chamado fluent-bit-cluster-info que inclui o nome do cluster e a região da AWS para a qual você deseja enviar logs, execute o seguinte 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' 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-cloudwatchObservação: substitua my-cluster-name e my-cluster-region pelo nome do cluster e região.
-
Para usar o Fluent Bit para enviar logs para um cluster do Amazon Elastic Compute Cloud (Amazon EC2), execute o seguinte comando DaemonSet:
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 -
(Opcional) Para usar o Fluent Bit no Amazon ECR, execute o seguinte comando aws-for-fluent-bit DaemonSet:
kubectl patch ds fluent-bit -n amazon-cloudwatch -p \'{"spec":{"template":{"spec":{"containers":[{"name":"fluent-bit","image":"public.ecr.aws/aws-observability/aws-for-fluent-bit:latest"}]}}}}' -
Para criar perfis do AWS Identity and Access Management para contas de serviço (IRSA), execute o seguinte comando eksctl:
eksctl create iamserviceaccount \ --name fluent-bit \ --namespace amazon-cloudwatch \ --cluster $CLUSTER \ --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \ --approve \ --override-existing-serviceaccountsPara mais informações, consulte Configurar o Fluent Bit como um DaemonSet para enviar logs para o CloudWatch Logs.
Solucionar problemas de implantação do FluentBit
Conclua as etapas a seguir:
-
Para listar os nomes dos pods no namespace amazon-cloudwatch, execute o seguinte comando:
kubectl get pods -n amazon-cloudwatchObservação: o nome do pod retorna como fluent-bit-*****.
-
Para verificar a saída dos eventos, execute o seguinte comando:
kubectl describe pod POD_NAME -n amazon-cloudwatchObservação: substitua POD_NAME pelo nome do seu pod.
-
Para verificar os logs, execute o seguinte comando:
kubectl logs pod-name -n amazon-cloudwatchObservação: substitua POD_NAME pelo nome do seu pod.
Excluir a implantação do Fluent Bit
Para excluir a implantação do Fluent Bit, execute os seguintes comandos:
kubectl delete configmap fluent-bit-cluster-info -n amazon-cloudwatch kubectl delete -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
Transmitir logs de contêineres executados no Amazon EKS em um cluster Fargate
O Amazon EKS em um cluster do AWS Fargate tem um roteador de log integrado baseado no Fluent Bit. A AWS executa automaticamente o Fluent Bit para você. Para mais informações, consulte Iniciar o registro em log do AWS Fargate para seu cluster.
Para transmitir logs de contêineres para o CloudWatch Logs, conclua as etapas a seguir:
-
Para criar um namespace do Kubernetes dedicado chamado aws-observability, execute o seguinte comando:
cat <<EOF > aws-observability-namespace.yaml kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled EOF kubectl apply -f aws-observability-namespace.yaml -
Para criar um ConfigMap com um valor de dados do FluentConf para transmitir os logs de contêiner para o CloudWatch Logs, execute o seguinte comando:
cat <<EOF > aws-logging-cloudwatch-configmap.yaml kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability data: output.conf: | [OUTPUT] Name cloudwatch_logs Match * region region-code log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true log_key log 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 filters.conf: | [FILTER] Name parser Match * Key_name log Parser crio EOF kubectl apply -f aws-logging-cloudwatch-configmap.yaml -
Crie uma política gerenciada pela AWS para o CloudWatch. Em seguida, anexe a política do IAM ao perfil de execução do pod que você especificou em seu perfil do Fargate.
Para baixar o arquivo de política do IAM, execute o seguinte comando:
curl -o permissions.json https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.jsonPara criar uma política do IAM a partir do arquivo de política, execute o seguinte comando create-policy:
aws iam create-policy --policy-name eks-fargate-logging-policy --policy-document file://permissions.jsonPara anexar a política do IAM ao perfil de execução do pod que você especificou no seu perfil do Fargate, execute o seguinte comando attach-role-policy:
aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/eks-fargate-logging-policy \ --role-name your-pod-execution-roleObservação: substitua 111122223333 pelo ID da sua conta.
Para mais informações, consulte Resolver problemas.
Desativar os logs de streaming do EKS nos pods Fargate
Para desativar os logs de streaming de seus pods EKS no Fargate, execute o seguinte comando:
kubectl delete namespace aws-observability
Exclua os pods e reimplante-os depois de excluir o namespace aws-observability.
- Idioma
- Português
