Partilhar via


ALB Controller - Integridade e métricas do back-end

Compreender a integridade do back-end de seus serviços e pods do Kubernetes é crucial para identificar problemas e ajudar na solução de problemas. Para ajudar a facilitar a visibilidade da integridade do back-end, o ALB Controller expõe a integridade do back-end e os pontos de extremidade de métricas em todas as implantações do ALB Controller.

A integridade do back-end do ALB Controller expõe três experiências diferentes:

  1. Integridade de back-end resumida pelo recurso Application Gateway for Containers
  2. Integridade de back-end resumida pelo serviço Kubernetes
  3. Integridade detalhada do back-end para um serviço Kubernetes especificado

O ponto de extremidade métrico do ALB Controller expõe métricas e resumo da integridade do back-end. Este parâmetro de avaliação permite a exposição ao Prometheus.

O acesso a esses pontos de extremidade pode ser acessado por meio dos seguintes URLs:

  • Estado de funcionamento do back-end - http://< alb-controller-pod-ip>:8000/backendHealth
    • A saída é o formato JSON
  • Métricas - http://< alb-controller-pod-ip>:8001/metrics
    • A saída é o formato de texto

Todos os clientes ou pods que tenham conectividade com esse pod e porta podem acessar esses endpoints. Para restringir o acesso, recomendamos o uso de políticas de rede do Kubernetes para restringir o acesso a determinados clientes.

Estado de Funcionamento do Back-end

Descobrindo a integridade do back-end

O controlador ALB expõe a integridade do back-end no pod do controlador ALB que está agindo como primário.

Para localizar o pod primário, execute o seguinte comando:

CONTROLLER_NAMESPACE='azure-alb-system'
kubectl get lease -n $CONTROLLER_NAMESPACE alb-controller-leader-election -o jsonpath='{.spec.holderIdentity}' | awk -F'_' '{print $1}'

Para acesso indireto via utilitário kubectl, você pode criar um ouvinte que faz proxy de tráfego para o pod.

kubectl port-forward <pod-name> -n $CONTROLLER_NAMESPACE 8000 8001

Quando o comando kubectl estiver escutando, abra outro terminal (ou sessão de shell na nuvem) e execute curl para 127.0.0.1 para ser redirecionado para o pod.

curl http://127.0.0.1:8000

Resposta de exemplo:

Available paths:
Path: /backendHealth
Description: Prints the backend health of the ALB.
Query Parameters:
        detailed: if true, prints the detailed view of the backend health
        alb-id: Resource ID of the Application Gateway for Containers to filter backend health for.
        service-name: Service to filter backend health for. Expected format: \<namespace\>/\<service\>/\<service-port-number\>

Path: /
Description: Prints the help

Integridade de back-end resumida pelo Application Gateway for Containers

Esta experiência resume todos os serviços do Kubernetes com referências ao Application Gateway for Containers e seu status de integridade correspondente.

Essa experiência pode ser acessada especificando o ID do recurso Application Gateway for Containers na consulta da solicitação ao pod alb-controller.

O comando a seguir pode ser usado para investigar a integridade do back-end para o recurso especificado do Application Gateway for Containers.

curl http://\<alb-controller-pod-ip-address\>:8000/backendHealth?alb-id=/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz

Saída de exemplo:

{
  "services": [
    {
      "serviceName": "default/service-hello-world/80",
      "serviceHealth": [
        {
          "albId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz",
          "totalEndpoints": 1,
          "totalHealthyEndpoints": 1,
          "totalUnhealthyEndpoints": 0
        }
      ]
    },
    {
      "serviceName": "default/service-contoso/443",
      "serviceHealth": [
        {
          "albId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz",
          "totalEndpoints": 1,
          "totalHealthyEndpoints": 1,
          "totalUnhealthyEndpoints": 0
        }
      ]
    }
  ]
}

Integridade de back-end resumida pelo serviço Kubernetes

Essa experiência procura o status de resumo de integridade de um determinado serviço.

Essa experiência pode ser acessada especificando o nome do namespace, serviço e número da porta do serviço no seguinte formato da cadeia de caracteres de consulta para o pod alb-controller: <namespace>/<service>/<service-port-number>

O comando a seguir pode ser usado para investigar a integridade do back-end para o serviço Kubernetes especificado.

curl http://\<alb-controller-pod-ip-address\>:8000/backendHealth?service-name=default/service-hello-world/80

Saída de exemplo:

{
  "services": [
    {
      "serviceName": "default/service-hello-world/80",
      "serviceHealth": [
        {
          "albId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz",
          "totalEndpoints": 1,
          "totalHealthyEndpoints": 1,
          "totalUnhealthyEndpoints": 0
        }
      ]
    }
  ]
}

Integridade detalhada do back-end para um serviço Kubernetes especificado

Essa experiência mostra todos os pontos de extremidade que compõem o serviço, incluindo seu status de integridade e endereço IP correspondentes. O estado do parâmetro de avaliação final é reportado como SAUDÁVEL ou INSAUDÁVEL.

Essa experiência pode ser acessada especificando detailed=true na cadeia de caracteres de consulta para o pod alb-controller.

Por exemplo, podemos verificar a integridade de cada ponto de extremidade executando o seguinte comando:

curl http://\<alb-controller-pod-ip-address\>:8000/backendHealth?service-name=default/service-hello-world/80\&detailed=true

Saída de exemplo:

{
  "services": [
    {
      "serviceName": "default/service-hello-world/80",
      "serviceHealth": [
        {
          "albId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz",
          "totalEndpoints": 1,
          "totalHealthyEndpoints": 1,
          "totalUnhealthyEndpoints": 0,
          "endpoints": [
            {
              "address": "10.1.1.22",
              "health": {
                "status": "HEALTHY"
              }
            }
          ]
        }
      ]
    }
  ]
}

Métricas

ALB Controller atualmente apresenta métricas seguindo o formato baseado em texto para ser exposto ao Prometheus. O acesso a esses logs está disponível na porta 8001 do pod http://\<alb-controller-pod-ip\>:8001/metricsdo controlador alb primário.

As seguintes métricas são expostas hoje:

Nome da Métrica Description
alb_connection_status Status da conexão com um recurso do Application Gateway for Containers
alb_reconnection_count Número de tentativas de reconexão a um Application Gateway para recursos de contêineres
total_config_updates Número de operações de configuração de roteamento de serviço
total_endpoint_updates Número de operações de configuração do pool de back-end
total_deployments Número de implantações de recursos do Application Gateway for Containers
total_endpoints Número de pontos de extremidade em um serviço
total_healthy_endpoints Número de pontos de extremidade íntegros em um serviço
total_unhealthy_endpoints Número de pontos de extremidade não íntegros em um serviço