Konfigurera lokala mått och loggar för Azure API Management gateway med egen värd

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

Mått

Den lokala 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

Nedan visas ett exempel på en YAML-konfiguration för distribution av StatsD och Prometheus till Kubernetes-klustret där en gateway med egen värd distribueras. Den skapar också en tjänst för var och en. Den lokalt installerade gatewayen publicerar mått till StatsD-tjänsten. Vi kommer åt Prometheus-instrumentpanelen via dess tjänst.

Anteckning

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 och använd kommandot nedan för att distribuera allt till klustret:

kubectl apply -f metrics.yaml

När distributionen är klar kör du kommandot nedan för att kontrollera att poddarna körs. Observera att poddnamnet skiljer sig åt.

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 Tjänsterna körs. CLUSTER-IP Anteckna statsd-tjänsten och PORT så behöver vi den senare. Du kan besöka Prometheus-instrumentpanelen med hjälp av 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 lokala gatewaydistributionen med ytterligare alternativ. Nedan visas en uppdelning av de tillgängliga alternativen:

Field 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. E.g. 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 lokala gatewayen rapportera mått via StatsD. Prometheus hämtar måtten från StatsD. Gå till Prometheus-instrumentpanelen med och EXTERNAL-IPPORT för Prometheus-tjänsten.

Gör vissa API-anrop via den lokala gatewayen. Om allt är korrekt konfigurerat bör du kunna visa nedanstående mått:

Metric 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 Antalet millisekunder som ägnats åt övergripande serverdels-IO (ansluta, skicka och ta emot byte)
request_client_duration_seconds Antalet millisekunder som ägnats åt övergripande klient-IO (ansluta, skicka och ta emot byte)

Loggar

Den lokala gatewayen matar ut loggar till stdout och stderr som standard. Du kan enkelt visa loggarna med 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 ett antal protokoll, inklusive localsyslog, rfc5424och journal. I tabellen nedan sammanfattas alla alternativ som stöds.

Field 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, , journal, json
telemetry.logs.local.localsyslog.endpoint saknas Anger localsyslog-slutpunkt.
telemetry.logs.local.localsyslog.facility saknas Anger localsyslog facility code. E.g. 7
telemetry.logs.local.rfc5424.endpoint saknas Anger rfc5424-slutpunkt.
telemetry.logs.local.rfc5424.facility saknas Anger anläggningskod per rfc5424. E.g. 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"

Nästa steg