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

GÄLLER FÖR: Utvecklare | Premium

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ått

Den lokalt installerade gatewayen stöder StatsD, som har blivit ett enhetligt 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. Vi kommer åt Prometheus-instrumentpanelen via dess tjänst.

Kommentar

I följande exempel hämtas offentliga containeravbildningar från Docker Hub. Vi rekommenderar att du konfigurerar 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-containerregister. 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

När distributionen är klar kör du följande kommando för att kontrollera att poddarna körs. Poddens namn kommer att vara annorlunda.

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

Kör kommandot nedan för att kontrollera att services körs. CLUSTER-IP Anteckna statsd-tjänsten och PORT som vi använder senare. Du kan besöka Prometheus-instrumentpanelen 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 vi uppdatera konfigurationerna för den lokalt installerade gatewayen för att börja generera mått via StatsD. Funktionen kan aktiveras eller inaktiveras med hjälp av telemetry.metrics.local nyckeln i ConfigMap för den lokalt installerade gatewaydistributionen med ytterligare alternativ. Följande är de tillgängliga alternativen:

Fält Standardvärde beskrivning
telemetry.metrics.local none Aktiverar loggning via StatsD. Värdet kan vara none, statsd.
telemetry.metrics.local.statsd.endpoint saknas Anger StatsD-slutpunkt.
telemetry.metrics.local.statsd.sampling saknas Anger samplingsfrekvensen för mått. Värdet kan vara mellan 0 och 1. Exempel: 0.5
telemetry.metrics.local.statsd.tag-format saknas 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 ovanstående konfigurationer och tillämpa ändringarna med hjälp av kommandot nedan:

kubectl apply -f <file-name>.yaml

Om du vill hämta de senaste konfigurationsändringarna startar du om gatewaydistributionen med hjälp av kommandot nedan:

kubectl rollout restart deployment/<deployment-name>

Visa måtten

Nu när allt har distribuerats och konfigurerats bör den lokalt installerade gatewayen rapportera mått via StatsD. Prometheus hämtar sedan måtten från StatsD. Gå till Prometheus-instrumentpanelen med prometheus-tjänsten EXTERNAL-IP och PORT .

Gör vissa API-anrop via den lokalt installerade gatewayen. Om allt är korrekt konfigurerat bör du kunna visa måtten nedan:

Mätvärde Beskrivning
requests_total Antal API-begäranden under perioden
request_duration_seconds 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)
request_client_duration_seconds Antal millisekunder som spenderas på övergripande klient-I/O (ansluta, skicka och ta emot byte)

Loggar

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

kubectl logs <pod-name>

Om din lokala gateway distribueras i Azure Kubernetes Service kan du aktivera Azure Monitor för containrar för att samla in stdout och stderr från dina arbetsbelastningar 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 Standardvärde 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 saknas Anger lokal syslog-slutpunkt. Mer information finns i använda lokala syslog-loggar.
telemetry.logs.local.localsyslog.facility saknas Anger lokal syslog-anläggningskod. Exempel: 7
telemetry.logs.local.rfc5424.endpoint saknas Anger rfc5424-slutpunkt.
telemetry.logs.local.rfc5424.facility saknas Anger anläggningskod per rfc5424. Exempel: 7
telemetry.logs.local.journal.endpoint saknas Anger journalslutpunkt.
telemetry.logs.local.json.endpoint 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 lokala syslog-loggar

Konfigurera gateway för att strömma loggar

När du använder lokal syslog som mål för loggar måste körningen tillåta strömmande loggar till målet. För Kubernetes måste en volym monteras 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 att använda 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 dem genom att få åtkomst till arbetsnoderna:

  1. Skapa en SSH-anslutning till noden (dokument)
  2. Loggar finns 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=b28565ec-73e0-41e6-9312-efcdd6841846, 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=ab4d7464-acee-40ae-af95-a521cc57c759, 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"

Kommentar

Om du har ändrat roten med chroot, till exempel chroot /host, måste sökvägen ovan återspegla den ändringen.

Nästa steg