Настройка локальных метрик и журналов для локального шлюза службы управления API Azure

В этой статье содержатся сведения о настройке локальных метрик и журналов для локального шлюза, развернутого в кластере Kubernetes. Сведения о настройке облачных метрик и журналов см. в этой статье.

Метрики

Локальный шлюз поддерживает соединитель StatsD, ставший унифицированным протоколом для сбора и агрегирования метрик. В этом разделе описаны пошаговые действия для развертывания StatsD в Kubernetes, настройки шлюза на выдачу метрик через StatsD и использования Prometheus для мониторинга метрик.

Развертывание StatsD и Prometheus в кластере

Ниже приведен пример конфигурации YAML для развертывания StatsD и Prometheus в кластере Kubernetes, в котором развернут локальный шлюз. Для каждого соединителя также создается Служба. Локальный шлюз будет публиковать метрики в службе StatsD. Обращение к панели мониторинга Prometheus будет выполняться через его службу.

Примечание

В следующем примере извлекается общедоступный образ контейнера из Docker Hub. Рекомендуется настроить секрет для извлечения, чтобы проверка подлинности выполнялась с помощью учетной записи Docker Hub, а не анонимного запроса на вытягивание. Чтобы повысить надежность при работе с общедоступным содержимым, импортируйте образы и управляйте ими в частном реестре контейнеров Azure. Узнайте больше о работе с общедоступными образами.

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

Сохраните конфигурации в файл с именем metrics.yaml и используйте приведенную ниже команду, чтобы развернуть все необходимое в кластере:

kubectl apply -f metrics.yaml

После завершения развертывания выполните приведенную ниже команду, чтобы проверить работу модулей Pod. Учтите, что используемое вами имя модуля Pod будет другим.

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

Выполните приведенную ниже команду, чтобы проверить, работают ли эти службы. Запишите CLUSTER-IP и PORT службы StatsD, эти значения потребуются позже. Посетить панель мониторинга Prometheus можно, используя соответствующие EXTERNAL-IP и 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

Настройка локального шлюза для выдачи метрик

Теперь, когда StatsD и Prometheus развернуты, можно изменить конфигурации локального шлюза, чтобы начать выдачу метрик через соединитель StatsD. Эту функцию можно включить или отключить с помощью ключа telemetry.metrics.local в ConfigMap развертывания локального шлюза с дополнительными параметрами. Ниже приведено описание доступных параметров.

Поле По умолчанию Описание
telemetry.metrics.local none Включает ведение журнала с использованием StatsD. Возможные значения: none, statsd.
telemetry.metrics.local.statsd.endpoint Недоступно Задает конечную точку StatsD.
telemetry.metrics.local.statsd.sampling Недоступно Задает частоту выборки метрик. Значение может находиться в диапазоне от 0 до 1. Пример: 0.5
telemetry.metrics.local.statsd.tag-format Недоступно Формат тегирования экспортера StatsD. Возможные значения: none, librato, dogStatsD, influxDB.

Пример файла конфигурации:

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"

Измените файл YAML в развертывании локального шлюза, используя приведенные выше конфигурации, и примените изменения с помощью следующей команды:

kubectl apply -f <file-name>.yaml

Чтобы задействовать последние изменения конфигурации, перезапустите развертывание шлюза с помощью следующей команды:

kubectl rollout restart deployment/<deployment-name>

Просмотр метрик

Теперь, когда все развернуто и настроено, локальный шлюз должен сообщать метрики через соединитель StatsD. Prometheus будет получать метрики из StatsD. Перейдите на панель мониторинга Prometheus, используя EXTERNAL-IP и PORT службы Prometheus.

Выполните несколько вызовов API через локальный шлюз. Если все настроено правильно, можно будет просматривать приведенные ниже метрики.

Метрика Описание
Requests Количество API-запросов за интервал времени
DurationInMS Количество миллисекунд с момента поступления запроса в шлюз до момента полной отправки ответа
BackendDurationInMS Время в миллисекундах, затраченное на все операции ввода-вывода серверной части (подключение, отправка и получение байтов)
ClientDurationInMS Время в миллисекундах, затраченное на все операции ввода-вывода клиента (подключение, отправка и получение байтов)

Журналы

По умолчанию локальный шлюз выводит журналы в stdout и по stderr. Журналы можно легко просмотреть с помощью следующей команды:

kubectl logs <pod-name>

Если локальный шлюз развернут в службе Azure Kubernetes, можно включить Azure Monitor для контейнеров для сбора stdout и stderr из рабочих нагрузок, а также просматривать журналы в Log Analytics.

Локальный шлюз также поддерживает ряд протоколов, включая localsyslog, rfc5424 и journal. В следующей таблице приведены все поддерживаемые параметры.

Поле По умолчанию Описание
telemetry.logs.std text Включает ведение журнала для стандартных потоков. Возможные значения: none, text, json
telemetry.logs.local auto Включает локальное ведение журнала. Возможные значения: none, auto, localsyslog, rfc5424, journal, json.
telemetry.logs.local.localsyslog.endpoint Недоступно Задает конечную точку localsyslog.
telemetry.logs.local.localsyslog.facility Недоступно Задает код устройства localsyslog. Пример: 7
telemetry.logs.local.rfc5424.endpoint Недоступно Задает конечную точку rfc5424.
telemetry.logs.local.rfc5424.facility Недоступно Задает код устройства для каждого rfc5424. Пример: 7
telemetry.logs.local.journal.endpoint Недоступно Задает конечную точку журнала.
telemetry.logs.local.json.endpoint 127.0.0.1:8888 Указывает конечную точку UDP, которая принимает данные JSON: путь к файлу, IP-адрес:порт или имя узла:порт.

Ниже приведен пример конфигурации локального ведения журнала:

    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"

Дальнейшие действия