Freigeben über


ALB Controller – Back-End-Integrität und Metriken

Für die Identifizierung von Problemen und Unterstützung bei der Problembehandlung ist es enorm wichtig, die Back-End-Integrität Ihrer Kubernetes-Dienste und -Pods zu verstehen. Um die Sichtbarkeit der Back-End-Integrität zu erleichtern, gibt der ALB Controller die Back-End-Integrität und Metrikenendpunkte in allen ALB Controller-Bereitstellungen frei.

Die Back-End-Integrität des ALB-Controllers macht drei verschiedene Dinge freigegeben:

  1. Zusammengefasster Back-End-Integrität durch Application Gateway für Containerressource
  2. Zusammengefasster Back-End-Integrität durch Kubernetes-Dienst
  3. Detaillierte Back-End-Integrität für einen angegebenen Kubernetes-Dienst

Der metrische Endpunkt des ALB Controllers gibt sowohl Metriken als auch eine Zusammenfassung der Back-End-Integrität frei. Dieser Endpunkt ermöglicht Freigabe an Prometheus.

Der Zugriff auf diese Endpunkte kann über folgende URLs erreicht werden:

  • Backend Health - http://<alb-controller-pod-ip>:8000/backendHealth
    • Ausgabe ist JSON-Format
  • Metrics - http://<alb-controller-pod-ip>:8001/metrics
    • Ausgabe ist Textformat

Alle Clients oder Pods, die über eine Verbindung mit diesem Pod und Port verfügen, können auf diese Endpunkte zugreifen. Um den Zugriff auf bestimmte Clients einzuschränken, empfehlen wir die Kubernetes-Netzwerkrichtlinien.

Back-End-Integrität

Ermitteln der Back-End-Integrität

Der ALB-Controller macht die Back-End-Integrität auf dem ALB-Controllerpod verfügbar, der als primärer Pod fungiert.

Führen Sie den folgenden Befehl aus, um den primären Pod zu ermitteln:

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

Für den indirekten Zugriff über das Kubectl-Hilfsprogramm können Sie einen Listener erstellen, der Datenverkehr über einen Proxy an den Pod leitet.

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

Sobald der Kubectl-Befehl lauscht, öffnen Sie ein weiteres Terminal (oder eine Cloud Shell-Sitzung), und führen Sie Curl für 127.0.0.1 aus, um Datenverkehr an den Pod umzuleiten.

curl http://127.0.0.1:8000

Beispielantwort:

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

Zusammengefasste Back-End-Integrität durch Application Gateway für Container

Diese Erfahrung fasst alle Kubernetes-Dienste mit Verweisen auf das Anwendungsgateway für Container und ihren entsprechenden Integritätsstatus zusammen.

Sie können auf diese zugreifen, indem Sie die Ressourcen-ID fürs Application Gateway für Container in der Abfrage der Anforderung an den ALB-Controller-Pod angeben.

Folgender Befehl kann verwendet werden, um die Back-End-Integrität für die angegebene Application Gateway for Containers-Ressource zu testen.

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

Beispielausgabe:

{
  "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
        }
      ]
    }
  ]
}

Zusammengefasster Back-End-Integrität durch Kubernetes-Dienst

Dieser Erfahrungswert sucht nach dem Integritätszusammenfassungsstatus eines bestimmten Diensts.

Sie können auf diesen Erfahrungswert zugrifen, indem Sie den Namen des Namespaces und Diensts sowie die Portnummer des Diensts im folgenden Format der Abfragezeichenfolge an den Alb-Controller-Pod angeben: <namespace>/<service/><service-port-number>

Der folgende Befehl kann zum Testen der Back-End-Integrität für den angegebenen Kubernetes-Dienst verwendet werden.

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

Beispielausgabe:

{
  "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
        }
      ]
    }
  ]
}

Detaillierte Back-End-Integrität für einen angegebenen Kubernetes-Dienst

Diese Erfahrung zeigt alle Endpunkte, aus denen der Dienst besteht, einschließlich des entsprechenden Integritätsstatus und der IP-Adresse. Der Endpunktstatus wird entweder als FEHLERFREI oder FEHLERHAFTgemeldet.

Sie können darauf zugreifen, indem Sie in der Abfragezeichenfolge an den ALB-Controller-Pod "detailed=true" eingeben.

Beispielsweise können wir die Integrität einzelner Endpunkte überprüfen, indem wir folgenden Befehl ausführen:

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

Beispielausgabe:

{
  "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"
              }
            }
          ]
        }
      ]
    }
  ]
}

metrics

Der ALB Controller zeigt derzeit Metriken nach textbasiertem Format an, die für Prometheus freigegeben werden. Der Zugriff auf diese Protokolle ist an Port 8001 des primären ALB-Controllerpods unter http://\<alb-controller-pod-ip\>:8001/metrics verfügbar.

Die folgenden Metriken werden derzeit verfügbar gemacht:

Metrikname Beschreibung
alb_connection_status Verbindungsstatus mit einem Anwendungsgateway für Containerressource
alb_reconnection_count Anzahl der erneuten Verbindungsversuche mit einem Anwendungsgateway für Containerressourcen
total_config_updates Anzahl der Dienstroutingkonfigurationsvorgänge
total_endpoint_updates Anzahl der Back-End-Poolkonfigurationsvorgänge
Bereitstellungen gesamt Anzahl der Anwendungsgateways für Containerressourcenbereitstellungen
total_endpoints Anzahl der Endpunkte in einem Dienst
total_healthy_endpoints Anzahl der fehlerfreien Endpunkte in einem Dienst
total_unhealthy_endpoints Anzahl der fehlerhaften Endpunkte in einem Dienst