Prometheus

Prometheus — це система моніторингу з відкритим вихідним кодом і база даних часових рядів. Ви можете використовувати Prometheus з Istio для запису метрик, що відстежують стан Istio та застосунків у сервісній мережі. Ви можете візуалізувати метрики за допомогою таких інструментів, як Grafana та Kiali.

Встановлення

Варіант 1: Швидкий старт

Istio надає базове демонстраційне встановлення для швидкого запуску Prometheus:

$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/addons/prometheus.yaml

Це розгорне Prometheus у вашому кластері. Це призначено лише для демонстрації та не оптимізовано для продуктивності або безпеки.

Варіант 2: Налаштоване встановлення

Ознайомтесь з документацією Prometheus, щоб почати розгортати Prometheus у вашому середовищі. Дивіться Конфігурацію для отримання додаткової інформації про конфігурацію Prometheus для збору даних про розгортання Istio.

Конфігурація

У мережі Istio кожен компонент надає точку доступу, яка публікує метрики. Prometheus працює шляхом збору даних з цих точок доступу. Це конфігурується через файл конфігурації Prometheus, який контролює налаштування для яких точок доступу запитувати, порт і шлях запиту, налаштування TLS та інше.

Щоб зібрати метрики для всієї мережі, налаштуйте Prometheus для збору:

  1. Панель управління (istiod розгортання)
  2. Ingress та Egress шлюзи
  3. Envoy sidecar
  4. Застосунки користувача (якщо вони публікують метрики Prometheus)

Щоб спростити конфігурацію метрик, Istio пропонує два режими роботи.

Варіант 1: Обʼєднання метрик

Щоб спростити конфігурацію, Istio має можливість повністю контролювати збору даних за допомогою анотацій prometheus.io. Це дозволяє збору даних з Istio працювати з готовими конфігураціями, такими як ті, що надаються Helm stable/prometheus чартами.

Цей варіант увімкнено стандартно, але його можна вимкнути, передавши --set meshConfig.enablePrometheusMerge=false під час встановлення. Коли увімкнено, відповідні анотації prometheus.io будуть додані до всіх контейнерів даних, щоб налаштувати збір даних. Якщо ці анотації вже існують, вони будуть перезаписані. За допомогою цього варіанту sidecar Envoy буде змішувати метрики Istio з метриками застосунків. Обʼєднані метрики будуть зібрані з :15020/stats/prometheus.

Цей варіант експонує всі метрики у текстовому вигляді.

Ця функція може не відповідати вашим потребам у наступних ситуаціях:

  • Вам потрібно збирати метрики за допомогою TLS.
  • Ваш застосунок публікує метрики з такими ж назвами, як і метрики Istio. Наприклад, ваші метрики застосунку надають метрику istio_requests_total. Це може статися, якщо застосунок самостійно запускає Envoy.
  • Ваша установка Prometheus не налаштована для збору даних на основі стандартних анотацій prometheus.io.

Якщо потрібно, цю функцію можна вимкнути для кожного навантаження, додавши анотацію prometheus.istio.io/merge-metrics: "false" до podʼа.

Варіант 2: Налаштовані конфігурації збору

Щоб налаштувати наявну установку Prometheus для збору статистики, згенерованої Istio, потрібно додати кілька завдань (job).

  • Щоб зібрати статистику Istiod, можна додати наступне завдання для збору з його порту http-monitoring:
- job_name: 'istiod'
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - istio-system
  relabel_configs:
  - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    action: keep
    regex: istiod;http-monitoring
  • Щоб зібрати статистику Envoy, включаючи проксі sidecar та проксі шлюзів, можна додати наступне завдання для збору з портів, що закінчуються на -envoy-prom:
- job_name: 'envoy-stats'
  metrics_path: /stats/prometheus
  kubernetes_sd_configs:
  - role: pod

  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_container_port_name]
    action: keep
    regex: '.*-envoy-prom'
  • Для статистики застосунків, якщо Strict mTLS не увімкнено, ваша наявна конфігурація збору даних повинна продовжити працювати. В іншому випадку, Prometheus потрібно налаштувати для збору з сертифікатами Istio.

Налаштування TLS

Коли Istio налаштовано для використання взаємного TLS, Prometheus повинен бути налаштований для збору даних з використанням сертифікатів Istio.

Метрики панелі управління, шлюзу та sidecar Envoy будуть зібрані через незашифрований текст. Однак метрики застосунків слідуватимуть будь-якій політиці автентифікації Istio, яка була налаштована для навантаження.

  • Якщо ви використовуєте режим STRICT, то Prometheus потрібно налаштувати для збору даних з використанням сертифікатів Istio, як описано нижче.
  • Якщо ви використовуєте режим PERMISSIVE, навантаження зазвичай приймає TLS і незашифрований текст. Однак, Prometheus не може надсилати спеціальний варіант TLS, який вимагає Istio для режиму PERMISSIVE. Як результат, ви не повинні налаштовувати TLS у Prometheus.
  • Якщо ви використовуєте режим DISABLE, для Prometheus не потрібно налаштовувати TLS.

Один зі способів надати сертифікати Istio для Prometheus — це впровадження sidecar, який буде ротувати сертифікати SDS і виводити їх у том, який можна розділити з Prometheus. Однак, sidecar не повинен перехоплювати запити для Prometheus, оскільки модель прямого доступу до точок доступу Prometheus несумісна з моделлю проксі sidecar Istio.

Щоб досягти цього, налаштуйте зміну тома сертифікатів в контейнері сервера Prometheus:

containers:
  - name: prometheus-server
    ...
    volumeMounts:
      mountPath: /etc/prom-certs/
      name: istio-certs
volumes:
  - emptyDir:
      medium: Memory
    name: istio-certs

Тоді додайте наступні анотації до шаблону podʼа розгортання Prometheus і розгорніть його з інʼєкцією sidecar. Це налаштовує sidecar для запису сертифіката у спільний том, але без налаштування перенаправлення трафіку:

spec:
  template:
    metadata:
      annotations:
        traffic.sidecar.istio.io/includeInboundPorts: ""   # не перехоплювати жодних вхідних портів
        traffic.sidecar.istio.io/includeOutboundIPRanges: ""  # не перехоплювати жоден вихідний трафік
        proxy.istio.io/config: |  # налаштувати змінну середовища `OUTPUT_CERTS`, щоб записувати сертифікати у вказану теку
          proxyMetadata:
            OUTPUT_CERTS: /etc/istio-output-certs
        sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-output-certs"}]' # змонтувати спільний том у sidecar proxy

Нарешті, налаштуйте контекст TLS для завдання збору:

scheme: https
tls_config:
  ca_file: /etc/prom-certs/root-cert.pem
  cert_file: /etc/prom-certs/cert-chain.pem
  key_file: /etc/prom-certs/key.pem
  insecure_skip_verify: true  # Prometheus не підтримує безпеку іменування Istio, тому пропустіть перевірку сертифіката цільового podʼа

Найкращі практики

Для більших мереж розширена конфігурація може допомогти Prometheus масштабуватися. Дивіться Використання Prometheus для моніторингу в промисловому масштабі для отримання додаткової інформації.

Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!