Registo e monitorização de clusters anexados

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

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

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

  3. 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 o kubectl através do gcloud. Execute o seguinte comando para verificar se consegue aceder ao cluster associado através do kubectl.

    kubectl cluster-info
    

    Exemplo de saída:

    Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
    

Configuração

  1. 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
    
  2. Defina a variável do ID do projeto para o projeto onde registou o cluster.

    PROJECT_ID="your-project-id"
    
  3. 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
    
  4. 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

  1. Mude para o diretório logging/.

    cd logging/
    
  2. 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
    

  3. Em aggregator.yaml, em volumeClaimTemplates/spec, especifique o PersistentVolumeClaim storageClassName 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. O storageClassName adequado baseia-se no tipo de PersistentVolume (PV) aprovisionado por um administrador para o cluster através do StorageClass. 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
    
  4. Implemente o agregador e o encaminhador de registos no cluster.

    kubectl apply -f aggregator.yaml
    kubectl apply -f forwarder.yaml
    
  5. 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
    

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

  7. 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
    
  8. 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:

    Aceda ao Explorador de registos

  9. 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}"
    

Registos do cluster anexado

Instalar o agente de monitorização

  1. Navegue para fora do diretório logging/ e para o diretório monitoring/.

    cd ../monitoring
    
  2. Abra o prometheus.yaml. Em stackdriver-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]"
    
  3. No ficheiro prometheus.yaml, em volumeClaimTemplates/spec, descomente a linha storageClassName 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
    
  4. 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
    
  5. 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
    
  6. Obtenha os registos do contentor auxiliar 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"
    
  7. 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:

    Aceda ao Metrics Explorer

  8. 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á ver 1.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
    

Monitorização do cluster anexado

Limpar

  1. 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:

Saiba mais sobre o Cloud Monitoring: