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

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

Kullanılabilirlik

Önemli

Bu özellik, API Management Premium ve Geliştirici katmanlarında kullanılabilir.

Ölçümler

Şirket içinde barındırılan ağ geçidi, ölçüm toplama ve toplama 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 açıklanır.

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

Aşağıda statsD ve Prometheus'u şirket içinde barındırılan bir ağ geçidinin dağıtıldığı Kubernetes kümesine dağıtmak için örnek bir YAML yapılandırması verilmiştir. Ayrıca her biri için bir Hizmet oluşturur. Şirket içi barındırılan ağ geçidi, ölçümleri statsD Hizmetinde yayımlar. Prometheus panosuna Hizmeti aracılığıyla erişeceğiz.

Not

Aşağıdaki örnek, Docker Hub genel kapsayıcı görüntülerini çeker. Anonim çekme isteğinde bulunmak yerine Docker Hub hesabı kullanarak kimlik doğrulaması yapmak için bir çekme gizli dizisi ayarlamanızı öneririz. Genel içerikle çalışırken güvenilirliği artırmak için görüntüleri özel bir Azure kapsayıcı kayıt defterinde 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.yaml bir dosyaya kaydedin ve 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ıştığını denetlemek için aşağıdaki komutu çalıştırın. Pod adınızın farklı olacağını unutmayın.

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

Hizmetlerin çalıştığını denetlemek için aşağıdaki komutu çalıştırın. StatsD Hizmeti'nin ve PORT değerlerini not CLUSTER-IP alın, daha sonra buna ihtiyacımız olacak. ve PORTkullanarak Prometheus panosunu EXTERNAL-IP 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

Şirket içi barındırılan ağ geçidini ölçümleri yayacak şekilde yapılandırma

Artık hem statsD hem de Prometheus dağıtıldığına göre, statsD aracılığıyla ölçümleri yaymaya başlamak için şirket içinde barındırılan ağ geçidinin yapılandırmalarını güncelleştirebiliriz. Özellik, şirket içinde barındırılan ağ geçidi dağıtımının telemetry.metrics.local ConfigMap'indeki anahtarı ek seçeneklerle birlikte kullanılarak etkinleştirilebilir veya devre dışı bırakılabilir. Kullanılabilir seçeneklerin dökümü aşağıdadır:

Alan Varsayılan Açıklama
telemetry.metrics.local none statsD aracılığıyla günlüğe kaydetmeyi etkinleştirir. Değer , statsdolabilirnone.
telemetry.metrics.local.statsd.endpoint yok statsD uç noktasını belirtir.
telemetry.metrics.local.statsd.sampling yok Ölçüm örnekleme hızını belirtir. Değer 0 ile 1 arasında olabilir. Örneğin. 0.5
telemetry.metrics.local.statsd.tag-format yok statsD dışarı aktarma etiketleme biçimi. Değer , none, librato, dogStatsD. influxDB

Örnek bir yapılandırma aşağıda verilmiştir:

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çi 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ık. Şirket içinde barındırılan ağ geçidinin ölçümleri statsD aracılığıyla raporlaması gerekir. Prometheus, İstatistikler'den ölçümleri alır. Prometheus Hizmeti'nin ve'sini EXTERNAL-IPPORT kullanarak Prometheus panosuna gidin.

Şirket içi 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çüm Açıklama
requests_total Dönem içindeki API isteklerinin sayısı
request_duration_seconds Ağ geçidinin isteği aldığı andan, yanıtın tamamen gönderildiği ana kadar geçen milisaniye cinsinden süre
request_backend_duration_seconds Genel arka uç GÇ (bağlanma, gönderme ve alma bayt’ları) için harcanan milisaniye sayısı
request_client_duration_seconds Genel istemci G/Ç (bağlanma, gönderme ve alma bayt’ları) için harcanan milisaniye sayısı

Günlükler

Şirket içi barındırılan ağ geçidi, günlükleri varsayılan olarak ve stderr için stdout çıkış olarak alır. Aşağıdaki komutu kullanarak günlükleri kolayca görüntüleyebilirsiniz:

kubectl logs <pod-name>

Şirket içinde barındırılan ağ geçidiniz Azure Kubernetes Service dağıtıldıysa, kapsayıcılar için Azure İzleyici'nin iş yüklerinizi toplamasını stdout ve stderr günlükleri Log Analytics'te görüntülemesini sağlayabilirsiniz.

Şirket içinde barındırılan ağ geçidi, , rfc5424ve journalgibi localsyslogbir dizi protokolü de destekler. Aşağıdaki tabloda desteklenen tüm seçenekler özetlenmiştir.

Alan Varsayılan Açıklama
telemetry.logs.std text Standart akışlarda günlüğe kaydetmeyi etkinleştirir. Değer , , textolabilir nonejson
telemetry.logs.local auto Yerel günlüğe kaydetmeyi etkinleştirir. Değer , , auto, localsyslog, rfc5424, journal, olabilir nonejson
telemetry.logs.local.localsyslog.endpoint yok localsyslog uç noktasını belirtir.
telemetry.logs.local.localsyslog.facility yok localsyslog tesis kodunu belirtir. Örneğin. 7
telemetry.logs.local.rfc5424.endpoint yok rfc5424 uç noktasını belirtir.
telemetry.logs.local.rfc5424.facility yok Rfc5424 başına tesis kodunu belirtir. Örneğin. 7
telemetry.logs.local.journal.endpoint yok Günlük uç noktasını belirtir.
telemetry.logs.local.json.endpoint 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ı.

Yerel günlüğün örnek yapılandırması aşağıda verilmiştir:

    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"

Sonraki adımlar