Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de 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, dat een samenvoegingsprotocol is geworden 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. We hebben toegang tot het Prometheus-dashboard via de Service.
Opmerking
Het volgende voorbeeld haalt openbare containerafbeeldingen op van Docker Hub. U wordt aangeraden een pull-geheim in te stellen 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. Uw podnaam zal anders zijn.
kubectl get pods
NAME READY STATUS RESTARTS AGE
sputnik-metrics-f6d97548f-4xnb7 2/2 Running 0 1m
Voer de onderstaande opdracht uit om te controleren of de services
aan het draaien zijn. Noteer de CLUSTER-IP
en PORT
van de StatsD-service, die we later gebruiken. 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, kunnen we de configuraties van de zelf-hostende gateway bijwerken om metrische gegevens via StatsD te verzenden. De functie kan worden ingeschakeld of uitgeschakeld met behulp van de telemetry.metrics.local
sleutel in de ConfigMap van de zelf-hostende gatewayimplementatie met extra opties. Hier volgen de beschikbare opties:
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 bovenstaande configuraties en pas de wijzigingen toe met behulp van de onderstaande opdracht:
kubectl apply -f <file-name>.yaml
Als u de meest recente configuratiewijzigingen wilt ophalen, start u de gatewayimplementatie opnieuw met behulp van de onderstaande opdracht:
kubectl rollout restart deployment/<deployment-name>
De metrische gegevens weergeven
Nu alles is geïmplementeerd en geconfigureerd, moet de zelf-hostende gateway metrische gegevens rapporteren via StatsD. Prometheus haalt vervolgens de metrische gegevens op uit StatsD. Ga naar het Prometheus-dashboard gebruikmakend van de EXTERNAL-IP
en PORT
van de Prometheus Service.
Voer enkele API-aanroepen uit via de zelf-hostende gateway, als alles correct is geconfigureerd, kunt u de onderstaande 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 zelfgehoste 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 uw self-hosted gateway is geïmplementeerd in Azure Kubernetes Service, kunt u Azure Monitor voor containers inschakelen om gegevens van uw workloads te verzamelen en de logboeken bij Log Analytics weer te geven.
De zelf-hostende gateway ondersteunt ook veel protocollen, waaronder localsyslog
, rfc5424
en 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 , text json |
telemetry.logs.local | auto |
Hiermee schakelt u lokale logboekregistratie in. Waarde kan zijnnone , auto , localsyslog , rfc5424 , , journal json |
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
- We ondersteunen alleen maximaal 3072 bytes aan nettolading van aanvragen/antwoorden voor lokale diagnostische gegevens. Alles hierboven kan de JSON-indeling verbreken vanwege segmentering.
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 Kubernetes moet een volume worden gekoppeld dat overeenkomt met 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 configureert voor het gebruik van lokale syslog in Azure Kubernetes Service, kunt u twee manieren kiezen om de logboeken te verkennen:
- Syslog-verzameling gebruiken met Container Insights
- Verbinding maken en logboeken verkennen op de werkknooppunten
Logboeken van werkknooppunten gebruiken
U kunt ze eenvoudig gebruiken door toegang te krijgen tot de werkknooppunten:
- Een SSH-verbinding met het knooppunt maken (docs)
- Logboeken vindt u 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 met chroot
hebt gewijzigd, bijvoorbeeld chroot /host
, dan moet het bovenstaande 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.