Налаштування моніторингу серверів через Grafana та Prometheus

Ваш сайт на Laravel 11 під Nginx працює стабільно, доки не приходить пік трафіку. Замість сторінок — 502 помилка, а ви не знаєте, що перевантажено: PHP-FPM, база даних чи диск. Без моніторингу пошук причини займає години, а простій обходиться в десятки тисяч гривень на місяць. Наші інженери з сертиф

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування моніторингу серверів через Grafana та Prometheus
Складний
~3-5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1286
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Ваш сайт на Laravel 11 під Nginx працює стабільно, доки не приходить пік трафіку. Замість сторінок — 502 помилка, а ви не знаєте, що перевантажено: PHP-FPM, база даних чи диск. Без моніторингу пошук причини займає години, а простій обходиться в десятки тисяч гривень на місяць. Наші інженери з сертифікатами Prometheus та досвідом впровадження на 50+ проєктах налаштовують повноцінний стек моніторингу на Grafana та Prometheus. Ви бачите реальну картину: завантаження CPU, чергу PHP-FPM, активні транзакції PostgreSQL — де вузьке місце, одразу зрозуміло. Отримайте консультацію — оцінимо ваш проєкт за 1 день.

Чому Prometheus, а не традиційні системи?

Prometheus використовує pull-модель: він сам опитує експортери за розкладом, що спрощує виявлення нових цілей та підвищує надійність. Prometheus надає потужну мову запитів PromQL та гнучкі можливості алертингуофіційної документації). Порівняно з Zabbix, Prometheus у 2 рази швидший при зборі метрик з 10 000 експортерів. Інтеграція з Grafana дає гнучкі дашборди, а Alertmanager відправляє сповіщення в Slack, PagerDuty, email при спрацьовуванні алертів.

Що входить у налаштування моніторингу серверів?

Налаштування моніторингу серверів на Grafana та Prometheus включає встановлення експортерів системних метрик (Node Exporter), спеціалізованих експортерів для PHP-FPM, Nginx, Redis, PostgreSQL, а також створення дашбордів у Grafana та конфігурацію алертів в Alertmanager. Ми розгортаємо стек через Docker Compose, налаштовуємо правила спрацьовування (високий CPU, низька пам'ять, заповнення диска, черга PHP-FPM) з маршрутизацією в Slack та PagerDuty. Інтегруємо кастомні метрики додатку на прикладі Laravel. В результаті — повна видимість інфраструктури.

Як розгорнути стек моніторингу за 4–6 днів?

Процес розбитий на етапи, кожен з яких можна виконувати паралельно для кількох серверів:

  1. Аудит інфраструктури та проєктування — 1 день.
  2. Розгортання Prometheus, Node Exporter та Grafana — 1–2 дні.
  3. Налаштування Alertmanager з інтеграціями (Slack, PagerDuty) — +1 день.
  4. Підключення експортерів PHP-FPM, Nginx, Redis, PostgreSQL — +1–2 дні.
  5. Розробка кастомних метрик додатку — +1–2 дні.
  6. Створення дашбордів та перевірка — 1 день.
  7. Документація та навчання — 1 день.

Стек компонентів:

[Сервери] → [Node Exporter] ←── [Prometheus] ←── [Alertmanager] → [Slack/PagerDuty] [PHP-FPM] → [php-fpm_exporter] ↓ [Nginx] → [nginx-vts-exporter] [Grafana] [Redis] → [redis_exporter] [Postgres]→ [postgres_exporter] 
Приклад конфігурації Docker Compose
# docker-compose.monitoring.yml services: prometheus: image: prom/prometheus:v2.50.1 volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml - ./monitoring/alerts:/etc/prometheus/alerts - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.retention.time=30d' - '--storage.tsdb.retention.size=20GB' - '--web.enable-lifecycle' ports: - "9090:9090" alertmanager: image: prom/alertmanager:v0.27.0 volumes: - ./monitoring/alertmanager.yml:/etc/alertmanager/alertmanager.yml ports: - "9093:9093" grafana: image: grafana/grafana:10.3.0 environment: GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD} GF_SERVER_ROOT_URL: https://grafana.example.com GF_SMTP_ENABLED: "true" GF_SMTP_HOST: smtp.example.com:587 volumes: - grafana_data:/var/lib/grafana - ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards - ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources ports: - "3000:3000" node-exporter: image: prom/node-exporter:v1.7.0 command: - '--path.rootfs=/host' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' volumes: - /:/host:ro,rslave pid: host network_mode: host cadvisor: image: gcr.io/cadvisor/cadvisor:v0.49.1 volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ports: - "8080:8080" volumes: prometheus_data: grafana_data: 

Конфігурація Prometheus та правила алертів

# prometheus.yml global: scrape_interval: 15s evaluation_interval: 15s external_labels: cluster: production region: eu-west-1 alerting: alertmanagers: - static_configs: - targets: ['alertmanager:9093'] rule_files: - /etc/prometheus/alerts/*.yml scrape_configs: - job_name: node static_configs: - targets: - web01:9100 - web02:9100 - db01:9100 relabel_configs: - source_labels: [__address__] target_label: instance - job_name: php-fpm static_configs: - targets: ['web01:9253', 'web02:9253'] - job_name: nginx static_configs: - targets: ['web01:9913', 'web02:9913'] - job_name: redis static_configs: - targets: ['redis:9121'] - job_name: postgres static_configs: - targets: ['db01:9187'] - job_name: myapp metrics_path: /metrics bearer_token: ${METRICS_TOKEN} static_configs: - targets: ['web01:8080', 'web02:8080'] 
# monitoring/alerts/servers.yml groups: - name: server.alerts rules: - alert: HighCPU expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85 for: 5m labels: severity: warning annotations: summary: "Високе навантаження CPU на {{ $labels.instance }}" description: "CPU: {{ $value | printf \"%.1f\" }}%" - alert: LowMemory expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 < 10 for: 2m labels: severity: critical annotations: summary: "Критично мало пам'яті на {{ $labels.instance }}" description: "Вільно: {{ $value | printf \"%.1f\" }}%" - alert: DiskSpaceLow expr: (node_filesystem_avail_bytes{fstype!~\"tmpfs|fuse.lxcfs\"} / node_filesystem_size_bytes) * 100 < 15 for: 5m labels: severity: warning annotations: summary: "Мало місця на диску {{ $labels.instance }}:{{ $labels.mountpoint }}" - alert: HighPhpFpmQueue expr: phpfpm_listen_queue > 10 for: 1m labels: severity: warning annotations: summary: "PHP-FPM черга заповнена: {{ $value }} запитів" - alert: PostgresDown expr: pg_up == 0 for: 1m labels: severity: critical annotations: summary: "PostgreSQL недоступний на {{ $labels.instance }}" - alert: SlowQueries expr: rate(pg_stat_activity_max_tx_duration{state=\"active\"}[5m]) > 30 for: 2m labels: severity: warning annotations: summary: "Довгі запити PostgreSQL (>30 сек)" 

Alertmanager налаштовується на маршрутизацію сповіщень: критичні алерти відправляються в PagerDuty, решта — в Slack-канали #monitoring та #incidents. Групування за alertname та instance запобігає спаму.

Типові помилки при налаштуванні алертів

При налаштуванні алертів часто допускають помилки. Неправильний scrape_interval: якщо інтервал збору занадто великий, алерт може спрацювати із запізненням — рекомендуємо 15s. Ігнорування retention: за замовчуванням Prometheus зберігає дані 15 днів, для production варто збільшити до 30 днів і обмежити розмір. Відсутність групування алертів: без неї при масовому збої прийде сотня сповіщень — Alertmanager повинен групувати за alertname та instance.

Які метрики критичні для веб-додатку?

Крім системних, важливо відстежувати метрики додатку, що впливають на Core Web Vitals: LCP (завантаження контенту), TTFB (час відповіді сервера), кількість N+1 запитів. Наші дашборди включають панелі з цими показниками, щоб ви могли швидко оптимізувати продуктивність. Наприклад, зростання TTFB може сигналізувати про проблеми з PHP-FPM або базою даних, а збільшення LCP — про вузькі місця в рендерингу.

Кастомні метрики додатку (Laravel)

use Prometheus\CollectorRegistry; use Prometheus\RenderTextFormat; class MetricsController extends Controller { public function __invoke(CollectorRegistry $registry): Response { // Метрики Laravel $registry->getOrRegisterGauge('myapp', 'queue_size', 'Queue jobs count', ['queue']) ->set(Queue::size('emails'), ['emails']); $registry->getOrRegisterGauge('myapp', 'active_users', 'Active users in last 5 min') ->set(User::where('last_seen_at', '>', now()->subMinutes(5))->count()); $registry->getOrRegisterGauge('myapp', 'failed_jobs', 'Failed jobs total') ->set(DB::table('failed_jobs')->count()); $renderer = new RenderTextFormat(); return response($renderer->render($registry->getMetricFamilySamples()), 200) ->header('Content-Type', RenderTextFormat::MIME_TYPE); } } 

Основні метрики для моніторингу

Метрика Джерело даних Експортер
Завантаження CPU /proc/stat Node Exporter
Використання пам'яті /proc/meminfo Node Exporter
Вільне місце на диску Файлова система Node Exporter
Черга PHP-FPM PHP-FPM status php-fpm_exporter
Запити в секунду Nginx Nginx status nginx-vts-exporter
Кількість команд Redis Redis INFO redis_exporter
Активні транзакції PostgreSQL postgres_exporter

Почніть з системних метрик, потім додайте основні служби. Ми допоможемо визначити критичні показники для вашого проєкту. Отримайте консультацію інженера з вибору експортерів.

Графік робіт та терміни

Етап Термін
Аудит інфраструктури та проєктування 1 день
Розгортання Prometheus + Node Exporter + Grafana 1–2 дні
Налаштування Alertmanager + Slack/PagerDuty +1 день
Підключення експортерів PHP-FPM, Nginx, Redis, PostgreSQL +1–2 дні
Розробка кастомних метрик додатку +1–2 дні
Створення дашбордів та перевірка 1 день
Документація та навчання 1 день
Разом: повноцінний production стек 4–6 днів

Зв'яжіться з нами, щоб обговорити деталі впровадження моніторингу на вашому проєкті. Наші інженери з сертифікатами Prometheus та досвідом на 50+ проєктах гарантують стабільну роботу та своєчасне оповіщення про проблеми. Замовте налаштування моніторингу під ключ — оцінимо ваш проєкт за 1 день.