Registro e monitoramento de clusters anexados

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

  1. UM Google Cloud Projeto com faturamento habilitado. Consulte nosso guia de preços para saber mais sobre os custos do Cloud Operations.

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

  3. 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 instalar kubectl por meio do gcloud. Execute o comando a seguir para verificar se você consegue acessar o cluster conectado usando kubectl .

    kubectl cluster-info
    

    Exemplo de saída:

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

Configurar

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

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

  1. Mude para o diretório logging/ .

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

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

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

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

  7. 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
    
  8. Verifique se você consegue visualizar os logs do cluster conectado no painel do Cloud Logging. Acesse o Logs Explorer no Google Cloud console:

    Vá para o Logs Explorer

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

Logs para cluster anexado

Instalando o agente de monitoramento

  1. Saia do diretório logging/ e entre no diretório monitoring/ .

    cd ../monitoring
    
  2. Abra prometheus.yaml . Em stackdriver-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]"
    
  3. Em prometheus.yaml, em volumeClaimTemplates/spec , descomente o storageClassName 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
    
  4. 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
    
  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 logs do contêiner sidecar 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 Google Cloud console:

    Vá para o Metrics Explorer

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

Monitoramento para 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 vem a seguir?

Saiba mais sobre Cloud Logging:

Saiba mais sobre o monitoramento em nuvem: