O Metricbeat é um agente leve que coleta e envia métricas de seus sistemas e serviços para o Elasticsearch ou Logstash. Ele oferece informações valiosas sobre a saúde e o desempenho da sua infraestrutura, sendo uma ferramenta essencial para monitoramento e observabilidade. Ao final deste tutorial, você terá o Metricbeat configurado e em funcionamento, permitindo monitorar seus clusters EKS de forma eficaz.
Criação de um bucket S3 para exportar arquivos com a coleta de métricas do K8s #
Criar um bucket com as configurações padrão do S3: #
Exemplo:
NOTA : Esse bucket armazenará os arquivos exportados e com as métricas de clusters EKS
coletadas pelo componente do metricbeat (configurações dos passos 3 e 4).
Configure as permissões do bucket S3. #
Referência: https://docs.aws.amazon.com/eks/latest/userguide/s3-csi.html#s3-create-iam-policy
Crie uma IAM policy para obter acesso ao bucket criado anteriormente e efetuar as
operações de filesystem no bucket.
Exemplo da policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MountpointBucketAccess",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::NOME_DO_BUCKET"
]
},
{
"Sid": "MountpointFullObjectAccess",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::NOME_DO_BUCKET/*"
]
}
]
}
Habilitar Add-ons de integração no cluster EKS. #
Add-on Amazon EBS CSI Driver no cluster #
Exemplo usando o eksctl:
eksctl create addon \
--name aws-ebs-csi-driver \
--cluster <NOME_DO_CLUSTER> \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--version 1.30.0 \
--force \
--profile=<SEU_PROFILE>
Criar o service account e vincular com o IAM role para o funcionamento do S3
CSI Driver no cluster #
Referência: https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html
Exemplo usando eksctl:
eksctl create iamserviceaccount \
--name s3-csi-driver-sa \
--namespace kube-system \
--cluster <NOME_DO_CLUSTER> \
--attach-policy-arn arn:aws:iam::<ID_DA_CONTA>:policy/my-s3-csi-driver-policy \
--approve \
--role-name my-s3-csi-driver-role \
--region <SUA_REGIAO> \
--role-only \
--profile=<SEU_PROFILE>
OBS:
- my-s3-csi-driver-policy: nome dado para a policy anteriormente criada no passo 1.2
- my-s3-csi-driver-role: um nome inserido no parâmetro –role-name
obrigatório para que seja criado o service account com o IAM role vinculado e com a policy
criada no passo 1.2 anexada.
Add-on Mountpoint for Amazon S3 CSI Driver no cluster #
Instale versão v1.5.1 ou superior. Selecione na instalação o IAM role criado anteriormente no passo 2.2.
Exemplo utilizando eksctl:
eksctl create addon \
--name aws-mountpoint-s3-csi-driver \
--cluster <NOME_DO_CLUSTER> \
--service-account-role-arn arn:aws:iam::<ID_DA_CONTA>:role/<NOME_DA_ROLE> \
--version 1.5.1 \
--force \
--profile=<SEU_PROFILE>
OBS: <NOME_DA_ROLE> criada no passo 2.2
Configure o deployment do Metricbeat com a exportação de arquivos pro bucket S3. #
Deployment do kube-state-metrics #
Obtenha o template do kube-state-metrics e efetue o deployment:
https://kube-state-metrics-template.s3.amazonaws.com/kube-state-metrics-template.yml
Deployment do Metricbeat #
Obtenha o template do metricbeat:
Ajustar manualmente os seguintes parâmetros no template:
- <REGIAO_DO_BUCKET>: região que está o bucket
- <NOME_DO_BUCKET>: nome do bucket para a integração e exportação dos arquivos
Ajuste o parâmetro – prefix para: eks/<SUA_REGIAO>/<NOME_DO_CLUSTER/
Esse template já está preparado para criação de objetos no cluster para o funcionamento do
Metricbeat:
- Persistent Volume e Persistent Volume Claim – parametrizados anteriormente com o
bucket S3 para a integração; - ServiceAccount – será usado na execução do serviço do metricbeat;
- ClusterRole – configurações das APIs do k8s e objetos – somente leitura;
- Roles e ClusterRoleBinding – configurações complementares para leitura das APIs do k8s
no metricbeat; - ConfigMaps – parâmetros e configurações de integração do metricbeat com o kubernetes;
- DaemonSet – serviço do metricbeat que coletar as métricas e exportar os arquivos pro
bucket S3.
Implante o Metricbeat e verifique a exportação. #
Siga com o deployment do Metricbeat no cluster após aplicar as configurações. Após o
deploy, é importante conferir se o componente está coletando as métricas e exportando para o
bucket de integração do S3:
Verifique se os pods do Metricbeat estão em execução. #
Exemplo:
kubectl get pods -n kube-system -o wide
NOTA : o Metricbeat fará upload de um pod por nó para coletar métricas
Verifique os logs do pod para ver se os eventos de coleta de métricas estão sendo gerados. #
Exemplo:
Verifique se, após alguns minutos de execução do pod, os arquivos estão sendo exportados para o bucket de integração do S3: #
Exemplo:
- <NOME_DO_BUCKET> : nome do bucket
- <NOME_DO_CLUSTER_PREFIX> : nome do cluster, conforme as configurações do prefix no passo 3.2
- <NOME_DO_NODE> : nome do node em que o pod que exportou a métrica está sendo executado
Exportação de arquivos #
Devido às limitações do Metricbeat, apenas 1024 arquivos de log são preservados. Para que o sistema funcione corretamente, pelo menos os arquivos dos últimos 7 dias devem ser preservados – recomendamos, no entanto, que sejam mantidos por pelo menos 35 dias.
Como a configuração disponível é por tamanho e não por tempo, recomendamos o seguinte:
- Deixe a configuração padrão (que é 10 MB por arquivo) por 1 dia;
- Após exatamente 24 horas, verifique o número de arquivos gerados:
- Se mais de 145 arquivos foram gerados, informe-nos, pois o bucket não reterá os arquivos por uma semana;
- Se 29 ou mais arquivos foram gerados, sua configuração é adequada;
- Caso o número de arquivos seja menor que 29, aplique a seguinte fórmula:
TAMANHO_ARQUIVO = 10240 / 29 * QUANTIDADE
Por exemplo, se 5 arquivos foram gerados:
TAMANHO_ARQUIVO = 10240 / 29 * 5 = 1765
Portanto, dentro do arquivo metricbeat-deployment-template-eks-s3.yml, configure data -> metricbeat.yml: -> output.file -> rotate_every_kb com valor de 1765 em vez de 10240.