Перейти до вмісту

Модуль 3.5: Інструменти спостережуваності

Складність: [QUICK] - Огляд інструментів

Час на виконання: 20-25 хвилин

Передумови: Модуль 3.4 (Основи спостережуваності)


Що ви зможете робити

Розділ «Що ви зможете робити»

Після завершення цього модуля ви зможете:

  • Визначити призначення та роль Prometheus, Grafana, Jaeger, Fluentd та OpenTelemetry
  • Порівняти підходи збору метрик на основі push та pull
  • Пояснити як OpenTelemetry об’єднує інструментацію логування, метрик та трейсингу
  • Оцінити які інструменти спостережуваності підходять для різних вимог моніторингу кластера

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

Знати концепції — одне; знати інструменти — інше. KCNA перевіряє вашу обізнаність з популярними інструментами спостережуваності в хмарній нативній екосистемі. Цей модуль охоплює ключові інструменти, які вам потрібно знати.


Огляд стеку спостережуваності

Розділ «Огляд стеку спостережуваності»
┌─────────────────────────────────────────────────────────────┐
│ ТИПОВИЙ СТЕК СПОСТЕРЕЖУВАНОСТІ │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ ВІЗУАЛІЗАЦІЯ │ │
│ │ ┌────────────────────────────────────────────────┐ │ │
│ │ │ GRAFANA │ │ │
│ │ │ Дашборди для метрик, логів, трейсів │ │ │
│ │ └────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────┼───────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ МЕТРИКИ │ │ ЛОГИ │ │ ТРЕЙСИ │ │
│ │ │ │ │ │ │ │
│ │ Prometheus │ │ Loki │ │ Jaeger │ │
│ │ або │ │ або │ │ або │ │
│ │ Mimir │ │ Elasticsearch│ │ Tempo │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ▲ ▲ ▲ │
│ │ │ │ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ ЗБІР │ │
│ │ │ │
│ │ Метрики: Prometheus scrapes / OpenTelemetry │ │
│ │ Логи: Fluentd / Fluent Bit / OpenTelemetry │ │
│ │ Трейси: OpenTelemetry / Jaeger agent │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ ▲ │
│ │ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ ЗАСТОСУНКИ │ │
│ │ [Pod] [Pod] [Pod] [Pod] [Pod] [Pod] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ PROMETHEUS │
├─────────────────────────────────────────────────────────────┤
│ │
│ CNCF Graduated проєкт для метрик │
│ │
│ Ключові характеристики: │
│ ───────────────────────────────────────────────────────── │
│ • Модель на основі витягування (pull) │
│ • База даних часових рядів │
│ • Мова запитів PromQL │
│ • AlertManager для алертів │
│ │
│ Як це працює: │
│ ───────────────────────────────────────────────────────── │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────┐ │ │
│ │ │Prometheus│ ──── scrape ────→ /metrics endpoint │ │
│ │ │ Server │ │ │
│ │ │ │ ←─── metrics ──── Target (Pod) │ │
│ │ └──────────┘ │ │
│ │ │ │ │
│ │ ├──→ Зберігає дані часових рядів │ │
│ │ ├──→ Обчислює правила алертів │ │
│ │ └──→ Відповідає на запити PromQL │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Приклад PromQL: │
│ ───────────────────────────────────────────────────────── │
│ rate(http_requests_total[5m]) │
│ "Запитів на секунду за останні 5 хвилин" │
│ │
│ histogram_quantile(0.99, rate(request_duration_bucket │
│ [5m])) │
│ "99-й перцентиль затримки" │
│ │
└─────────────────────────────────────────────────────────────┘
КомпонентПризначення
Prometheus ServerЗбирає та зберігає метрики
AlertManagerОбробляє алерти, маршрутизацію, замовчування
PushgatewayДля короткоживучих завдань (push метрик)
ExportersНадають метрики від систем
Клієнтські бібліотекиІнструментують ваш код

┌─────────────────────────────────────────────────────────────┐
│ GRAFANA │
├─────────────────────────────────────────────────────────────┤
│ │
│ Візуалізація та дашборди (не CNCF, але необхідний) │
│ │
│ Що робить Grafana: │
│ ───────────────────────────────────────────────────────── │
│ • Створення дашбордів │
│ • Запити до кількох джерел даних │
│ • Алертинг (має власний алертинг) │
│ • Режим дослідження для довільних запитів │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Дашборд: Огляд застосунку │ │
│ │ ┌────────────────────────────────────────────────┐ │ │
│ │ │ Частота запитів Частота помилок │ │ │
│ │ │ ┌────────────┐ ┌────────────┐ │ │ │
│ │ │ │ ▂▃▅▇█▇▅▃▂ │ │ ▂▁▁▃▁▁▁▁▂ │ │ │ │
│ │ │ │ 1.2k/s │ │ 0.5% │ │ │ │
│ │ │ └────────────┘ └────────────┘ │ │ │
│ │ ├────────────────────────────────────────────────┤ │ │
│ │ │ Затримка p99: 245ms Активні Podʼи: 5 │ │ │
│ │ └────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Підтримувані джерела даних: │
│ • Prometheus │
│ • Loki (логи) │
│ • Jaeger/Tempo (трейси) │
│ • Elasticsearch │
│ • І багато інших... │
│ │
└─────────────────────────────────────────────────────────────┘

Інструменти логування

Розділ «Інструменти логування»
┌─────────────────────────────────────────────────────────────┐
│ ІНСТРУМЕНТИ ЛОГУВАННЯ │
├─────────────────────────────────────────────────────────────┤
│ │
│ FLUENTD (CNCF Graduated) │
│ ───────────────────────────────────────────────────────── │
│ • Уніфікований шар логування │
│ • Збирає з багатьох джерел │
│ • Маршрутизує до багатьох призначень │
│ • Екосистема плагінів │
│ │
│ FLUENT BIT (CNCF Graduated, частина Fluentd) │
│ ───────────────────────────────────────────────────────── │
│ • Легковагова версія Fluentd │
│ • Менше використання ресурсів │
│ • Краще для edge/обмежених ресурсів │
│ │
│ Типовий потік: │
│ ───────────────────────────────────────────────────────── │
│ Container stdout → Fluent Bit → Elasticsearch/Loki │
│ │
│ LOKI (Grafana Labs) │
│ ───────────────────────────────────────────────────────── │
│ • Система агрегації логів │
│ • Розроблена для економічності │
│ • Індексує лише метадані (мітки) │
│ • Парується з Grafana │
│ │
│ ELK/EFK стек: │
│ ───────────────────────────────────────────────────────── │
│ • Elasticsearch (зберігання) │
│ • Logstash/Fluentd (збір) │
│ • Kibana (візуалізація) │
│ │
└─────────────────────────────────────────────────────────────┘

Інструменти трасування

Розділ «Інструменти трасування»
┌─────────────────────────────────────────────────────────────┐
│ ІНСТРУМЕНТИ ТРАСУВАННЯ │
├─────────────────────────────────────────────────────────────┤
│ │
│ JAEGER (CNCF Graduated) │
│ ───────────────────────────────────────────────────────── │
│ • Наскрізне розподілене трасування │
│ • Створений в Uber │
│ • Сумісний з OpenTracing │
│ • Аналіз залежностей сервісів │
│ │
│ Компоненти: │
│ • Jaeger Client (у вашому застосунку) │
│ • Jaeger Agent (на кожному вузлі) │
│ • Jaeger Collector │
│ • Jaeger Query/UI │
│ │
│ TEMPO (Grafana Labs) │
│ ───────────────────────────────────────────────────────── │
│ • Економічне зберігання трейсів │
│ • Зберігає лише trace ID та spanʼи │
│ • Інтегрується з Grafana │
│ │
│ ZIPKIN │
│ ───────────────────────────────────────────────────────── │
│ • Один з перших розподілених трасувальників │
│ • Створений у Twitter │
│ • Простий у налаштуванні │
│ │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ OPENTELEMETRY │
├─────────────────────────────────────────────────────────────┤
│ │
│ CNCF Incubating проєкт — ЄДИНИЙ уніфікований стандарт │
│ │
│ Що він надає: │
│ ───────────────────────────────────────────────────────── │
│ • API для інструментації коду │
│ • SDK для багатьох мов │
│ • Collector для отримання/обробки телеметрії │
│ • Уніфікований протокол (OTLP) │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ [App з OTel SDK] ──→ [OTel Collector] ──→ │ │
│ │ │ │ │
│ │ ┌─────────┼─────────┐ │ │
│ │ ▼ ▼ ▼ │ │
│ │ Prometheus Jaeger Loki │ │
│ │ (метрики) (трейси) (логи) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Чому OpenTelemetry важливий: │
│ ───────────────────────────────────────────────────────── │
│ • Незалежний від постачальника (легко змінити бекенд) │
│ • Єдина інструментація для метрик+трейсів+логів │
│ • Замінює OpenTracing та OpenCensus │
│ • Стає індустріальним стандартом │
│ │
└─────────────────────────────────────────────────────────────┘

Спостережуваність у Kubernetes

Розділ «Спостережуваність у Kubernetes»
┌─────────────────────────────────────────────────────────────┐
│ СПОСТЕРЕЖУВАНІСТЬ KUBERNETES │
├─────────────────────────────────────────────────────────────┤
│ │
│ Вбудовані метрики Kubernetes: │
│ ───────────────────────────────────────────────────────── │
│ │
│ METRICS SERVER │
│ • Метрики ресурсів (CPU, памʼять) │
│ • Використовується kubectl top │
│ • Використовується HPA для автомасштабування │
│ │
│ KUBE-STATE-METRICS │
│ • Стан обʼєктів Kubernetes │
│ • Репліки Deployment, статус Pod тощо │
│ • Доповнює metrics server │
│ │
│ Приклади запитів: │
│ ───────────────────────────────────────────────────────── │
│ │
│ # Використання ресурсів Pod │
│ container_memory_usage_bytes{pod="my-app-xyz"} │
│ │
│ # Доступність Deployment │
│ kube_deployment_status_replicas_available │
│ {deployment="frontend"} │
│ │
│ # Стан вузлів │
│ kube_node_status_condition{condition="Ready"} │
│ │
└─────────────────────────────────────────────────────────────┘

Порівняння інструментів

Розділ «Порівняння інструментів»
КатегоріяІнструментЗрілістьПримітки
МетрикиPrometheusCNCF GraduatedДе-факто стандарт
МетрикиMimirGrafana LabsМасштабований Prometheus
ЛогиFluentdCNCF GraduatedБагатофункціональний
ЛогиFluent BitCNCF GraduatedЛегковаговий
ЛогиLokiGrafana LabsЕкономічний
ТрейсиJaegerCNCF GraduatedПовнофункціональний
ТрейсиTempoGrafana LabsЕкономічний
УніфікованийOpenTelemetryCNCF IncubatingСтандартний API
ВізуалізаціяGrafanaНезалежнийБагато джерел

  • Prometheus працює на основі pull — На відміну від більшості систем моніторингу, що отримують метрики через push, Prometheus активно опитує цілі. Це полегшує виявлення недоступних цілей.

  • OpenTelemetry обʼєднав проєкти — Він поєднав OpenTracing (API трасування) та OpenCensus (бібліотеку спостережуваності Google) в один стандарт.

  • Loki не індексує вміст логів — На відміну від Elasticsearch, Loki індексує лише мітки, що робить його дешевшим, але повільнішим для повнотекстового пошуку.

  • Service mesh забезпечує спостережуваність — Istio та Linkerd автоматично збирають метрики, трейси та логи без змін коду.


ПомилкаЧому це шкодитьПравильне розуміння
Push метрик до PrometheusНе так це працюєPrometheus витягує (крім Pushgateway)
Окремі дашборди на стовпПеремикання контекстуВикористовуйте Grafana для уніфікованого перегляду
Без лімітів ресурсів на збирачахЗбирачі можуть покласти вузлиВстановлюйте належні ліміти ресурсів
Elasticsearch для всіх логівДорогоРозгляньте Loki для економії

  1. Як Prometheus збирає метрики?

    Відповідь Модель на основі витягування (pull): Prometheus опитує HTTP endpointʼи (зазвичай /metrics) через налаштовані інтервали. Цілі надають метрики у форматі Prometheus. Це відрізняється від систем на основі push.
  2. Який звʼязок між Fluentd та Fluent Bit?

    Відповідь Обидва є CNCF graduated збирачами логів. Fluent Bit є легковаговою версією Fluentd, що використовує менше ресурсів. Fluent Bit часто використовується як агент на вузлах, іноді пересилаючи дані до Fluentd для складнішої обробки.
  3. Що таке OpenTelemetry?

    Відповідь CNCF incubating проєкт, що надає незалежні від постачальника API, SDK та інструменти для генерації та збору телеметричних даних (метрики, трейси, логи). Він уніфікує інструментацію спостережуваності між мовами та інструментами.
  4. Що робить Grafana?

    Відповідь Візуалізація та дашборди. Grafana запитує кілька джерел даних (Prometheus для метрик, Loki для логів, Jaeger для трейсів) та відображає їх у налаштовуваних дашбордах. Це спільний UI для стеку спостережуваності.
  5. Для чого використовується Jaeger?

    Відповідь Розподілене трасування. Він відстежує запити при їх проходженні через мікросервіси, показуючи шлях, час та звʼязки між сервісами. Це CNCF graduated проєкт, створений в Uber.

Інструменти метрик:

  • Prometheus: CNCF graduated, pull-based, PromQL
  • Grafana: Дашборди, візуалізація з багатьох джерел

Інструменти логування:

  • Fluentd/Fluent Bit: CNCF graduated збирачі
  • Loki: Економічне зберігання логів
  • ELK: Elasticsearch, Logstash, Kibana

Інструменти трасування:

  • Jaeger: CNCF graduated, повнофункціональний
  • Tempo: Економічне зберігання трейсів

Уніфіковані:

  • OpenTelemetry: Стандартні API для всієї телеметрії

Специфічні для Kubernetes:

  • Metrics Server: Метрики ресурсів (kubectl top)
  • kube-state-metrics: Метрики стану обʼєктів

Частина 3 завершена!

Розділ «Частина 3 завершена!»

Ви завершили Хмарну нативну архітектуру (12% іспиту, включно зі спостережуваністю). Тепер ви розумієте:

  • Хмарні нативні принципи та екосистему CNCF
  • Архітектурні патерни: service mesh, serverless, GitOps
  • Три стовпи спостережуваності: метрики, логи, трейси
  • Ключові інструменти: Prometheus, Grafana, Fluentd, Jaeger, OpenTelemetry

Наступна частина: Частина 4: Доставка застосунків - Безперервна інтеграція, безперервна доставка та стратегії розгортання (16% іспиту).