Search
Close this search box.
View Categories

Como instalar o componente Metricbeat em clusters GKE

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 GKE de forma eficaz.

Criação de um bucket no Cloud Storage para exportação de arquivos com a coleta de métricas do K8s #

Criar um bucket conforme configurações desejadas no Cloud Storage:  #

Configurar bucket com “uniform-bucket-level-access” – nível de acesso do bucket com IAM ref: 

https://cloud.google.com/storage/docs/uniform-bucket-level-access#should-you-use

Exemplo gcloud: 

gcloud storage buckets create gs://<NOME_DO_NOVO_BUCKET> --project=<SEU_PROJECT_ID> --default-storage-class=STANDARD --location=<SUA_REGIAO> --uniform-bucket-level-access 

Esse bucket armazenará os arquivos exportados e com as métricas de clusters GKE coletadas pelo componente do metricbeat (configurações dos passos 3 e 4) 

Configurar permissões do bucket.  #

Obter o service account do cluster para as configurações de acesso do IAM ao bucket: Exemplo utilizando gcloud: 

gcloud container clusters describe <NOME_DO_CLUSTER> --region <REGIAO_ZONE_DO_CLUSTER> --format 'json(serviceaccount, nodeConfig.serviceAccount)' 
  • <REGIAO_ZONE_DO_CLUSTER>: região do cluster – dependendo do Location type – exemplo: us-east1 ou us-east1-c 

Exemplo do output: 

{ 
"nodeConfig": { 
"serviceAccount": 
"(NOME_DO_SERVICE_ACCOUNT)@PROJECT_ID.iam.gserviceaccount.com" } 
}

Adicionar a permissão do role “storage.objectAdmin” no service account. ref:  #

https://cloud.google.com/storage/docs/access-control/iam-roles#:~:text=Storage%20Object%20Admin 

Exemplo utilizando gcloud: 

gcloud storage buckets add-iam-policy-binding gs://<NOME_DO_NOVO_BUCKET> --role "roles/storage.objectAdmin" --member 
"serviceAccount:<NOME_SERVICE_ACCOUNT>@<SEU_PROJECT_ID>.iam.gserviceacco unt.com" 
  • <NOME_DO_NOVO_BUCKET>: bucket criado no passo 1.1. 
  • <NOME_SERVICE_ACCOUNT>: service account do cluster obtido pelo passo 1.2

Metadata do GKE  #

Adicionar metadata GKE_METADATA no cluster  #

Exemplo utilizando gcloud: 

gcloud container clusters update <NOME_DO_CLUSTER> --location=<REGIAO_ZONE_DO_CLUSTER> --workload-pool=<SEU_PROJECT_ID>.svc.id.goog 
  • <REGIAO_ZONE_DO_CLUSTER>: região do cluster – dependendo do Location type – exemplo: us-east1 ou us-east1-c 

Habilitar Add-ons de integração no cluster GKE.  #

Add-on GcsFuseCsiDriver no cluster  #

Exemplo utilizando gcloud: 

gcloud container clusters update <NOME_DO_CLUSTER> --update-addons GcsFuseCsiDriver=ENABLED --region <REGIAO_ZONE_DO_CLUSTER> 
  • <REGIAO_ZONE_DO_CLUSTER>: região do cluster – dependendo do Location type – exemplo: us-east1 ou us-east1-c

Configurar o deployment do metricbeat com a exportação de arquivos pro bucket no Cloud Storage.  #

Deployment do kube-state-metrics  #

Obter o template do kube-state-metrics e efetuar o deployment: 

https://kube-state-metrics-template.s3.amazonaws.com/kube-state-metrics-template.yml

Deployment do metricbeat  #

Obter o template do metricbeat: 

https://metricbeat-deployment-template-gke-gfuse-bucket.s3.amazonaws.com/metricbeat-de ployment-template-gke-bucket.yml 

Ajustar manualmente os seguintes parâmetros no template: 

  • <NOME_DO_BUCKET>: nome do bucket para a integração e exportação dos arquivos, criado no passo 1.1. 

Ajustar o parâmetro only-dir=gke/<SUA_REGIAO>/<NOME_DO_CLUSTER> 

  • <SUA_REGIAO>: região que está o cluster 
  • <NOME_DO_CLUSTER>: nome do cluster que o metricbeat vai coletar e enviar as métricas na integração. 

Esse template já está preparado para criação de objetos no cluster para o funcionamento do metricbeat: 

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

Service Account do Metricbeat  #

Por padrão, o nome do Service Account utilizado no deployment do passo 4.2 é metricbeat 

Vincular o Service Account do metricbeat com o service account do IAM para o acesso ao bucket de integração: 

Exemplo: 

gcloud iam service-accounts add-iam-policy-binding 
<NOME_SERVICE_ACCOUNT>@<SEU_PROJECT_ID>.iam.gserviceaccount.com --role roles/iam.workloadIdentityUser --member 
"serviceAccount:<SEU_PROJECT_ID>.svc.id.goog[kube-system/metricbeat]" 
  • <NOME_SERVICE_ACCOUNT>: service account do cluster obtido pelo passo 1.2

Permissões do bucket de integração com o Service Account do Metricbeat  #

Configurar o mesmo role / permissões de IAM para o bucket de integração no Service Account do metricbeat, vinculado no passo 4.3 

Exemplo: 

gcloud storage buckets add-iam-policy-binding gs://<NOME_DO_BUCKET> --role "roles/storage.objectAdmin" --member 
"serviceAccount:${PROJECT_ID}.svc.id.goog[kube-system/metricbeat]" 
  • <NOME_DO_BUCKET>: nome do bucket para a integração e exportação dos arquivos, criado no passo 1.1.

Verificar o deployment do metricbeat e conferir exportação.  #

Verificar se os pods do metricbeat estão rodando.  #

Exemplo: 

kubectl get pods -n kube-system -o wide 

OBS: O metricbeat irá subir um pod por node para coleta de métricas 

Verificar nos logs dos pods se os eventos de coleta de métricas estão sendo gerados.  #

Exemplo:

Verificar se após alguns minutos do pod rodando, se os arquivos estão sendo exportados pro bucket de integração:  #

Exemplo: 

  • <NOME_DO_BUCKET> : nome do bucket 
  • <SUA_REGIAO>: região inserida no prefix conforme passo 4.2; 
  • <NOME_DO_CLUSTER>: nome do cluster configurado no prefix passo 4.2
  • <NOME_DO_CLUSTER_PREFIX> : nome do cluster, conforme as configurações do prefix no passo 4.2 
  • <NOME_DO_NODE>: nome do node em que o pod que exportou a métrica está sendo executado 

Exportação de arquivos #

Devido à limitações do metricbeat, somente 1024 arquivos de log são preservados. Para o correto funcionamento do sistema, pelo menos os arquivos dos últimos 7 dias precisam ser preservados – recomendamos, porém, a guarda por 35 dias no mínimo. 

Como a configuração disponível é por tamanho e não por tempo, recomendamos o seguinte: 

  • Deixe a configuração padrão (que são 10mb por arquivo) durante 1 dia; – Após exatas 24h, verifique a quantidade de arquivos gerados: 
  • Caso tenham sido gerados mais de 145 arquivos, informe-nos pois o bucket não reterá arquivos por uma semana; 
  • Caso tenham sido gerados 29 ou mais, sua configuração está adequada; – Caso seja menor que 29, aplique a seguinte fórmula: 
TAMANHO_ARQUIVO = 10240 / 29 * QUANTIDADE 

Por exemplo, caso tenham sido gerados 5 arquivos: 

TAMANHO_ARQUIVO = 10240 / 29 * 5 = 1765 

Logo, dentro do arquivo metricbeat-deployment-template-gke-bucket.yml, configure em data -> metricbeat.yml:-> output.file -> rotate_every_kb valor de 1765 ao invés de 10240.