Aracılığıyla paylaş


Azure API Management kendin barındırılan ağ geçidi için yerel ölçümleri ve günlükleri yapılandırma

Şunlar için geçerlidir: Geliştirici | Premium

Bu makalede, Kubernetes kümesine dağıtılan kendi barındırılan ağ geçidi için yerel ölçümleri ve günlükleri yapılandırma ayrıntıları sağlanır. Bulut ölçümlerini ve günlüklerini yapılandırmak için bu makaleye bakın.

Ölçümler

Kendi kendine barındırılan ağ geçidi, ölçüm toplama ve birleştirme için birleştirici bir protokol haline gelen StatsD'yi destekler. Bu bölümde StatsD'yi Kubernetes'e dağıtma, ağ geçidini statsD aracılığıyla ölçümleri yayacak şekilde yapılandırma ve ölçümleri izlemek için Prometheus kullanma adımları adım adım izlenmektedir.

StatsD ve Prometheus'ı kümeye dağıtma

Aşağıdaki örnek YAML yapılandırması, StatsD ve Prometheus'u şirket içinde barındırılan bir ağ geçidinin dağıtıldığı Kubernetes kümesine dağıtır. Ayrıca her bir hizmet için bir Hizmet oluşturur. Şirket içinde barındırılan ağ geçidi daha sonra ölçümleri StatsD hizmetinde yayımlar. Prometheus kontrol paneline hizmeti aracılığıyla erişeceğiz.

Uyarı

Aşağıdaki örnek, Docker Hub'dan herkese açık kapsayıcı görüntülerini çeker. Anonim çekme isteği yapmak yerine Docker Hub hesabı kullanarak kimlik doğrulaması yapmak için bir gizli anahtar ayarlamanızı öneririz. Genel içerikle çalışırken güvenilirliği artırmak için görüntüleri özel bir Azure Container Registry'de içeri aktarın ve yönetin. Genel görüntülerle çalışma hakkında daha fazla bilgi edinin.

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

Yapılandırmaları adlı metrics.yamlbir dosyaya kaydedin. Kümeye her şeyi dağıtmak için aşağıdaki komutu kullanın:

kubectl apply -f metrics.yaml

Dağıtım tamamlandıktan sonra podların çalışıp çalışmadığını denetlemek için aşağıdaki komutu çalıştırın. Pod adınız farklı olacaktır.

kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
sputnik-metrics-f6d97548f-4xnb7        2/2     Running   0          1m

Aşağıdaki komutu çalıştırarak services'ün çalışıp çalışmadığını kontrol edin. StatsD Hizmeti'ndeki CLUSTER-IP ve PORT değerlerini, daha sonra kullanmak üzere not alın. Prometheus panosunu EXTERNAL-IP ve PORT kullanarak ziyaret edebilirsiniz.

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

Ölçümleri göndermek için kendinden barındırmalı ağ geçidini yapılandırma

Artık hem StatsD hem de Prometheus dağıtıldığına göre, ölçümleri StatsD aracılığıyla göndermeye başlamak için kendi kendine barındırılan ağ geçidinin yapılandırmalarını güncelleyebiliriz. Özellik, kendi kendine barındırılan ağ geçidi dağıtımının ekstra seçeneklerle yapılandırılmış ConfigMap'indeki telemetry.metrics.local anahtarı kullanılarak etkinleştirilebilir veya devre dışı bırakılabilir. Kullanılabilir seçenekler şunlardır:

Alan Varsayılan Açıklama
telemetry.metrics.local none StatsD aracılığıyla kayıt yapmayı etkinleştirir. Değer , noneolabilirstatsd.
telemetri.metrikler.yerel.statsd.endpoint Yok StatsD uç noktasını belirler.
telemetry.metrics.local.statsd.sampling Yok Metrik örnekleme oranını belirtir. Değer 0 ile 1 arasında olabilir. Örnek: 0.5
Telemetri.ölçümler.yerel.statsd.etiket-formatı Yok statsD exporter etiketleme biçimi. Değer none, librato, dogStatsD, influxDB olabilir.

Aşağıda örnek bir yapılandırma verilmişti:

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"

Şirket içinde barındırılan ağ geçidi dağıtımının YAML dosyasını yukarıdaki yapılandırmalarla güncelleştirin ve aşağıdaki komutu kullanarak değişiklikleri uygulayın:

kubectl apply -f <file-name>.yaml

En son yapılandırma değişikliklerini almak için aşağıdaki komutu kullanarak ağ geçidi dağıtımını yeniden başlatın:

kubectl rollout restart deployment/<deployment-name>

Ölçümleri görüntüleme

Artık her şeyi dağıtıp yapılandırdığımıza göre, yerel ağ geçidinin metrikleri StatsD aracılığıyla raporlaması gerekir. Prometheus daha sonra statsD'den ölçümleri alır. Prometheus Hizmeti'nin EXTERNAL-IP ve PORT bileşenlerini kullanarak Prometheus panosuna gidin.

Şirket içinde barındırılan ağ geçidi üzerinden bazı API çağrıları yapın. Her şey doğru yapılandırıldıysa aşağıdaki ölçümleri görüntüleyebilirsiniz:

Ölçü birimi Açıklama
istekler_toplam Dönemdeki API isteklerinin sayısı
istek_süresi_saniye Ağ geçidinin isteği aldığı andan, yanıtın tamamen gönderildiği ana kadar geçen milisaniye cinsinden süre
istek_arka_uc_sure_saniye Genel arka uç Girdi/Çıktı işlemleri için harcanan milisaniye sayısı (bağlanma, bayt gönderme ve alma)
istek_müşteri_süresi_saniye Genel istemci G/Ç için harcanan milisaniye sayısı (bağlantı kurulması, bayt gönderme ve alma)

Kayıtlar

Kendi kendine barındırılan ağ geçidi, varsayılan olarak stdout ile stderr'ye günlükleri verir. Aşağıdaki komutu kullanarak günlükleri kolayca görüntüleyebilirsiniz:

kubectl logs <pod-name>

Azure Kubernetes Service'te dağıtılan şirket içinde barındırılan ağ geçidiniz varsa, iş yüklerinizden veri toplamak ve ile stdout'yı toplamak ve Log Analytics'te günlükleri görüntülemek için stderr etkinleştirebilirsiniz.

Şirket içinde barındırılan ağ geçidi, localsyslog, rfc5424 ve journal gibi birçok protokolü de destekler. Aşağıdaki tabloda desteklenen tüm seçenekler özetlenmiştir.

Alan Varsayılan Açıklama
telemetry.logs.std text Günlük kaydı yapmayı standart akışlar üzerinden etkinleştirir. Değer none, text, json olabilir
telemetry.logs.local auto Yerel günlüğe kaydetmeyi etkinleştirir. Değer none, auto, localsyslog, rfc5424, journal, json olabilir
telemetry.kayitlar.yerel.yerelsyslog.son_nokta Yok Yerel syslog uç noktasını belirtir. Ayrıntılar için bkz. yerel syslog günlüklerini kullanma.
telemetry.logs.local.localsyslog.facility Yok Yerel syslog tesis kodunu belirtir. Örnek: 7
telemetry.logs.local.rfc5424.endpoint Yok rfc5424 uç noktasını belirtir.
telemetry.logs.local.rfc5424.facility Yok Rfc5424 başına tesis kodunu belirtir. Örnek: 7
telemetri.kayıtlar.yerel.günlük.bağlantı_noktası Yok Defter uç noktasını belirtir.
.endpoint telemetry.logs.local.json 127.0.0.1:8888 JSON verilerini kabul eden UDP uç noktasını belirtir: dosya yolu, IP:bağlantı noktası veya ana bilgisayar adı:bağlantı noktası.

Aşağıda yerel günlüğün örnek bir yapılandırması verilmişti:

    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"

Yerel JSON uç noktasını kullanma

Bilinen sınırlamalar

  • Yerel tanılama için yalnızca 3072 bayt istek/yanıt yükünü destekliyoruz. Yukarıdaki herhangi bir şey, öbekleme nedeniyle JSON biçimini bozabilir.

Yerel syslog günlüklerini kullanma

Ağ geçidini akış günlükleri için yapılandırma

Yerel syslog günlüklerin hedefi olarak kullanıldığında, çalışma zamanının günlüklerin hedefe akışını sağlaması gerekir. Kubernetes için hedefle uyumlu bir hacmin bağlanması gerekir.

Aşağıdaki yapılandırma göz önünde bulundurulduğunda:

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

Günlükleri bu yerel syslog uç noktasına kolayca aktarabilirsiniz.

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

Azure Kubernetes Service'te (AKS) yerel syslog günlüklerini kullanma

Azure Kubernetes Service'te yerel syslog kullanacak şekilde yapılandırırken, günlükleri keşfetmenin iki yolunu seçebilirsiniz:

Çalışan düğümlerinden günlükleri kullanma

İşçi düğümlerine erişerek bunları kolayca tüketebilirsiniz.

  1. Düğüme SSH bağlantısı kur (belgeler)
  2. Günlükler host/var/log/syslog altında bulunabilir

Örneğin, tüm syslog'ları yalnızca şirket içinde barındırılan ağ geçidinden gelenlerle filtreleyebilirsiniz:

$ 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"

Uyarı

Örneğinchroot, ile chroot /hostkökünü değiştirdiyseniz, yukarıdaki yolun bu değişikliği yansıtması gerekir.