Esta página mostra como exportar registos e métricas de um cluster associado 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 telemetria ao nível do cluster de um cluster anexado para o Google Cloud, tem de implementar os seguintes agentes de exportação de código aberto no seu cluster:
- Agregador de registos do Stackdriver (stackdriver-log-aggregator-*). Um StatefulSet do Fluentd que envia registos para a API Cloud Logging (anteriormente Stackdriver Logging).
- Stackdriver Log Forwarder (stackdriver-log-forwarder-*). Um conjunto de daemons do Fluentbit que encaminha registos de cada nó do Kubernetes para o agregador de registos do Stackdriver.
- Stackdriver Metrics Collector (stackdriver-prometheus-k8s-*). Um StatefulSet do Prometheus, configurado com um contentor sidecar de exportação do Stackdriver, para enviar métricas do Prometheus para a API Cloud Monitoring (anteriormente Stackdriver Monitoring). O sidecar é outro contentor dentro do mesmo pod que lê as métricas que o servidor Prometheus armazena no disco e encaminha-as para a Cloud Monitoring API.
Pré-requisitos
Um Google Cloud projeto com a faturação ativada. Consulte o nosso guia de preços para saber mais sobre os custos das Cloud Operations.
Um cluster anexado, registado através deste guia. Execute o seguinte comando para verificar se o cluster está registado.
gcloud container fleet memberships list
Exemplo de saída:
NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
Um ambiente local a partir do qual pode aceder ao cluster e executar comandos
kubectl
. Consulte o início rápido do GKE para ver instruções sobre como instalar okubectl
através do gcloud. Execute o seguinte comando para verificar se consegue aceder ao cluster associado através dokubectl
.kubectl cluster-info
Exemplo de saída:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
Configuração
Clone o repositório de exemplo e navegue para 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 para o projeto onde registou o cluster.
PROJECT_ID="your-project-id"
Crie uma Google Cloud conta de serviço com autorizações para escrever métricas e registos nas APIs Cloud Monitoring e Cloud Logging. Vai adicionar a chave desta conta de serviço aos cargas de trabalho implementados na secção seguinte.
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 transfira uma chave JSON para a conta de serviço que acabou de criar e, em seguida, crie um segredo do Kubernetes no cluster com 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
Instalar o agente de registos
Mude para o diretório
logging/
.cd logging/
Abra o
aggregator.yaml
. Na parte inferior do ficheiro, defina as seguintes variáveis para o valor correspondente ao seu projeto e cluster:project_id [PROJECT_ID] k8s_cluster_name [CLUSTER_NAME] k8s_cluster_location [CLUSTER_LOCATION]
Pode encontrar a localização do cluster executando o seguinte comando com o nome de membro do cluster anexado e obtendo a localização apresentada 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 seu cluster: fornecemos valores predefinidos para o EKS e o AKS para que os possa descomentar conforme adequado. Se estiver a usar o EKS, esta opção égp2
. Para o AKS, édefault
.Se configurou uma classe de armazenamento do Kubernetes personalizada na AWS ou no Azure, quer usar uma classe de armazenamento não predefinida ou está a usar outro tipo de cluster em conformidade, pode adicionar o seu próprio
storageClassName
. OstorageClassName
adequado baseia-se no tipo de PersistentVolume (PV) aprovisionado por um administrador para o cluster através doStorageClass
. Pode saber mais acerca das classes de armazenamento e das classes de armazenamento predefinidas para outros fornecedores importantes do Kubernetes na documentação do Kubernetes.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Implemente o agregador e o encaminhador de registos no cluster.
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
Verifique se os pods foram iniciados. Deve ver 2 pods de agregador e 1 pod de encaminhamento por nó de trabalho do Kubernetes. Por exemplo, num cluster de 4 nós, deve esperar 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 registos do agregador e verifique se os registos estão a ser 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.
Implemente uma aplicação de teste no 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
Confirme se consegue ver os registos do cluster anexado no painel de controlo do Cloud Logging. Aceda ao Explorador de registos na Google Cloud consola:
No Explorador de registos, copie a consulta de exemplo abaixo para o campo Criador de consultas, substituindo
${your-cluster-name}
pelo nome do cluster. Clique em Executar consulta. Deverá ver os registos de clusters recentes apresentados em Resultados da consulta.resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
Instalar o agente de monitorização
Navegue para fora do diretório
logging/
e para o diretóriomonitoring/
.cd ../monitoring
Abra o
prometheus.yaml
. Emstackdriver-prometheus-sidecar/args
, defina as seguintes variáveis de acordo com o seu ambiente."--stackdriver.project-id=[PROJECT_ID]" "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]" "--stackdriver.generic.location=[CLUSTER_LOCATION]" "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
No ficheiro prometheus.yaml, em
volumeClaimTemplates/spec
, descomente a linhastorageClassName
que corresponde ao seu fornecedor de nuvem, conforme descrito em Instalar o agente de registo.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Implemente o StatefulSet stackdriver-prometheus, 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 registos do contentor auxiliar 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 a ser exportadas com êxito para o Cloud Monitoring. Aceda ao Explorador de métricas na Google Cloud consola:
Clique em Editor de consultas e, de seguida, copie o seguinte comando, substituindo
${your-project-id}
e${your-cluster-name}
pelas informações do seu projeto e cluster. Em seguida, clique em Executar consulta. 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 se segue?
Saiba mais sobre o Cloud Logging:
- Vista geral do Cloud Logging
- Usar o Explorador de registos
- Criar consultas para o Cloud Logging
- Crie métricas baseadas em registos