- Criação de um bucket no Cloud Storage para exportação de arquivos com a coleta de métricas do K8s
- Metadata do GKE
- Habilitar Add-ons de integração no cluster GKE.
- Configurar o deployment do metricbeat com a exportação de arquivos pro bucket no Cloud Storage.
- Verificar o deployment do metricbeat e conferir exportação.
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:
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.