Модуль 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
Розділ «Prometheus»┌─────────────────────────────────────────────────────────────┐│ 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
Розділ «Компоненти Prometheus»| Компонент | Призначення |
|---|---|
| Prometheus Server | Збирає та зберігає метрики |
| AlertManager | Обробляє алерти, маршрутизацію, замовчування |
| Pushgateway | Для короткоживучих завдань (push метрик) |
| Exporters | Надають метрики від систем |
| Клієнтські бібліотеки | Інструментують ваш код |
Grafana
Розділ «Grafana»┌─────────────────────────────────────────────────────────────┐│ 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
Розділ «OpenTelemetry»┌─────────────────────────────────────────────────────────────┐│ 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"} ││ │└─────────────────────────────────────────────────────────────┘Порівняння інструментів
Розділ «Порівняння інструментів»| Категорія | Інструмент | Зрілість | Примітки |
|---|---|---|---|
| Метрики | Prometheus | CNCF Graduated | Де-факто стандарт |
| Метрики | Mimir | Grafana Labs | Масштабований Prometheus |
| Логи | Fluentd | CNCF Graduated | Багатофункціональний |
| Логи | Fluent Bit | CNCF Graduated | Легковаговий |
| Логи | Loki | Grafana Labs | Економічний |
| Трейси | Jaeger | CNCF Graduated | Повнофункціональний |
| Трейси | Tempo | Grafana Labs | Економічний |
| Уніфікований | OpenTelemetry | CNCF 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 для економії |
Тест
Розділ «Тест»-
Як Prometheus збирає метрики?
Відповідь
Модель на основі витягування (pull): Prometheus опитує HTTP endpointʼи (зазвичай /metrics) через налаштовані інтервали. Цілі надають метрики у форматі Prometheus. Це відрізняється від систем на основі push. -
Який звʼязок між Fluentd та Fluent Bit?
Відповідь
Обидва є CNCF graduated збирачами логів. Fluent Bit є легковаговою версією Fluentd, що використовує менше ресурсів. Fluent Bit часто використовується як агент на вузлах, іноді пересилаючи дані до Fluentd для складнішої обробки. -
Що таке OpenTelemetry?
Відповідь
CNCF incubating проєкт, що надає незалежні від постачальника API, SDK та інструменти для генерації та збору телеметричних даних (метрики, трейси, логи). Він уніфікує інструментацію спостережуваності між мовами та інструментами. -
Що робить Grafana?
Відповідь
Візуалізація та дашборди. Grafana запитує кілька джерел даних (Prometheus для метрик, Loki для логів, Jaeger для трейсів) та відображає їх у налаштовуваних дашбордах. Це спільний UI для стеку спостережуваності. -
Для чого використовується 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% іспиту).