Esta página mostra como exportar logs e métricas de um cluster anexado para o Cloud Logging e o Cloud Monitoring.
Como funciona
O Google Cloud Observability é a solução de observabilidade integrada paraGoogle Cloud. Para exportar telemetria de nível de cluster de um cluster anexado para Google Cloud, você precisa implantar os seguintes agentes de exportação de código aberto no seu cluster:
- Agregador de Logs do Stackdriver (stackdriver-log-aggregator-*). Um StatefulSet Fluentd que envia logs para a API do Cloud Logging (antigo Stackdriver Logging).
- Encaminhador de Logs do Stackdriver (stackdriver-log-forwarder-*). Um daemonset Fluentbit que encaminha logs de cada nó do Kubernetes para o Agregador de Logs do Stackdriver.
- Coletor de Métricas do Stackdriver (stackdriver-prometheus-k8s-*). Um StatefulSet do Prometheus, configurado com um contêiner sidecar de exportação do Stackdriver, para enviar métricas do Prometheus para a API do Cloud Monitoring (antigo Stackdriver Monitoring). O sidecar é outro contêiner dentro do mesmo pod que lê as métricas armazenadas pelo servidor Prometheus em disco e as encaminha para a API do Cloud Monitoring.
Pré-requisitos
UM Google Cloud Projeto com faturamento habilitado. Consulte nosso guia de preços para saber mais sobre os custos do Cloud Operations.
Um cluster anexado, registrado usando este guia . Execute o seguinte comando para verificar se o seu cluster está registrado.
gcloud container fleet memberships list
Exemplo de saída:
NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
Um ambiente local de onde você pode acessar seu cluster e executar comandos
kubectl
. Consulte o guia de início rápido do GKE para obter instruções sobre como instalarkubectl
por meio do gcloud. Execute o comando a seguir para verificar se você consegue acessar o cluster conectado usandokubectl
.kubectl cluster-info
Exemplo de saída:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
Configurar
Clone o repositório de exemplo 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 ID do projeto para o projeto onde você registrou seu cluster.
PROJECT_ID="your-project-id"
Criar um Google Cloud Conta de serviço com permissões para gravar métricas e logs nas APIs de Monitoramento e Registro em Nuvem. Você adicionará a chave desta 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 baixe uma chave JSON para a conta de serviço que você acabou de criar e, em seguida, crie um segredo do Kubernetes no seu 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
Instalando o agente de registro
Mude para o diretório
logging/
.cd logging/
Abra
aggregator.yaml
. No final do arquivo, defina as seguintes variáveis com o valor correspondente ao seu projeto e cluster:project_id [PROJECT_ID] k8s_cluster_name [CLUSTER_NAME] k8s_cluster_location [CLUSTER_LOCATION]
Você pode encontrar a localização do seu cluster executando o seguinte comando com o nome de associação do cluster anexado e obtendo a localização 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 ostorageClassName
PersistentVolumeClaim para o seu cluster: fornecemos valores padrão para EKS e AKS para você descomentar conforme apropriado. Se estiver usando EKS, este égp2
. Para AKS, este édefault
.Se você configurou uma Classe de Armazenamento Kubernetes personalizada na AWS ou no Azure , deseja usar uma classe de armazenamento não padrão ou está usando outro tipo de cluster compatível, pode adicionar seu próprio
storageClassName
. OstorageClassName
apropriado é baseado no tipo de PersistentVolume (PV) provisionado por um administrador para o cluster usandoStorageClass
. Você pode descobrir mais sobre classes de armazenamento e as classes de armazenamento padrão para outros provedores importantes do Kubernetes na documentação do Kubernetes .# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Implante o agregador de log e o encaminhador no cluster.
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
Verifique se os pods foram inicializados. Você deverá ver 2 pods agregadores e um pod encaminhador por nó de trabalho do Kubernetes. Por exemplo, em um cluster de 4 nós, você deverá ver 4 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
Obtenha logs do agregador e verifique se os logs estão sendo enviados para 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 seu cluster. Este é um servidor web HTTP básico com um gerador de carga.
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 visualizar os logs do cluster conectado no painel do Cloud Logging. Acesse o Logs Explorer no Google Cloud console:
No Logs Explorer, copie a consulta de exemplo abaixo para o campo Query Builder , substituindo
${your-cluster-name}
pelo nome do seu cluster. Clique em Run query (Executar consulta) . Você deverá ver os logs recentes do cluster em Query results (Resultados da consulta) .resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
Instalando o agente de monitoramento
Saia do diretório
logging/
e entre no diretóriomonitoring/
.cd ../monitoring
Abra
prometheus.yaml
. Emstackdriver-prometheus-sidecar/args
, defina as seguintes variáveis 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]"
Em prometheus.yaml, em
volumeClaimTemplates/spec
, descomente ostorageClassName
que corresponde ao seu provedor de nuvem, conforme descrito em Instalando o agente de registro.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Implante o stackdriver-prometheus StatefulSet, configurado com o sidecar do exportador, no seu 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. Saída:watch kubectl get pods -n kube-system | grep stackdriver-prometheus
stackdriver-prometheus-k8s-0 2/2 Running 0 5h24m
Obtenha os logs do contêiner sidecar do Stackdriver Prometheus para verificar se o pod foi iniciado.
Saída:kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
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 Google Cloud console:
Clique em Editor de consultas e copie o comando a seguir, substituindo
${your-project-id}
e${your-cluster-name}
pelas informações do seu projeto e cluster. Em seguida, clique em Executar consulta . Você deverá ver1.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
Limpar
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
O que vem a seguir?
Saiba mais sobre Cloud Logging:
- Visão geral do Cloud Logging
- Usando o Logs Explorer
- Criando consultas para Cloud Logging
- Crie métricas baseadas em logs