Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 Syslog-samling med Container Insights
- Anslut och utforska loggar på arbetsnoder
Använda loggar från arbetsnoder
Du kan enkelt använda loggar genom att få åtkomst till arbetsnoderna:
- Skapa en SSH-anslutning till noden (docs).
- 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.
Relaterat innehåll
- 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.