Konfigurace místních metrik a protokolů pro místní bránu služby Azure API Management
PLATÍ PRO: Vývojář | Premium
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í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 Přehledy
- 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.