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å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
, rfc5424
och 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 , , journal json |
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 lokal JSON-slutpunkt
Kända begränsningar
- Vi stöder endast upp till 3 072 byte av nyttolasten för begäran/svar för lokal diagnostik. Allt ovan kan bryta JSON-format på grund av segmentering.
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 Syslog-samling med Container Insights
- Anslut och utforska loggar på arbetsnoderna
Använda loggar från arbetsnoder
Du kan enkelt använda dem genom att få åtkomst till arbetsnoderna:
- Skapa en SSH-anslutning till noden (dokument)
- 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
- Lär dig mer om observerbarhetsfunktionerna i Azure API Management-gatewayerna.
- Läs mer om en lokalt installerad Azure API Management-gateway.
- Lär dig mer om att konfigurera och bevara loggar i molnet.