Konfigurace místních metrik a protokolů pro místní bránu služby Azure API Management
PLATÍ PRO: Vývojář | Prémie
Tento článek obsahuje podrobnosti o konfiguraci místních metrik a protokolů pro bránu v místním prostředí nasazenou v clusteru Kubernetes. Informace o konfiguraci cloudových metrik a protokolů najdete v tomto článku.
Metriky
Brána v místním prostředí podporuje statistiky, které se staly unifikačním protokolem pro shromažďování a agregaci metrik. Tato část vás provede postupem nasazení statistiky do Kubernetes, konfigurací brány pro generování metrik prostřednictvím statistiky a monitorováním metrik pomocí nástroje Prometheus .
Nasazení statistik a Prometheus do clusteru
Následující ukázková konfigurace YAML nasadí statistiky A Prometheus do clusteru Kubernetes, kde je nasazená brána v místním prostředí. Vytvoří také službu pro každou z nich. Brána v místním prostředí pak publikuje metriky do služby StatsD. K řídicímu panelu Prometheus se dostaneme prostřednictvím své služby.
Poznámka:
Následující příklad načítá image veřejného kontejneru z Docker Hubu. Doporučujeme nastavit tajný kód pro přijetí změn pro ověření pomocí účtu Docker Hubu místo vytvoření anonymní žádosti o přijetí změn. Pokud chcete zvýšit spolehlivost při práci s veřejným obsahem, importujte a spravujte image v privátním registru kontejnerů Azure. Přečtěte si další informace o práci s veřejnými imagemi.
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
Uložte konfigurace do souboru s názvem metrics.yaml
. Pomocí následujícího příkazu nasaďte vše do clusteru:
kubectl apply -f metrics.yaml
Po dokončení nasazení spusťte následující příkaz a zkontrolujte, jestli jsou pody spuštěné. Název vašeho podu se bude lišit.
kubectl get pods
NAME READY STATUS RESTARTS AGE
sputnik-metrics-f6d97548f-4xnb7 2/2 Running 0 1m
Spuštěním následujícího příkazu zkontrolujte, že jsou spuštěné services
. Poznamenejte CLUSTER-IP
si službu StatsD a PORT
kterou použijeme později. Můžete navštívit řídicí panel Prometheus pomocí jeho EXTERNAL-IP
a 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
Konfigurace brány v místním prostředí pro generování metrik
Teď, když jsou nasazené statistiky i Prometheus, můžeme aktualizovat konfigurace brány v místním prostředí a začít generovat metriky prostřednictvím statistiky. Tuto funkci je možné povolit nebo zakázat pomocí telemetry.metrics.local
klíče v objektu ConfigMap nasazení brány v místním prostředí s dalšími možnostmi. K dispozici jsou následující možnosti:
Pole | Výchozí | Popis |
---|---|---|
telemetry.metrics.local | none |
Povolí protokolování prostřednictvím statistiky. Hodnota může být none , statsd . |
telemetry.metrics.local.statsd.endpoint | Není k dispozici | Určuje koncový bod statistiky. |
telemetry.metrics.local.statsd.sampling | Není k dispozici | Určuje vzorkovací frekvenci metrik. Hodnota může být mezi 0 a 1. Příklad: 0.5 |
telemetry.metrics.local.statsd.tag-format | Není k dispozici | Formát označování exportéru StatsD. Hodnota může být none , , dogStatsD librato , influxDB . |
Tady je ukázková konfigurace:
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"
Aktualizujte soubor YAML nasazení brány v místním prostředí s využitím výše uvedených konfigurací a použijte změny pomocí následujícího příkazu:
kubectl apply -f <file-name>.yaml
Pokud chcete získat nejnovější změny konfigurace, restartujte nasazení brány pomocí následujícího příkazu:
kubectl rollout restart deployment/<deployment-name>
Zobrazení metrik
Teď máme všechno nasazené a nakonfigurované, brána v místním prostředí by měla hlásit metriky prostřednictvím statistiky. Prometheus pak vybere metriky ze statistiky. Pomocí služby Prometheus přejděte PORT
na řídicí panel EXTERNAL-IP
Prometheus.
Proveďte některá volání rozhraní API přes bránu v místním prostředí, pokud je vše správně nakonfigurované, měli byste být schopni zobrazit následující metriky:
Metrický | Popis |
---|---|
requests_total | Počet požadavků rozhraní API v období |
request_duration_seconds | Počet milisekund od chvíle, kdy brána přijala požadavek, do chvíle odeslání úplné odpovědi. |
request_backend_duration_seconds | Počet milisekund strávených na celkových vstupně-výstupních operacích back-endu (připojování, odesílání a přijímání bajtů) |
request_client_duration_seconds | Počet milisekund strávených na celkových vstupně-výstupních operacích klienta (připojování, odesílání a přijímání bajtů) |
Protokoly
Brána v místním prostředí ve výchozím nastavení odesílá protokoly do stdout
a stderr
ve výchozím nastavení. Protokoly můžete snadno zobrazit pomocí následujícího příkazu:
kubectl logs <pod-name>
Pokud je vaše brána v místním prostředí nasazená ve službě Azure Kubernetes Service, můžete službě Azure Monitor povolit, aby kontejnery shromažďovaly a stderr
z vašich úloh a stdout
zobrazovaly protokoly v Log Analytics.
Brána v místním prostředí také podporuje mnoho protokolů, mezi které patří localsyslog
, rfc5424
a journal
. Následující tabulka shrnuje všechny podporované možnosti.
Pole | Výchozí | Popis |
---|---|---|
telemetry.logs.std | text |
Umožňuje protokolování do standardních datových proudů. Hodnota může být none , , text json |
telemetry.logs.local | auto |
Povolí místní protokolování. Hodnota může být none , , localsyslog auto , rfc5424 , journal json |
telemetry.logs.local.localsyslog.endpoint | Není k dispozici | Určuje místní koncový bod syslogu. Podrobnosti najdete v místních protokolech syslogu. |
telemetry.logs.local.localsyslog.facility | Není k dispozici | Určuje místní kód zařízení syslogu. Příklad: 7 |
telemetry.logs.local.rfc5424.endpoint | Není k dispozici | Určuje koncový bod rfc5424. |
telemetry.logs.local.rfc5424.facility | Není k dispozici | Určuje kód zařízení na rfc5424. Příklad: 7 |
telemetry.logs.local.journal.endpoint | Není k dispozici | Určuje koncový bod deníku. |
telemetry.logs.local.json.endpoint | 127.0.0.1:8888 | Určuje koncový bod UDP, který přijímá data JSON: cestu k souboru, IP:port nebo název hostitele:port. |
Tady je ukázková konfigurace místního protokolování:
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"
Použití místního koncového bodu JSON
Známá omezení
- Pro místní diagnostiku podporujeme maximálně 3072 bajtů datové části požadavků a odpovědí. Formát JSON může přerušit cokoli výše kvůli blokům dat.
Použití místních protokolů syslogu
Konfigurace brány pro streamování protokolů
Při použití místního syslogu jako cíle pro protokoly musí modul runtime povolit streamování protokolů do cíle. V případě Kubernetes je potřeba připojit svazek, který odpovídá cíli.
Vzhledem k následující konfiguraci:
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
Protokoly streamování můžete snadno spustit do místního koncového bodu syslogu:
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
Využívání místních protokolů syslogu ve službě Azure Kubernetes Service (AKS)
Při konfiguraci použití místního syslogu ve službě Azure Kubernetes Service můžete zvolit dva způsoby, jak prozkoumat protokoly:
- Použití kolekce Syslog se službou Container Insights
- Připojení a prozkoumání protokolů na pracovních uzlech
Využívání protokolů z pracovních uzlů
Můžete je snadno využívat získáním přístupu k pracovním uzlům:
- Vytvoření připojení SSH k uzlu (dokumentace)
- Protokoly najdete v části
host/var/log/syslog
Například všechny syslogy můžete filtrovat jenom na ty z brány v místním prostředí:
$ 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"
Poznámka:
Pokud jste například změnili kořen pomocí chroot
výše chroot /host
uvedené cesty, musí tato změna odrážet.
Další kroky
- Seznamte se s možnostmi pozorovatelnosti bran služby Azure API Management.
- Přečtěte si další informace o bráně azure API Management v místním prostředí.
- Přečtěte si o konfiguraci a zachování protokolů v cloudu.