Nesta página, mostramos como exportar registros e métricas de um cluster anexado para o Cloud Logging e o Cloud Monitoring.
Como funciona
A Observabilidade do Google Cloud é a solução de observabilidade integrada para Google Cloud. Para exportar a telemetria no nível do cluster de um cluster anexado para o Google Cloud, você precisa implantar os seguintes agentes de exportação de código aberto no seu cluster:
- Agregador de registros do Stackdriver (stackdriver-log-aggregator-*): um StatefulSet do Fluentd que envia registros para a API Cloud Logging (antigo Stackdriver Logging).
- Stackdriver Log Forwarder (stackdriver-log-forwarder-*). Um daemonset Fluentbit que encaminha registros de cada nó do Kubernetes para o agregador de registros do Stackdriver.
- Coletor de métricas do Stackdriver (stackdriver-prometheus-k8s-*): um StatefulSet do Prometheus, configurado com um contêiner de arquivo secundário de exportação do Stackdriver, para enviar métricas do Prometheus à API Cloud Monitoring (antigo Stackdriver Monitoring). O sidecar é outro contêiner dentro do mesmo pod que lê as métricas que o servidor do Prometheus armazena no disco e as encaminha para a API Cloud Monitoring.
Pré-requisitos
Ter um projeto do Google Cloud com o faturamento ativado. Consulte nosso guia de preços para saber mais sobre os custos do Cloud Operations.
Um cluster conectado registrado usando este guia. Execute o seguinte comando para verificar se o cluster está registrado.
gcloud container fleet memberships list
Exemplo de resultado:
NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
Um ambiente local a partir do qual você pode acessar seu cluster e executar comandos
kubectl
. Consulte o guia de início rápido do GKE para ver instruções sobre como instalarkubectl
por meio do gcloud. Execute o seguinte comando para verificar se é possível acessar o cluster anexado usandokubectl
.kubectl cluster-info
Exemplo de resultado:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
Configuração
Clone o repositório de amostra e navegue até o diretório deste guia.
git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/attached-logging-monitoring
Defina a variável do ID do projeto em que você registrou o cluster.
PROJECT_ID="your-project-id"
Crie uma conta de serviço do Google Cloud com permissões para gravar métricas e registros nas APIs Cloud Monitoring e Cloud Logging. Você adicionará a chave dessa conta de serviço às cargas de trabalho implantadas na próxima seção.
gcloud iam service-accounts create anthos-lm-forwarder gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/monitoring.metricWriter
Crie e faça o download de uma chave JSON para a conta de serviço que você acabou de criar. Depois, crie uma chave secreta do Kubernetes no cluster usando essa chave.
gcloud iam service-accounts keys create credentials.json \ --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com kubectl create secret generic google-cloud-credentials -n kube-system --from-file credentials.json
Como instalar o agente do Logging
Mude para o diretório
logging/
.cd logging/
Abra
aggregator.yaml
. Na parte inferior do arquivo, defina as seguintes variáveis como o valor correspondente ao seu projeto e cluster:project_id [PROJECT_ID] k8s_cluster_name [CLUSTER_NAME] k8s_cluster_location [CLUSTER_LOCATION]
Para encontrar o local do cluster, execute o comando a seguir com o nome da assinatura do cluster anexado e veja o local que aparece em
/locations/<location>
.gcloud container fleet memberships describe eks | grep name
Saída:
name: projects/my-project/locations/global/memberships/eks
Em
aggregator.yaml
, emvolumeClaimTemplates/spec
, especifique o PersistentVolumeClaimstorageClassName
para o cluster: fornecemos valores padrão para EKS e AKS para você remover a marca de comentário conforme apropriado. Se você estiver usando o EKS, esse valor serágp2
. Para AKS, serádefault
.Se você tiver configurado uma classe de armazenamento do Kubernetes personalizada no AWS ou no Azure, quiser usar uma classe de armazenamento não padrão ou estiver usando outro tipo de cluster em conformidade, poderá adicionar seu próprio
storageClassName
. OstorageClassName
apropriado é baseado no tipo de PersistentVolume (PV) que foi provisionado por um administrador para o cluster usandoStorageClass
. Saiba mais sobre as classes de armazenamento e as classes padrão de armazenamento de outros principais provedores do Kubernetes na documentação do Kubernetes.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Implantar o agregador de registros e o encaminhador para o cluster.
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
Verifique se os pods foram iniciados. Você verá dois pods de agregador e um pod de encaminhador por nó de worker do Kubernetes. Por exemplo, em um cluster de quatro nós, você verá quatro pods encaminhadores.
kubectl get pods -n kube-system | grep stackdriver-log
Saída:
stackdriver-log-aggregator-0 1/1 Running 0 139m stackdriver-log-aggregator-1 1/1 Running 0 139m stackdriver-log-forwarder-2vlxb 1/1 Running 0 139m stackdriver-log-forwarder-dwgb7 1/1 Running 0 139m stackdriver-log-forwarder-rfrdk 1/1 Running 0 139m stackdriver-log-forwarder-sqz7b 1/1 Running 0 139m
Receba registros de agregadores e verifique se os registros estão sendo enviados para o Google Cloud.
kubectl logs stackdriver-log-aggregator-0 -n kube-system
Saída:
2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
Implante um aplicativo de teste no cluster. Este é um servidor da Web HTTP básico com um loadgenerator.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
Verifique se você consegue ver os registros do cluster anexado no painel do Cloud Logging. Acesse o Explorador de registros no Console do Google Cloud:
No Explorador de registros, copie a consulta de amostra abaixo no campo Criador de consultas, substituindo
${your-cluster-name}
pelo nome do cluster. Clique em Executar consulta. Os registros recentes do cluster aparecerão em Resultados da consulta.resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
Como instalar o agente do Monitoring
Navegue para fora do diretório
logging/
e vá para o diretóriomonitoring/
.cd ../monitoring
Abra
prometheus.yaml
. Emstackdriver-prometheus-sidecar/args
, defina as variáveis a seguir para corresponder ao seu ambiente."--stackdriver.project-id=[PROJECT_ID]" "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]" "--stackdriver.generic.location=[CLUSTER_LOCATION]" "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
No prometheus.yaml, em
volumeClaimTemplates/spec
, remova o comentário dostorageClassName
que corresponde ao seu provedor de nuvem, conforme descrito em Como instalar o agente do Logging.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Implante o StatefulSet stackdriver-prometheus, configurado com o arquivo secundário do exportador, no cluster.
kubectl apply -f server-configmap.yaml kubectl apply -f sidecar-configmap.yaml kubectl apply -f prometheus.yaml
Verifique se o pod
stackdriver-prometheus
está em execução:watch kubectl get pods -n kube-system | grep stackdriver-prometheus
Saída:stackdriver-prometheus-k8s-0 2/2 Running 0 5h24m
Consiga os registros de contêiner de arquivo secundário do Stackdriver Prometheus para verificar se o pod foi iniciado.
kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
Saída:level=info ts=2020-11-18T21:37:24.819Z caller=main.go:598 msg="Web server started" level=info ts=2020-11-18T21:37:24.819Z caller=main.go:579 msg="Stackdriver client started"
Verifique se as métricas do cluster estão sendo exportadas com sucesso para o Cloud Monitoring. Acesse o Metrics Explorer no Console do Google Cloud:
Clique em Editor de consultas e copie o seguinte comando, substituindo
${your-project-id}
e${your-cluster-name}
pelas informações do seu projeto e cluster. Em seguida, clique em Run Query. Você verá o1.0.
fetch k8s_container | metric 'kubernetes.io/anthos/up' | filter resource.project_id == '${your-project-id}' && (resource.cluster_name =='${your-cluster-name}') | group_by 1m, [value_up_mean: mean(value.up)] | every 1m
Limpeza
Para remover todos os recursos criados neste guia:
kubectl delete -f logging kubectl delete -f monitoring kubectl delete secret google-cloud-credentials -n kube-system kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml rm -r credentials.json gcloud compute service-accounts delete anthos-lm-forwarder
A seguir
Saiba mais sobre o Cloud Logging:
- Visão geral do Cloud Logging
- Como usar a Análise de registros
- Como criar consultas para o Cloud Logging
- Criar métricas com base em registros