Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
VAN TOEPASSING OP: Ontwikkelaar | Premie
Dit artikel bevat informatie over het configureren van lokale metrische gegevens en logboeken voor de zelf-hostende gateway die is geïmplementeerd in een Kubernetes-cluster. Zie dit artikel voor het configureren van metrische gegevens en logboeken van de cloud.
Statistieken
De zelf-hostende gateway ondersteunt StatsD. Dit is een samenvoegingsprotocol voor verzameling en aggregatie van metrische gegevens. In deze sectie worden de stappen beschreven voor het implementeren van StatsD in Kubernetes, het configureren van de gateway voor het verzenden van metrische gegevens via StatsD en het gebruik van Prometheus om de metrische gegevens te bewaken.
StatsD en Prometheus implementeren in het cluster
Met de volgende YAML-voorbeeldconfiguratie worden StatsD en Prometheus geïmplementeerd in het Kubernetes-cluster waar een zelf-hostende gateway wordt geïmplementeerd. Er wordt voor elk een Service gemaakt. De zelf-hostende gateway publiceert vervolgens metrische gegevens naar de StatsD-service. U opent het Prometheus-dashboard via de bijbehorende service.
Opmerking
Het volgende voorbeeld haalt openbare containerafbeeldingen op van Docker Hub. Stel een pull-geheim in voor verificatie met behulp van een Docker Hub-account in plaats van een anonieme pull-aanvraag te maken. Om bij het werken met openbare inhoud de betrouwbaarheid te verbeteren, importeert en beheert u de afbeeldingen in een privé Azure Container Registry. Meer informatie over het werken met openbare afbeeldingen.
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
Sla de configuraties op in een bestand met de naam metrics.yaml. Gebruik de volgende opdracht om alles in het cluster te implementeren:
kubectl apply -f metrics.yaml
Zodra de implementatie is voltooid, voert u de volgende opdracht uit om te controleren of de pods draaien. De naam van uw pod is anders.
kubectl get pods
NAME READY STATUS RESTARTS AGE
sputnik-metrics-f6d97548f-4xnb7 2/2 Running 0 1m
Voer de volgende opdracht uit om te controleren of de services opdracht wordt uitgevoerd. Noteer de CLUSTER-IP en PORT van de StatsD-service, die u later gebruikt. U kunt het Prometheus-dashboard bezoeken via EXTERNAL-IP en 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
De zelf-hostende gateway configureren om metrische gegevens te verzenden
Nu zowel StatsD als Prometheus zijn geïmplementeerd, kunt u de configuraties van de zelf-hostende gateway bijwerken om metrische gegevens te verzenden via StatsD. Gebruik de telemetry.metrics.local sleutel in de ConfigMap van de zelf-hostende gatewayimplementatie om deze functie in of uit te schakelen. U kunt ook extra opties instellen. De volgende opties zijn beschikbaar:
| Veld | Verstek | Beschrijving |
|---|---|---|
| telemetry.metrics.local | none |
Hiermee schakelt u logboekregistratie via StatsD in. Waarde kan zijn none, statsd. |
| telemetry.metrics.local.statsd.endpoint | n.v.t | Hiermee geeft u het statsd-eindpunt op. |
| telemetry.metrics.local.statsd.sampling | n.v.t | Hiermee geeft u de steekproeffrequentie van metrische gegevens op. De waarde kan tussen 0 en 1 zijn. Voorbeeld: 0.5 |
| telemetry.metrics.local.statsd.tag-format | n.v.t | De tagindeling statsD-exporteur. Waarde kan zijnnone, librato, dogStatsD, . influxDB |
Hier volgt een voorbeeldconfiguratie:
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"
Werk het YAML-bestand van de zelf-hostende gatewayimplementatie bij met de voorgaande configuraties en pas de wijzigingen toe met de volgende opdracht:
kubectl apply -f <file-name>.yaml
Als u de meest recente configuratiewijzigingen wilt ophalen, start u de gatewayimplementatie opnieuw met de volgende opdracht:
kubectl rollout restart deployment/<deployment-name>
De metrische gegevens weergeven
Nu u alles hebt geïmplementeerd en geconfigureerd, rapporteert de zelf-hostende gateway metrische gegevens via StatsD. Prometheus haalt vervolgens de metrische gegevens op uit StatsD. Ga naar het Prometheus-dashboard met behulp van de EXTERNAL-IP prometheus-service PORT .
Voer enkele API-aanroepen uit via de zelf-hostende gateway. Als alles correct is geconfigureerd, kunt u de volgende metrische gegevens bekijken:
| Metrisch | Beschrijving |
|---|---|
| totaal_aanvragen | Aantal API-aanvragen in de periode |
| request_duration_seconds | Aantal milliseconden vanaf het moment dat de gateway de aanvraag ontving tot het moment dat het antwoord volledig werd verzonden |
| aanvraag_backend_duur_seconden | Aantal milliseconden dat is besteed aan de algehele io van de back-end (verbinding maken, verzenden en ontvangen van bytes) |
| request_client_duration_seconds | Aantal milliseconden besteed aan de totale IO van de client (verbinden, verzenden en ontvangen van bytes) |
Logboeken
De zelf-hostende gateway voert standaard logboeken uit naar stdout en stderr. U kunt de logboeken eenvoudig weergeven met behulp van de volgende opdracht:
kubectl logs <pod-name>
Als u uw zelf-gehoste gateway implementeert in Azure Kubernetes Service, kunt u Azure Monitor voor containers inschakelen om stdout en stderr van uw workloads te verzamelen en de logboeken in Log Analytics te bekijken.
De zelf-hostende gateway ondersteunt ook veel protocollen, waaronder localsyslog, rfc5424en journal. De volgende tabel bevat een overzicht van alle ondersteunde opties.
| Veld | Verstek | Beschrijving |
|---|---|---|
| telemetry.logs.std | text |
Hiermee kunt u logboekregistratie naar standaardstreams inschakelen. Waarde kan zijnnone, textjson |
| telemetry.logs.local | auto |
Hiermee schakelt u lokale logboekregistratie in. Waarde kan zijnnone, auto, localsyslog, rfc5424, , journaljson |
| telemetry.logs.local.localsyslog.endpoint | n.v.t | Geeft het lokale syslog-eindpunt op. Zie voor meer informatie het gebruik van lokale Syslog-logboeken. |
| telemetry.logs.local.localsyslog.facility | n.v.t | Hiermee specificeert u de lokale syslog facility code. Voorbeeld: 7 |
| telemetry.logs.local.rfc5424.endpoint | n.v.t | Hiermee specificeert u het rfc5424-eindpunt. |
| telemetry.logs.local.rfc5424.facility | n.v.t | Specificeert faciliteitscode per rfc5424. Voorbeeld: 7 |
| telemetry.logs.local.journal.endpoint | n.v.t | Hiermee geeft u het logboekeindpunt op. |
| telemetry.logs.local.json.endpoint | 127.0.0.1:8888 | Bepaalt het UDP-eindpunt dat JSON-gegevens ontvangt: bestandspad, IP:poort of hostnaam:poort. |
Hier volgt een voorbeeldconfiguratie van lokale logboekregistratie:
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"
Lokaal JSON-eindpunt gebruiken
Bekende beperkingen
- De functie voor lokale diagnostische gegevens ondersteunt maximaal 3.072 bytes aan payload voor verzoeken en antwoorden. Als de nettolading groter is dan deze limiet, kan segmentering de JSON-indeling verbreken.
Lokale Syslog-logboeken gebruiken
Gateway configureren voor het streamen van logboeken
Wanneer u lokale syslog gebruikt als bestemming voor logboeken, moet de runtime streaminglogboeken naar de bestemming toestaan. Voor Azure Kubernetes Service moet u een volume monteren dat past bij het doel.
Gegeven de volgende configuratie:
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
U kunt eenvoudig streaminglogboeken naar dat lokale Syslog-eindpunt starten:
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
Lokale Syslog-logboeken gebruiken in Azure Kubernetes Service (AKS)
Wanneer u lokale syslog configureert in Azure Kubernetes Service, kunt u twee manieren kiezen om de logboeken te verkennen:
- Syslog-verzameling gebruiken met Container Insights
- Logboeken op de werkknooppunten verbinden en verkennen
Logboeken van werkknooppunten gebruiken
U kunt logboeken eenvoudig gebruiken door toegang te krijgen tot de werkknooppunten:
- Maak een SSH-verbinding met het knooppunt (docs).
- Zoek logboeken onder
host/var/log/syslog.
U kunt bijvoorbeeld alle syslogs filteren op alleen syslogs van de zelf-hostende gateway:
$ 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"
Opmerking
Als u de rootmap wijzigt met chroot, bijvoorbeeld chroot /host, moet het voorgaande pad die wijziging weerspiegelen.
Verwante inhoud
- Meer informatie over de waarneembaarheidsmogelijkheden van de Azure API Management-gateways.
- Meer informatie over de zelf-hostende gateway van Azure API Management.
- Meer informatie over het configureren en behouden van logboeken in de cloud.