Kubernetes v1.36 [alpha](стандартно вимкнено)Компоненти Kubernetes можуть експонувати метрики гістограм у форматі Prometheus Native Histogram, поряд із класичним форматом гістограм. Нативні гістограми використовують експоненційні межі кошиків замість фіксованих меж, що забезпечує значну ефективність зберігання, покращену продуктивність запитів та більш детальне відображення розподілів.
Щоб використовувати нативні гістограми, вам потрібно мати:
NativeHistograms.Класичні гістограми Prometheus використовують фіксовані межі кошиків (наприклад, [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10] секунд). Кожен кошик створює окрему часову серію (_bucket, _count, _sum), що може призвести до:
le="0.005".Нативні гістограми вирішують ці обмеження, використовуючи експоненційні межі кошиків, які автоматично підлаштовуються під розподіл даних. Переваги включають:
Коли функціональна можливість NativeHistograms увімкнена, компоненти Kubernetes одночасно експонують метрики гістограм у класичному та нативному форматах (подвійна експозиція). Формат, що повертається, залежить від заголовка Accept у HTTP-запиті (узгодження вмісту Prometheus). Prometheus автоматично встановлює цей заголовок на основі вашої конфігурації збору; вам потрібно враховувати це лише при безпосередньому запиті до точки доступу /metrics.
Текстовий формат (Accept: text/plain, OpenMetrics 1.0): Повертає лише класичні кошики гістограм. Зворотно сумісний з усіма наявними інструментами.
# Classic histogram buckets (always present)
apiserver_request_duration_seconds_bucket{le="0.005"} 1000
apiserver_request_duration_seconds_bucket{le="0.01"} 2000
...
apiserver_request_duration_seconds_bucket{le="+Inf"} 10000
apiserver_request_duration_seconds_count 10000
apiserver_request_duration_seconds_sum 450.5
Формат Protobuf (Accept: application/vnd.google.protobuf): Містить як класичні кошики, так і дані нативних гістограм. Prometheus автоматично запитує цей формат, коли scrape_native_histograms: true встановлено в конфігурації збору Prometheus для відповідного завдання збору.
Ця стратегія подвійної експозиції забезпечує:
Увімкнення нативних гістограм є двоетапним процесом: увімкніть функціональну можливість на компонентах Kubernetes і налаштуйте Prometheus для збору нативних гістограм.
Увімкніть функціональну можливість NativeHistograms на компонентах Kubernetes, з яких ви хочете експонувати нативні гістограми:
--feature-gates=NativeHistograms=true
Ця функціональна можливість застосовується до наступних компонентів:
Метрики кожного компонента є незалежними; ви можете увімкнути або вимкнути функціональну можливість для кожного компонента окремо.
Конфігурація Prometheus залежить від вашої версії Prometheus.
| Версія Prometheus | Підтримка нативних гістограм | Конфігурація | Примітки |
|---|---|---|---|
| < 2.40 | Немає | N/A | Тільки класичні гістограми. Увімкнення функціональної можливості Kubernetes не має ефекту. |
| 2.40 – 2.x | Експериментальна | --enable-feature=native-histograms (глобально) | Все або нічого; немає контролю на рівні завдання. |
| 3.0 – 3.7 | Стабільна | На рівні завдання scrape_native_histograms та always_scrape_classic_histograms | Рекомендовано конфігурацію на рівні завдання. Глобальний прапорець все ще підтримується. |
| 3.8 | Стабільна | Конфігурація на рівні завдання (необхідна для точного контролю) | Глобальний прапорець лише змінює значення за замовчуванням для всіх завдань. |
| 3.9+ | Стабільна | На рівні завдання scrape_native_histograms тільки | Глобальний прапорець видалено. Потрібно використовувати конфігурацію на рівні завдання. |
Для Prometheus 3.x використовуйте конфігурацію на рівні завдання для точного контролю:
scrape_configs:
- job_name: 'kubernetes-apiservers'
scrape_native_histograms: true # Використовує нативні гістограми
always_scrape_classic_histograms: true # Зберігає класичний формат під час міграції
Встановіть обидві опції в true під час періоду міграції. Це дозволяє збирати нативні гістограми, зберігаючи класичні гістограми для наявних інформаційних панелей.
scrape_protocols, переконайтеся, що PrometheusProto включено до списку.scrape_native_histograms: true, але always_scrape_classic_histograms: false (стандартно), Prometheus збирає лише нативні гістограми. Наявні інформаційні панелі, які використовують класичні запити гістограм (наприклад, histogram_quantile(..._bucket...)), не відображатимуть дані. Завжди встановлюйте always_scrape_classic_histograms: true під час міграції.Під час міграції з класичних запитів гістограм на нативні гістограми, дотримуйтесь цього робочого процесу:
Увімкніть обидва формати: Встановіть scrape_native_histograms: true та always_scrape_classic_histograms: true у конфігурації збору Prometheus.
Міграція запитів: Оновіть запити інформаційних панелей та вирази сповіщень з класичних функцій гістограм на еквіваленти нативних гістограм.
Класичний запит:
histogram_quantile(0.99, rate(apiserver_request_duration_seconds_bucket[5m]))
Запит для нативних гістограм:
histogram_quantile(0.99, rate(apiserver_request_duration_seconds[5m]))
Перевірка на staging: Перевірте всі інформаційні панелі та сповіщення з запитами нативних гістограм перед впровадженням в експлуатацію.
Вимкнення класичного збору: Після завершення та перевірки міграції встановіть always_scrape_classic_histograms: false, щоб зменшити обсяг зберігання.
Ви можете вимкнути нативні гістограми в будь-який час, використовуючи один із двох підходів:
На стороні Prometheus (найшвидший, не потребує перезапуску Kubernetes; тільки Prometheus 3.x): Встановіть scrape_native_histograms: false для кожного завдання збору. Prometheus відновлює збір класичного формату на наступному інтервалі збору.
Функціональна можливість Kubernetes: Перезапустіть компонент з --feature-gates=NativeHistograms=false. Після перезапуску буде доступний тільки класичний формат гістограм.
Коли нативні гістограми вимкнено, точка доступу метрик повертається до класичного формату гістограм. Історичні дані нативних гістограм у Prometheus залишаються доступними для запитів.
Інформаційні панелі не відображають дані після увімкнення нативних гістограм: Це відбувається, коли Prometheus налаштовано з scrape_native_histograms: true, але always_scrape_classic_histograms: false (зазвичай), і ваші інформаційні панелі все ще використовують класичні запити гістограм (наприклад, histogram_quantile(..._bucket...)).
Виправлення: Встановіть always_scrape_classic_histograms: true, щоб відновити збір класичного формату під час міграції інформаційних панелей.
Збільшення використання памʼяті після увімкнення нативних гістограм: Невелике збільшення памʼяті очікується для зберігання кошиків нативних гістограм, обмежене максимумом 160 кошиків на гістограму. Відстежуйте process_resident_memory_bytes для виявлення несподіваних збільшень.
Виправлення: Якщо тиск на памʼять значний, вимкніть збір нативних гістограм у Prometheus (scrape_native_histograms: false) або вимкніть функціональну можливість Kubernetes.
Логи Prometheus повідомляють про невідомий формат метрик: Ваша версія Prometheus занадто стара, щоб розуміти нативні гістограми.
Виправлення: Оновіть Prometheus до версії 2.40+ або вимкніть нативні гістограми в Kubernetes.
Не впевнені, чи нативні гістограми експонуються: Перевірте стан функціональної можливості, виконавши запит kubernetes_feature_enabled{name="NativeHistograms"} у Prometheus. Значення 1 вказує на те, що функціональна можливість увімкнена. Ви також можете безпосередньо запитати кінцеву точку метрик у форматі protobuf:
curl -H "Accept: application/vnd.google.protobuf;proto=io.prometheus.client.MetricFamily;encoding=delimited" \
https://<component-address>/metrics
Відповідь повинна містити кодування нативних гістограм для метрик гістограм.