Sdílet prostřednictvím


Konfigurace místních metrik a protokolů pro místní bránu služby Azure API Management

PLATÍ PRO: Vývojářská verze | Prémiová verze

Tento článek obsahuje podrobnosti o konfiguraci místních metrik a protokolů pro bránu v místním prostředí nasazenou v clusteru Kubernetes. Informace o konfiguraci cloudových metrik a protokolů najdete v tomto článku.

Metodiky

Samo-hostovaná brána podporuje StatsD, což je jednotný protokol pro shromažďování a agregaci metrik. Tato část vás provede postupem nasazení StatsD do Kubernetes, konfigurací brány pro generování metrik prostřednictvím StatsD a monitorováním metrik pomocí Prometheus.

Nasadit StatsD a Prometheus do clusteru

Následující ukázková konfigurace YAML nasadí StatsD, Prometheus do clusteru Kubernetes, kde je nasazena brána v rámci vlastního hostingu. Vytvoří také službu pro každou z nich. Samohostovaná brána poté publikuje metriky do služby StatsD. K řídicímu panelu Prometheus se dostanete pomocí jeho služby.

Poznámka:

Následující příklad načítá image veřejného kontejneru z Docker Hubu. Nastavte tajný kód pro vyžádání změn pro ověření pomocí účtu Docker Hubu místo vytvoření anonymní žádosti o přijetí změn. Pokud chcete zvýšit spolehlivost při práci s veřejným obsahem, importujte a spravujte image v privátní službě Azure Container Registry. Zjistěte více o práci s veřejnými obrázky.

apiVersion: v1
kind: ConfigMap
metadata:
  name: sputnik-metrics-config
data:
  statsd.yaml: ""
  prometheus.yaml: |
    global:
      scrape_interval:     3s
      evaluation_interval: 3s
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
      - job_name: 'test_metrics'
        static_configs:
          - targets: ['localhost:9102']
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sputnik-metrics
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sputnik-metrics
  template:
    metadata:
      labels:
        app: sputnik-metrics
    spec:
      containers:
      - name: sputnik-metrics-statsd
        image: prom/statsd-exporter
        ports:
        - name: tcp
          containerPort: 9102
        - name: udp
          containerPort: 8125
          protocol: UDP
        args:
          - --statsd.mapping-config=/tmp/statsd.yaml
          - --statsd.listen-udp=:8125
          - --web.listen-address=:9102
        volumeMounts:
          - mountPath: /tmp
            name: sputnik-metrics-config-files
      - name: sputnik-metrics-prometheus
        image: prom/prometheus
        ports:
        - name: tcp
          containerPort: 9090
        args:
          - --config.file=/tmp/prometheus.yaml
        volumeMounts:
          - mountPath: /tmp
            name: sputnik-metrics-config-files
      volumes:
        - name: sputnik-metrics-config-files
          configMap:
            name: sputnik-metrics-config
---
apiVersion: v1
kind: Service
metadata:
  name: sputnik-metrics-statsd
spec:
  type: NodePort
  ports:
  - name: udp
    port: 8125
    targetPort: 8125
    protocol: UDP
  selector:
    app: sputnik-metrics
---
apiVersion: v1
kind: Service
metadata:
  name: sputnik-metrics-prometheus
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 9090
    targetPort: 9090
  selector:
    app: sputnik-metrics

Uložte konfigurace do souboru s názvem metrics.yaml. Pomocí následujícího příkazu nasaďte vše do clusteru:

kubectl apply -f metrics.yaml

Po dokončení nasazení spusťte následující příkaz, abyste zkontrolovali, zda jsou Pody spuštěné. Název vašeho podu se liší.

kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
sputnik-metrics-f6d97548f-4xnb7        2/2     Running   0          1m

Spusťte následující příkaz, abyste zkontrolovali, zda services běží. Poznamenejte si CLUSTER-IP a PORT služby StatsD, které použijete později. Můžete navštívit řídicí panel Prometheus pomocí jeho EXTERNAL-IP a PORT.

kubectl get services
NAME                         TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                      AGE
sputnik-metrics-prometheus   LoadBalancer   10.0.252.72   13.89.141.90    9090:32663/TCP               18h
sputnik-metrics-statsd       NodePort       10.0.41.179   <none>          8125:32733/UDP               18h

Nastavte bránu hostovanou na místě pro vysílání metrik

Teď, když jsou nasazeny StatsD i Prometheus, můžete aktualizovat konfigurace samoobslužné brány a začít generovat metriky prostřednictvím StatsD. Pomocí klíče telemetry.metrics.local v objektu ConfigMap nasazení samo-hostované brány povolíte nebo zakážete tuto funkci. Můžete také nastavit další možnosti. K dispozici jsou následující možnosti:

Pole Výchozí Popis
telemetry.metrics.local none Povolí protokolování prostřednictvím StatsD. Hodnota může být none, statsd.
telemetry.metrics.local.statsd.endpoint není k dispozici Určuje koncový bod StatsD.
telemetry.metrics.local.statsd.sampling není k dispozici Určuje vzorkovací frekvenci metrik. Hodnota může být mezi 0 a 1. Příklad: 0.5
měření.telemetrie.místní.statsd.formát-štítku není k dispozici Formát označování exportéru StatsD. Hodnota může být none, , libratodogStatsD, influxDB.

Tady je ukázková konfigurace:

apiVersion: v1
kind: ConfigMap
metadata:
    name: contoso-gateway-environment
data:
    config.service.endpoint: "<self-hosted-gateway-management-endpoint>"
    telemetry.metrics.local: "statsd"
    telemetry.metrics.local.statsd.endpoint: "10.0.41.179:8125"
    telemetry.metrics.local.statsd.sampling: "1"
    telemetry.metrics.local.statsd.tag-format: "dogStatsD"

Aktualizujte soubor YAML nasazení brány v místním prostředí s použitím předchozích konfigurací a proveďte změny pomocí následujícího příkazu:

kubectl apply -f <file-name>.yaml

Pokud chcete získat nejnovější změny konfigurace, restartujte nasazení brány pomocí následujícího příkazu:

kubectl rollout restart deployment/<deployment-name>

Zobrazení metrik

Teď, když jste nasadili a nakonfigurovali všechno, hlásí samostatně hostovaná brána metriky prostřednictvím StatsD. Prometheus pak získá metriky od StatsD. Pomocí EXTERNAL-IP a PORT služby Prometheus přejděte na řídicí panel Prometheus.

Proveďte několik volání rozhraní API prostřednictvím lokální brány. Pokud je všechno správně nakonfigurované, můžete zobrazit následující metriky:

Ukazatel Popis
celkový počet požadavků Počet požadavků rozhraní API v období
délka_trvání_požadavku_v_sekundách Počet milisekund od chvíle, kdy brána přijala požadavek, do chvíle odeslání úplné odpovědi.
žádost_trvání_backendu_vteřiny Počet milisekund strávených na celkových vstupně-výstupních operacích back-endu (připojování, odesílání a přijímání bajtů)
request_klient_doba_v_sekundách Počet milisekund strávených na celkových vstupně-výstupních operacích klienta (připojování, odesílání a přijímání bajtů)

Záznamy

Ve výchozím nastavení brána v místním prostředí odesílá protokoly do stdout a stderr. Protokoly můžete snadno zobrazit pomocí následujícího příkazu:

kubectl logs <pod-name>

Pokud nasadíte svou vlastnoručně spravovanou bránu ve službě Azure Kubernetes Service, můžete povolit službu Azure Monitor pro kontejnery, aby shromažďovala stdout a stderr z vašich úloh a zobrazovala protokoly v Log Analytics.

Brána v místním prostředí také podporuje mnoho protokolů, včetně localsyslog, rfc5424a journal. Následující tabulka shrnuje všechny podporované možnosti.

Pole Výchozí Popis
telemetry.logs.std text Umožňuje protokolování do standardních datových proudů. Hodnota může být none, , textjson
telemetry.logs.local auto Povolí místní protokolování. Hodnota může být none, , autolocalsyslog, rfc5424, journaljson
telemetry.logs.local.localsyslog.endpoint není k dispozici Určuje místní koncový bod syslogu. Podrobnosti naleznete v protokolech syslog v místním systému.
telemetry.logs.local.localsyslog.facility není k dispozici Určuje místní kód kanálu syslog. Příklad: 7
telemetry.logs.local.rfc5424.endpoint není k dispozici Určuje koncový bod RFC5424.
telemetry.logs.local.rfc5424.facility není k dispozici Určuje kód zařízení podle rfc5424. Příklad: 7
telemetry.logs.local.journal.endpoint není k dispozici Určuje koncový bod deníku.
telemetry.logs.local.json.endpoint 127.0.0.1:8888 Určuje koncový bod UDP, který přijímá data JSON: cestu k souboru, IP:port nebo název hostitele:port.

Tady je ukázková konfigurace místního protokolování:

    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: contoso-gateway-environment
    data:
        config.service.endpoint: "<self-hosted-gateway-management-endpoint>"
        telemetry.logs.std: "text"
        telemetry.logs.local.localsyslog.endpoint: "/dev/log"
        telemetry.logs.local.localsyslog.facility: "7"

Použití místního koncového bodu JSON

Známá omezení

  • Funkce místní diagnostiky podporuje až 3 072 bajtů datové části žádosti a odpovědi. Pokud velikost datové části překročí tento limit, může blok dat narušit formát JSON.

Použití místních protokolů syslogu

Konfigurace brány pro streamování protokolů

Pokud jako cíl protokolů použijete místní syslog, runtime musí umožnit streamování protokolů do cíle. Pro službu Azure Kubernetes Service musíte připojit svazek, který odpovídá cíli.

Vzhledem k následující konfiguraci:

apiVersion: v1
kind: ConfigMap
metadata:
    name: contoso-gateway-environment
data:
    config.service.endpoint: "<self-hosted-gateway-management-endpoint>"
    telemetry.logs.local: localsyslog
    telemetry.logs.local.localsyslog.endpoint: /dev/log

Protokoly streamování můžete snadno spustit do místního koncového bodu syslogu:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: contoso-deployment
  labels:
    app: contoso
spec:
  replicas: 1
  selector:
    matchLabels:
      app: contoso
  template:
    metadata:
      labels:
        app: contoso
    spec:
      containers:
        name: azure-api-management-gateway
        image: mcr.microsoft.com/azure-api-management/gateway:2.5.0
        imagePullPolicy: IfNotPresent
        envFrom:
        - configMapRef:
            name: contoso-gateway-environment
        # ... redacted ...
+       volumeMounts:
+       - mountPath: /dev/log
+         name: logs
+     volumes:
+     - hostPath:
+         path: /dev/log
+         type: Socket
+       name: logs

Používání místních protokolů syslog ve službě Azure Kubernetes Service (AKS)

Při konfiguraci místního syslogu ve službě Azure Kubernetes Service můžete protokoly prozkoumat dvěma způsoby:

Využívání protokolů z pracovních uzlů

Protokoly (logy) můžete snadno využívat získáním přístupu k pracovním uzlům:

  1. Vytvořte připojení SSH k uzlu (dokumentaci).
  2. Vyhledejte protokoly v části host/var/log/syslog.

Například můžete filtrovat všechny syslogy tak, aby zahrnovaly pouze ty z brány v místním prostředí:

$ cat host/var/log/syslog | grep "apimuser"
May 15 05:54:20 aks-agentpool-43853532-vmss000000 apimuser[8]: Timestamp=2023-05-15T05:54:20.0445178Z, isRequestSuccess=True, totalTime=290, category=GatewayLogs, callerIpAddress=141.134.132.243, timeGenerated=2023-05-15T05:54:20.0445178Z, region=Repro, correlationId=aaaa0000-bb11-2222-33cc-444444dddddd, method=GET, url="http://20.126.242.200/echo/resource?param1\=sample", backendResponseCode=200, responseCode=200, responseSize=628, cache=none, backendTime=287, apiId=echo-api, operationId=retrieve-resource, apimSubscriptionId=master, clientProtocol=HTTP/1.1, backendProtocol=HTTP/1.1, apiRevision=1, backendMethod=GET, backendUrl="http://echoapi.cloudapp.net/api/resource?param1\=sample"
May 15 05:54:21 aks-agentpool-43853532-vmss000000 apimuser[8]: Timestamp=2023-05-15T05:54:21.1189171Z, isRequestSuccess=True, totalTime=150, category=GatewayLogs, callerIpAddress=141.134.132.243, timeGenerated=2023-05-15T05:54:21.1189171Z, region=Repro, correlationId=bbbb1111-cc22-3333-44dd-555555eeeeee, method=GET, url="http://20.126.242.200/echo/resource?param1\=sample", backendResponseCode=200, responseCode=200, responseSize=628, cache=none, backendTime=148, apiId=echo-api, operationId=retrieve-resource, apimSubscriptionId=master, clientProtocol=HTTP/1.1, backendProtocol=HTTP/1.1, apiRevision=1, backendMethod=GET, backendUrl="http://echoapi.cloudapp.net/api/resource?param1\=sample"

Poznámka:

Pokud změníte kořen pomocí chroot, například chroot /host, pak musí předchozí cesta tuto změnu odrážet.