Метрики Prometheus: отслеживайте производительность вашего приложения

Метрики Prometheus: отслеживайте производительность вашего приложения
Что такое Prometheus?
Prometheus — это инструмент с открытым исходным кодом, который отслеживает производительность и состояние программных систем. Он собирает точки данных, известные как метрики, которые дают представление о том, насколько хорошо работает система. Эти метрики помогают рано обнаруживать проблемы и анализировать поведение системы. С Prometheus команды могут замечать проблемы до того, как они повлияют на пользователей, чтобы поддерживать надежные и эффективные сервисы.
Что такое метрики в Prometheus?
В Prometheus метрики — это числовые значения, которые отслеживают определенные аспекты поведения и производительности системы с течением времени. Эти метрики помогают понять, насколько хорошо система функционирует в различных условиях, а также предоставляют оповещения в условиях, которые могут указывать на проблемы, такие как внезапный всплеск трафика или снижение производительности системы. Они могут отслеживать широкий спектр данных: от количества активных пользователей на веб-сайте до объема памяти, используемой приложением.
Формат метрик в Prometheus
Метрики в Prometheus хранятся в формате временных рядов, при этом каждая метрика идентифицируется своим именем и необязательными парами ключ-значение, называемыми метками, которые предоставляют дополнительный контекст, например имена сервисов или типы ошибок. Основным форматом данных метрик в Prometheus является Prometheus Exposition Format. Этот формат обычного текста легко генерировать и анализировать; он состоит из строк данных, включающих имя метрики, необязательные метки, значение метрики и временную метку.
Четыре типа метрик в Prometheus
Prometheus классифицирует метрики на четыре основных типа: счетчики, датчики, гистограммы и сводки. Каждый тип выполняет определенную функцию в мониторинге и предоставляет разные сведения о поведении ваших систем.
Метрики-счетчики
Метрики-счетчики в Prometheus фиксируют количество раз, когда происходит определенное событие. Они только увеличиваются со временем или сбрасываются до нуля при перезапуске процесса. Поэтому они используются для отслеживания накопительных величин, таких как количество обработанных запросов, выполненных задач или зарегистрированных ошибок.
Чтобы реализовать счетчик, который отслеживает количество запросов, полученных сервером, вы можете использовать следующий фрагмент кода. В этом примере настраивается счетчик для мониторинга общего количества полученных HTTP-запросов. Каждый раз, когда вызывается функция handle_request, счетчик увеличивается.
from prometheus_client import Counter
# Create a counter metric for tracking received requests
request_counter = Counter('http_requests_received_total', 'Total HTTP requests received')
def handle_request(request):
# Process the request
# ...
# Increment the counter by 1 each time this function is called
request_counter.inc()
Рекомендации по использованию счетчиков
Осведомленность о сбросах: Помните, что счетчики сбрасываются до нуля при перезапуске процесса. Проектируйте мониторинг с учетом этих сбросов.
Используйте метки: Используйте метки со счетчиками, чтобы получать более подробные сведения, например различать разные типы ошибок или запросов.
Последовательное увеличение: Убедитесь, что счетчик увеличивается в правильном месте вашего кода, чтобы точно отражать события, которые вы отслеживаете.
Мониторинг сбросов: Используйте функцию rate в запросах, чтобы рассчитывать среднюю скорость увеличения счетчика в секунду; это может помочь понять тенденции и обнаружить проблемы даже при сбросах.
Метрики-датчики
Метрики-датчики в Prometheus измеряют значения, которые могут увеличиваться и уменьшаться, такие как температуры CPU, текущее количество запущенных процессов или объемы свободной памяти. В отличие от счетчиков, которые только растут, датчики отражают текущее состояние системы в конкретный момент времени, что делает их необходимыми для отслеживания колеблющихся метрик.
Чтобы реализовать gauge, который отслеживает объем свободной памяти в системе, вы можете использовать следующий фрагмент кода. В этом примере настраивается gauge для мониторинга свободной памяти, обновляя значение gauge путем вызова функции update_free_memory(), которая должна запускаться для отражения изменений в системе.
from prometheus_client import Gauge
# Create a gauge metric to track free memory
free_memory_gauge = Gauge('system_free_memory_bytes', 'Amount of free memory in bytes')
def update_free_memory():
# Assume get_free_memory() is a function that fetches the current free memory
free_memory = get_free_memory()
free_memory_gauge.set(free_memory)
# Update gauge regularly or upon specific system events
update_free_memory()
Советы по использованию gauges
Регулярные обновления: Убедитесь, что gauges регулярно обновляются, чтобы точно отражать текущее состояние системы.
Контекстное использование: Используйте gauges для метрик, которым требуется отслеживать подъемы и падения с течением времени, например среднюю нагрузку или доступные системные ресурсы.
Избегайте неправильного использования: Будьте осторожны и не используйте gauges для метрик, которые должны только увеличиваться или уменьшаться, где counter или histogram могут быть более подходящими.
Метрики Histogram
Histograms в Prometheus обобщают распределение числовых данных по набору заранее определенных buckets. Каждый bucket представляет диапазон значений, а histogram подсчитывает, сколько значений попадает в каждый bucket. Этот тип метрики полезен для отслеживания измерений, таких как задержки запросов или размеры ответов, где понимание распределения может дать больше информации, чем простое знание среднего значения.
Чтобы реализовать histogram, который отслеживает задержку HTTP-запросов, вы можете использовать следующий фрагмент кода. В этом примере настраивается histogram с несколькими buckets для измерения того, сколько времени занимает обработка каждого HTTP-запроса. Блок with автоматически измеряет длительность обработки запроса и записывает ее в соответствующий bucket.
from prometheus_client import Histogram
# Define a histogram with buckets for request latency
request_latency_histogram = Histogram('http_request_latency_seconds', 'HTTP request latencies', buckets=[0.1, 0.2, 0.5, 1, 2, 5])
def handle_request(request):
with request_latency_histogram.time():
# Process the request
# This automatically measures the time taken by this block and records it in the histogram
pass
Buckets histogram и их важность
Проектирование buckets: Выбор правильных buckets имеет решающее значение для полезных histograms. Buckets должны соответствовать целям и пороговым значениям производительности вашего приложения. Например, если вам важно различать запросы, которые занимают 0,1 секунды и 1 секунду, ваши buckets должны отражать эти интервалы.
Гранулярность: Большее количество buckets повышает гранулярность histogram, но также увеличивает использование памяти. Балансируйте детализацию с эффективностью использования ресурсов.
Кумулятивный подсчет: Histograms в Prometheus являются кумулятивными. Это означает, что каждый bucket подсчитывает общее количество наблюдений, которые попадают в его диапазон и во все предыдущие диапазоны. Это вычисляет процентили, которые более информативны о распределении данных, чем средние значения.
Использование в запросах: При запросе histograms функции вроде histogram
_quantile()могут вычислять квантили из кумулятивных buckets, предоставляя мощные сведения о характеристиках производительности вашей системы.
Метрики Summary
Метрики Summary в Prometheus предоставляют способ вычислять квантили наблюдений, например 90-й процентиль задержек запросов, непосредственно в клиенте. В отличие от histograms, которые собирают и классифицируют данные по buckets, summaries вычисляют потоковые квантили без заранее определенных buckets. Это делает summaries идеальными для ситуаций, где необходимы точные вычисления квантилей, особенно когда важны точные пороговые значения, например при отчетности по соглашениям об уровне обслуживания (SLAs).
Чтобы реализовать summary, измеряющий задержку запросов к базе данных, вы можете использовать следующий фрагмент кода. В этом примере настраивается summary для мониторинга времени выполнения запросов к базе данных. Блок with измеряет длительность запроса и обновляет summary этим новым наблюдением, облегчая расчёт квантилей.
from prometheus_client import Summary
# Create a summary to measure database query latencies
db_query_latency = Summary('db_query_latency_seconds', 'Database query latencies')
def query_database(query):
with db_query_latency.time():
# Execute the database query
# The time taken by this block is automatically recorded and calculated in the summary
pass
Различие между гистограммами и summary
Расчёт квантилей: Гистограммы оценивают квантили на основе заданных buckets, что может вносить неточности в зависимости от конфигурации buckets. Summary вычисляют квантили непосредственно из наблюдаемых данных, потенциально обеспечивая более высокую точность.
Нагрузка на стороне клиента: Summary вычисляют квантили на стороне клиента, что может увеличить вычислительную нагрузку, особенно при большом числе наблюдений. Гистограммы, со своими заранее определёнными buckets, могут снизить объём вычислений на стороне клиента.
Конфигурация: Гистограммы требуют предварительного понимания распределения, чтобы задать подходящие buckets. Summary не требуют настройки buckets, что упрощает их первоначальное развёртывание, но потенциально делает их более ресурсоёмкими.
Сценарии использования: Summary предпочтительны, когда для критически важных метрик нужны точные квантили в реальном времени, тогда как гистограммы часто лучше подходят для фиксации более широкого распределения метрики, где точные пороговые значения менее критичны.
Лучшие практики для маркировки и группировки метрик
Правильное использование меток
Метки в Prometheus — это пары ключ-значение, которые прикрепляют метаданные к метрикам для более детальных и целевых запросов. Они важны для организации и идентификации метрик по измерениям, таким как имена сервисов, имена хостов или типы ошибок. Вот несколько лучших практик использования меток:
Описательные и согласованные: Выбирайте имена меток, которые ясно описывают их назначение, и поддерживайте согласованность во всех ваших метриках. Например, используйте service для всех метрик, которые идентифицируют сервис, к которому они относятся.
Необходимая детализация: Хотя метки могут добавить значительную детализацию вашим метрикам, слишком большое число меток может увеличить затраты на хранение и снизить производительность запросов. Используйте метки осмотрительно, чтобы сбалансировать детализацию и производительность.
Избегайте высокой кардинальности: Метки с высокой кардинальностью, например такие, которые могут помечать каждого отдельного пользователя или адрес электронной почты, могут увеличить размер данных и ухудшить производительность. Придерживайтесь меток, имеющих разумное число различных значений.
Этот пример показывает счётчик, который использует метки для различения разных HTTP-методов и статусов для детального анализа и мониторинга.
from prometheus_client import Counter
# Create a counter with labels for HTTP methods and response statuses
http_requests_total = Counter('http_requests_total', 'Total HTTP requests',
['method', 'status'])
def handle_request(request):
# Increment the counter with the appropriate labels
http_requests_total.labels(method=request.method, status=request.response.status_code).inc()
Стратегии группировки метрик
Логическая группировка метрик может повысить ясность и улучшить производительность систем мониторинга. Вот несколько стратегий:
Категоризация по типу: Группируйте метрики по типу, например ошибки, трафик, задержка и т. д., чтобы упростить поиск и анализ связанных метрик.
Группировка на основе сервисов: Организуйте метрики по сервису, который они измеряют. Это помогает быстро изолировать проблемы внутри конкретного сервиса.
Используйте иерархическое именование: При именовании метрик рассмотрите иерархическую структуру, отражающую их группировку, например
service_database_queries_totalилиservice_http_requests_total.
Преимущества эффективной группировки
Повышенная производительность запросов: Логическая группировка может привести к более эффективным запросам за счет сокращения количества метрик, которые необходимо сканировать для каждого запроса.
Более простое управление оповещениями: Группировка схожих метрик упрощает создание правил оповещений и облегчает управление оповещениями в разных частях вашей системы.
Лучшая визуализация: Сгруппированные метрики легче визуализировать на дашбордах, поскольку связанные метрики можно отображать вместе, обеспечивая целостное представление о производительности системы.
Запрос метрик с помощью PromQL
Основы PromQL и его синтаксиса
PromQL, или Prometheus Query Language, — это мощный язык запросов, используемый Prometheus для исследования данных и создания оповещений. PromQL позволяет выполнять простые и сложные запросы для вычисления точных данных, необходимых из ваших метрик. Синтаксис PromQL поддерживает выбор и агрегирование данных временных рядов на основе имен метрик, меток и временных интервалов.
Ключевые возможности PromQL:
Мгновенные запросы и запросы диапазона: Мгновенные запросы дают текущее значение временного ряда для конкретного момента времени, тогда как запросы диапазона возвращают значения временного ряда за определенный период времени.
Функции и операторы: PromQL включает различные встроенные функции и операторы для расчета скоростей, средних значений и арифметических операций между метриками.
Фрагменты кода: распространенные запросы для каждого типа метрик
Метрики-счетчики
Этот запрос вычисляет среднюю посекундную скорость HTTP-запросов за последние 5 минут, что полезно для мониторинга нагрузки трафика на ваши серверы.
rate(http_requests_total[5m])
Метрики-измерители
Этот мгновенный запрос получает текущий объем свободной памяти, предоставляя снимок системных ресурсов.
node_memory_MemFree_bytes
Метрики-гистограммы
Следующий запрос вычисляет 95-й процентиль задержек запросов за последние 10 минут, что помогает выявлять выбросы в производительности веб-сервера.
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[10m]))
Метрики-сводки
Запрос ниже вычисляет медианную задержку обработанных событий, что крайне важно для оценки производительности систем обработки событий.
quantile(0.5, rate(processed_events_latency_seconds_sum[5m]) / rate(processed_events_latency_seconds_count[5m]))
Советы для эффективных запросов с PromQL:
Используйте подходящие временные диапазоны: Выбирайте временные диапазоны, которые дают содержательные сведения, не перегружая систему длительными запросами к историческим данным.
Используйте фильтрацию по меткам: Используйте метки для фильтрации и уточнения результатов, фокусируясь на конкретных подмножествах данных.
Оптимизируйте производительность: При написании запросов, особенно для дашбордов или оповещений, учитывайте их влияние на производительность и оптимизируйте их для эффективного выполнения.
Мониторинг производительности векторной базы данных Milvus с помощью Prometheus
Milvus — это open-source, высокопроизводительная и высокомасштабируемая векторная база данных, которая может хранить, индексировать и искать неструктурированные данные миллиардного масштаба с помощью высокоразмерных векторных эмбеддингов. Она идеально подходит для создания современных AI-приложений, таких как генерация с дополненным поиском (RAG), семантический поиск, мультимодальный поиск и рекомендательные системы. Milvus эффективно работает в различных средах, от ноутбуков и периферийных устройств до крупномасштабных распределенных систем.
Prometheus предлагает широкие возможности для контроля производительности векторной базы данных Milvus. Milvus бесшовно интегрируется с Prometheus через:
Prometheus Endpoint: Собирает данные из различных экспортеров.
Prometheus Operator: Упрощает управление настройками мониторинга Prometheus.
Kube-Prometheus: Упрощает полноценный мониторинг кластера Kubernetes для надежной работы.
Использование Prometheus позволяет отслеживать критически важные метрики производительности Milvus, такие как время ответа на запросы и использование ресурсов (CPU, GPU и память), обеспечивая проактивное устранение проблем и оптимизацию системы. Кроме того, интеграция Prometheus с Grafana дополнительно усиливает вашу систему мониторинга, предоставляя подробные панели мониторинга для углубленного анализа и эффективного обслуживания развертываний Milvus, адаптированных для приложений GenAI и поиска по сходству.
Для получения подробных рекомендаций по настройке Prometheus для Milvus и визуализации метрик с помощью Grafana изучите ресурсы ниже:
Мониторинг Milvus с помощью Prometheus | Документация Milvus
Визуализация метрик Milvus с помощью Grafana | Документация Milvus
Заключение
В заключение, Prometheus — это ценный инструмент для мониторинга различных метрик, отражающих состояние и производительность систем. Используя возможности Prometheus для отслеживания, анализа и визуализации критически важных операционных данных, команды могут улучшить свои практики мониторинга и убедиться, что их системы не только стабильны, но и оптимизированы для эффективности. Будь то настройка оповещений для раннего выявления потенциальных проблем или использование подробных панелей мониторинга для ясного представления системных метрик, Prometheus помогает разработчикам и администраторам поддерживать высокопроизводительные и надежные сервисы.
FAQs
- Какие четыре типа метрик существуют в Prometheus?
Prometheus классифицирует метрики на четыре типа: счетчики, измерители, гистограммы и сводки. Каждый тип служит определенной цели мониторинга — от подсчета случаев наступления событий до фиксации распределения измерений во времени.
- Как выбрать между использованием гистограммы и сводки?
Выбирайте гистограммы, когда вам нужно фиксировать распределения и вы можете заранее определить значимые интервалы. Используйте сводки, когда вам нужны точные вычисления квантилей и не требуются заранее заданные интервалы. Выбор зависит от вашего конкретного сценария использования и соображений производительности.
- Что такое PromQL и как он используется в Prometheus?
PromQL, или Prometheus Query Language, — это мощный язык, используемый для запросов метрик в Prometheus. Он позволяет пользователям выбирать и агрегировать данные временных рядов, выполнять вычисления и получать выводы из метрик на основе определенных условий и временных диапазонов.
- Могу ли я использовать Prometheus для мониторинга приложений, не построенных на микросервисной архитектуре?
Да, Prometheus достаточно универсален, чтобы мониторить широкий спектр приложений, независимо от того, построены ли они с использованием микросервисной архитектуры или более традиционного монолитного подхода. Его можно настроить для сбора метрик практически из любого источника, который предоставляет данные в Prometheus Exposition Format.
- Каковы некоторые лучшие практики для маркировки и группировки метрик в Prometheus?
При маркировке и группировке метрик убедитесь, что метки являются описательными и согласованными для разных метрик. Избегайте меток с высокой кардинальностью, которые могут снижать производительность. Группируйте метрики логически по типу или сервису, чтобы повысить ясность и улучшить эффективность запросов. Это помогает поддерживать организованную систему мониторинга, в которой проще выполнять запросы и которой легче управлять.
Дополнительные ресурсы
- Что такое Prometheus?
- Что такое метрики в Prometheus?
- Формат метрик в Prometheus
- Четыре типа метрик в Prometheus
- Лучшие практики для маркировки и группировки метрик
- Запрос метрик с помощью PromQL
- Мониторинг производительности векторной базы данных Milvus с помощью Prometheus
- Заключение
- FAQs
- Дополнительные ресурсы
Контент
Начните бесплатно, масштабируйтесь легко
Попробуйте полностью управляемую векторную базу данных, созданную для ваших GenAI приложений.
Попробуйте Zilliz Cloud бесплатно

