Como gerar registros e monitorar clusters anexados

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

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

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

  3. 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 instalar kubectl por meio do gcloud. Execute o seguinte comando para verificar se é possível acessar o cluster anexado usando kubectl.

    kubectl cluster-info
    

    Exemplo de resultado:

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

Configuração

  1. 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
    
  2. Defina a variável do ID do projeto em que você registrou o cluster.

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

  1. Mude para o diretório logging/.

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

  3. Em aggregator.yaml, em volumeClaimTemplates/spec, especifique o PersistentVolumeClaim storageClassName 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. O storageClassName apropriado é baseado no tipo de PersistentVolume (PV) que foi provisionado por um administrador para o cluster usando StorageClass. 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
    
  4. Implantar o agregador de registros e o encaminhador para o cluster.

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

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

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

    Acessar o Explorador de registros

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

Registros para cluster anexado

Como instalar o agente do Monitoring

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

    cd ../monitoring
    
  2. Abra prometheus.yaml. Em stackdriver-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]"
    
  3. No prometheus.yaml, em volumeClaimTemplates/spec, remova o comentário do storageClassName 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
    
  4. 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
    
  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. 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"
    
  7. 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:

    Acessar o Metrics Explorer

  8. 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á o 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
    

Monitoramento para cluster anexado

Limpeza

  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
    

A seguir

Saiba mais sobre o Cloud Logging:

Saiba mais sobre o Cloud Monitoring: