[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-nablyudaemost-chto-takoe-prometheus-i-kak-on-sobiraet-metriki":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},762,"chto-takoe-prometheus-i-kak-on-sobiraet-metriki",20,"nablyudaemost","Наблюдаемость","📊","Что такое Prometheus и как он собирает метрики?","Prometheus — open-source система мониторинга и алертинга (CNCF), основанная на модели временных рядов (time series database). Главная особенность — pull-модель: Prometheus сам периодически опрашивает (scrape) endpoints приложений по HTTP.\n\n```\n┌──────────────┐    GET \u002Factuator\u002Fprometheus     ┌──────────────┐\n│  Prometheus  │ ─────────────────────────────►  │  Spring Boot │\n│   Server     │ ◄─────────────────────────────  │  Application │\n│              │    text\u002Fplain (metrics)          │              │\n└──────────────┘                                  └──────────────┘\n     │  scrape каждые 15s\n     ▼\n┌──────────────┐\n│   TSDB       │  Хранение временных рядов\n│  (storage)   │\n└──────────────┘\n```\n\n**Преимущества pull-модели:**\n- Prometheus сам контролирует частоту и таймауты\n- Легко обнаружить «упавший» сервис (scrape failed)\n- Не нужно настраивать push-агенты на каждом сервисе\n- Проще отлаживать: можно зайти на endpoint вручную\n\n\u003Cdetails>\u003Csummary>Конфигурация prometheus.yml\u003C\u002Fsummary>\n\n```yaml\n# prometheus.yml\nglobal:\n  scrape_interval: 15s\n  evaluation_interval: 15s\n\nrule_files:\n  - \"alert_rules.yml\"\n  - \"recording_rules.yml\"\n\nalerting:\n  alertmanagers:\n    - static_configs:\n        - targets: ['alertmanager:9093']\n\nscrape_configs:\n  - job_name: 'prometheus'\n    static_configs:\n      - targets: ['localhost:9090']\n\n  - job_name: 'order-service'\n    metrics_path: '\u002Factuator\u002Fprometheus'\n    scrape_interval: 10s\n    static_configs:\n      - targets: ['order-service:8080']\n        labels:\n          environment: 'production'\n\n  # Service Discovery в Kubernetes\n  - job_name: 'kubernetes-pods'\n    kubernetes_sd_configs:\n      - role: pod\n    relabel_configs:\n      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]\n        action: keep\n        regex: true\n      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]\n        action: replace\n        target_label: __metrics_path__\n        regex: (.+)\n```\n\n\u003C\u002Fdetails>\n\n### Типы метрик в Prometheus\n\n| Тип | Описание | Функции PromQL |\n|-----|----------|---------------|\n| counter | Монотонно растущее значение | `rate()`, `increase()`, `irate()` |\n| gauge | Значение, меняющееся в обе стороны | `avg()`, `min()`, `max()`, `delta()` |\n| histogram | Распределение значений по бакетам | `histogram_quantile()`, `rate()` по бакетам |\n| summary | Клиентские перцентили (вычисляются на стороне приложения) | Прямое чтение перцентилей |\n\n### PromQL — язык запросов\n\n```promql\n# Скорость роста (requests per second) за последние 5 минут\nrate(http_server_requests_seconds_count{job=\"order-service\"}[5m])\n\n# Процент ошибок (5xx)\nsum(rate(http_server_requests_seconds_count{status=~\"5..\"}[5m]))\n\u002F\nsum(rate(http_server_requests_seconds_count[5m]))\n* 100\n\n# 99-й перцентиль времени ответа\nhistogram_quantile(0.99,\n  sum(rate(http_server_requests_seconds_bucket{job=\"order-service\"}[5m])) by (le)\n)\n\n# Память JVM heap\njvm_memory_used_bytes{area=\"heap\"} \u002F jvm_memory_max_bytes{area=\"heap\"} * 100\n```\n\n\u003Cdetails>\u003Csummary>Recording Rules и Alerting Rules\u003C\u002Fsummary>\n\n```yaml\n# recording_rules.yml\ngroups:\n  - name: http_rules\n    interval: 30s\n    rules:\n      - record: job:http_requests:rate5m\n        expr: sum(rate(http_server_requests_seconds_count[5m])) by (job)\n\n      - record: job:http_errors:rate5m\n        expr: sum(rate(http_server_requests_seconds_count{status=~\"5..\"}[5m])) by (job)\n\n      - record: job:http_error_ratio:rate5m\n        expr: job:http_errors:rate5m \u002F job:http_requests:rate5m\n```\n\n```yaml\n# alert_rules.yml\ngroups:\n  - name: application_alerts\n    rules:\n      - alert: HighErrorRate\n        expr: job:http_error_ratio:rate5m > 0.05\n        for: 5m\n        labels:\n          severity: critical\n        annotations:\n          summary: \"High error rate on {{ $labels.job }}\"\n          description: \"Error rate is {{ $value | humanizePercentage }} for 5 minutes\"\n\n      - alert: HighLatency\n        expr: histogram_quantile(0.99, sum(rate(http_server_requests_seconds_bucket[5m])) by (le, job)) > 1\n        for: 10m\n        labels:\n          severity: warning\n        annotations:\n          summary: \"High p99 latency on {{ $labels.job }}\"\n          description: \"p99 latency is {{ $value }}s\"\n```\n\n\u003C\u002Fdetails>\n\n### Важное\n- Prometheus хранит данные **локально** на диске. Для долгосрочного хранения используйте remote storage (Thanos, Cortex, Grafana Mimir).\n- **Pull-модель** не подходит для короткоживущих задач (batch jobs). Для них используйте **Pushgateway**.\n- **Лейблы** — мощный инструмент, но каждая уникальная комбинация лейблов создаёт отдельный time series. Следите за кардинальностью.\n- Prometheus **не гарантирует** 100% точность данных: при перезапуске возможны пробелы, scrape может не совпадать с моментом события.\n\n### Частые ошибки\n- **Не использовать `rate()` для counter**: абсолютное значение counter бесполезно, нужна скорость изменения.\n- **Слишком короткий `[range]` в `rate()`**: `rate(...[1m])` при scrape_interval=15s даст всего 4 точки — шумно и неточно. Рекомендуется `[5m]`.\n- **Хранить метрики вечно**: Prometheus не предназначен для долгосрочного хранения. Настройте retention (по умолчанию 15 дней).\n- **Злоупотребление Pushgateway**: он предназначен только для batch jobs, не для замены pull-модели.\n\n### Как используется в 2026\n- **Prometheus 3.x** с нативными гистограммами (Native Histograms) и улучшенной производительностью TSDB.\n- **Grafana Mimir** — горизонтально масштабируемое долгосрочное хранилище, совместимое с Prometheus API.\n- **Prometheus Agent Mode** — режим, в котором Prometheus только скрейпит и отправляет метрики через remote write, не храня данных локально.\n- **Service Discovery** — автоматическое обнаружение целей через Kubernetes SD, Consul SD, DNS SD.\n- **OpenMetrics** — стандартизированный формат метрик (эволюция Prometheus exposition format), поддерживаемый OTel.\n\n> **На собеседовании:** акцентируйте внимание на pull-модели — это главная архитектурная особенность Prometheus. Покажите знание PromQL хотя бы на уровне `rate()` и `histogram_quantile()`. Частая ошибка — не упомянуть ограничения (локальное хранение, проблема кардинальности лейблов).","","middle",[15],"observability",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое Prometheus и как он собирает метрики? — Gymterview","Prometheus — open-source система мониторинга и алертинга (CNCF), основанная на модели временных рядов (time series database). Главная особенность — pull-модель:","Prometheus — open-source система мониторинга и алертинга (CNCF), основанная на модели временных рядов (time series datab",[15,13],"Prometheus — open-source система мониторинга и алертинга (CNCF), основанная на модели временных рядов (time series database). Главная особенность — pull-модель: Prometheus сам периодически опрашивает (scrape) endpoints приложений по HTTP.",true]