Dela via


Konfigurera lokala mått och loggar för en lokalt installerad Azure API Management-gateway

GÄLLER FÖR: Utvecklare | Premie

Den här artikeln innehåller information om hur du konfigurerar lokala mått och loggar för den lokala gateway som distribueras i ett Kubernetes-kluster. Information om hur du konfigurerar molnmått och loggar finns i den här artikeln.

Mätvärden

Den lokalt installerade gatewayen stöder StatsD, som är ett enande protokoll för insamling och aggregering av mått. Det här avsnittet går igenom stegen för att distribuera StatsD till Kubernetes, konfigurera gatewayen för att generera mått via StatsD och använda Prometheus för att övervaka måtten.

Distribuera StatsD och Prometheus till klustret

Följande YAML-exempelkonfiguration distribuerar StatsD och Prometheus till Kubernetes-klustret där en lokalt installerad gateway distribueras. Den skapar också en tjänst för var och en. Den lokalt installerade gatewayen publicerar sedan mått till StatsD Service. Du kommer åt Prometheus-instrumentpanelen via dess tjänst.

Anmärkning

I följande exempel hämtas offentliga containeravbildningar från Docker Hub. Konfigurera en pull-hemlighet för att autentisera med ett Docker Hub-konto i stället för att göra en anonym pull-begäran. För att förbättra tillförlitligheten när du arbetar med offentligt innehåll importerar och hanterar du avbildningarna i ett privat Azure Container Registry. Läs mer om hur du arbetar med offentliga avbildningar.

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

Spara konfigurationerna i en fil med namnet metrics.yaml. Använd följande kommando för att distribuera allt till klustret:

kubectl apply -f metrics.yaml

Kör följande kommando när distributionen är klar för att kontrollera att poddarna är igång. Ditt poddnamn är annorlunda.

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

Kör följande kommando för att kontrollera att services körs. Anteckna CLUSTER-IP och PORT för StatsD-tjänsten, som du använder senare. Du kan besöka Prometheus-dashboarden med dess EXTERNAL-IP och 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

Konfigurera den lokalt installerade gatewayen för att generera mått

Nu när både StatsD och Prometheus har distribuerats kan du uppdatera konfigurationerna för den lokalt installerade gatewayen för att börja generera mått via StatsD. telemetry.metrics.local Använd nyckeln i ConfigMap för den lokalt installerade gatewaydistributionen för att aktivera eller inaktivera den här funktionen. Du kan också ange ytterligare alternativ. Följande alternativ är tillgängliga:

Fält Förinställning Beskrivning
telemetry.metrics.local none Aktiverar loggning via StatsD. Värdet kan vara none, statsd.
telemetry.metrics.local.statsd.endpoint Inte tillämpligt Specificerar StatsD-endpunkt.
telemetry.metrics.local.statsd.sampling Inte tillämpligt Anger samplingsfrekvensen för mått. Värdet kan vara mellan 0 och 1. Exempel: 0.5
telemetry.metrics.local.statsd.tag-format Inte tillämpligt Taggningsformat för StatsD-exportör. Värdet kan vara none, librato, dogStatsD, influxDB.

Här är en exempelkonfiguration:

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"

Uppdatera YAML-filen för den lokala gatewaydistributionen med föregående konfigurationer och tillämpa ändringarna med följande kommando:

kubectl apply -f <file-name>.yaml

Starta om gatewaydistributionen med följande kommando för att hämta de senaste konfigurationsändringarna:

kubectl rollout restart deployment/<deployment-name>

Visa måtten

Nu när du har distribuerat och konfigurerat allt rapporterar den lokalt installerade gatewayen mått via StatsD. Prometheus hämtar sedan måtten från StatsD. Gå till Prometheus-instrumentpanelen genom att använda EXTERNAL-IP och PORT av Prometheus-tjänsten.

Gör vissa API-anrop via den lokala gatewayen. Om allt är korrekt konfigurerat kan du visa följande mått:

Måttsystem Beskrivning
totala_förfrågningar Antal API-begäranden under perioden
begäran_varaktighet_sekunder Antalet millisekunder från att gatewayen fick begäran till då svaret har skickats fullständigt
request_backend_duration_seconds Antal millisekunder som spenderas på övergripande serverdels-I/O (ansluta, skicka och ta emot byte)
begäran_klient_varaktighet_sekunder Antal millisekunder som spenderas på övergripande klient-I/O (ansluta, skicka och ta emot byte)

Loggfiler

Som standard matar den lokalt installerade gatewayen ut loggar till stdout och stderr. Du kan enkelt visa loggarna med hjälp av följande kommando:

kubectl logs <pod-name>

Om du distribuerar din självhostade gateway i Azure Kubernetes Service kan du aktivera Azure Monitor för containrar för att samla in stdout och stderr från dina arbetslaster och visa loggarna i Log Analytics.

Den lokalt installerade gatewayen har också stöd för många protokoll, inklusive localsyslog, rfc5424och journal. I följande tabell sammanfattas alla alternativ som stöds.

Fält Förinställning Beskrivning
telemetry.logs.std text Aktiverar loggning till standardströmmar. Värdet kan vara none, text, json
telemetry.logs.local auto Aktiverar lokal loggning. Värdet kan vara none, auto, localsyslog, rfc5424, , journaljson
telemetry.logs.local.localsyslog.endpoint Inte tillämpligt Anger lokal syslog-slutpunkt. Mer information finns om att använda lokala syslog-loggar.
telemetry.logs.local.localsyslog.facility Inte tillämpligt Anger lokal syslog-anläggningskod. Exempel: 7
telemetry.logs.local.rfc5424.endpoint Inte tillämpligt Anger rfc5424-slutpunkt.
telemetry.logs.local.rfc5424.facility Inte tillämpligt Anger anläggningskod per rfc5424. Exempel: 7
telemetry.logs.local.journal.endpoint Inte tillämpligt Anger journalens slutpunkt.
telemetry.logs.local.json.slutpunkt 127.0.0.1:8888 Anger UDP-slutpunkt som accepterar JSON-data: filsökväg, IP:port eller värdnamn:port.

Här är en exempelkonfiguration av lokal loggning:

    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"

Använda lokal JSON-slutpunkt

Kända begränsningar

  • Den lokala diagnostikfunktionen stöder upp till 3 072 byte av nyttolasten för begäran och svar. Om nyttolaststorleken överskrider den här gränsen kan segmenteringen bryta JSON-formatet.

Använda lokala syslog-loggar

Konfigurera gateway för att överföra loggar

När du använder lokal syslog som mål för loggar måste körmiljön tillåta att loggar kan strömmas till målet. För Azure Kubernetes Service måste du montera en volym som matchar målet.

Med följande konfiguration:

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

Du kan enkelt starta strömmande loggar till den lokala syslog-slutpunkten:

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

Använda lokala syslogloggar i Azure Kubernetes Service (AKS)

När du konfigurerar lokal syslog i Azure Kubernetes Service kan du välja två sätt att utforska loggarna:

Använda loggar från arbetsnoder

Du kan enkelt använda loggar genom att få åtkomst till arbetsnoderna:

  1. Skapa en SSH-anslutning till noden (docs).
  2. Hitta loggar under host/var/log/syslog.

Du kan till exempel filtrera alla syslogs till bara de från den lokala gatewayen:

$ 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"

Anmärkning

Om du ändrar roten med chroot, till exempel chroot /host, måste föregående sökväg återspegla den ändringen.