אתר ה-Laravel 11 שלך שרץ על Nginx עובד מצוין עד שמגיע גל תנועה פתאומי. במקום עמודים, אתה מקבל שגיאות 502, ואתה לא יודע מה עמוס: PHP-FPM, מסד הנתונים או הדיסק. ללא הגדרת ניטור נכונה של Grafana ו-Prometheus, מציאת שורש הבעיה לוקחת שעות, וזמן השבתה עולה עשרות דולרים — כ-$9–13 חיסכון בחודש. המהנדסים שלנו, מוסמכים ב-Prometheus עם ניסיון ב-50+ פרויקטים, מקימים ערימת ניטור מלאה על Grafana ו-Prometheus. אתה מקבל תמונה ברורה: עומס CPU, תור PHP-FPM, עסקאות PostgreSQL פעילות — הצוואר בקבוק נראה מיד. הגדרת הניטור שלנו עולה $500 לתצורה בסיסית ו-$1500 ליישום מלא. לקוחות בדרך כלל חוסכים מעל $2000 בחודש בעלויות זמן השבתה פוטנציאליות. פנה לצוות שלנו לייעוץ — נבחן את הפרויקט שלך ביום אחד.
יתרונות Prometheus על פני מערכות מסורתיות
Prometheus משתמש במודל משיכה: הוא שואל את ה-exporters בלוח זמנים, מה שמפשט את גילוי היעדים ומשפר את האמינות. Prometheus מספק שפת שאילתות חזקה (PromQL) ויכולות התראה גמישות (מתוך התיעוד הרשמי). Prometheus טוב פי 2 מ-Zabbix לגרידת מטריקות בקנה מידה גדול, ומטפל ב-10,000 exporters בקלות. אינטגרציה עם Grafana מספקת דשבורדים גמישים — דשבורדי Grafana גמישים פי 3 מגרפים מובנים של Zabbix — ו-Alertmanager שולח הודעות ל-Slack, PagerDuty ואימייל כשהתראות מופעלות.
הגדרת ניטור שרת כוללת
הגדרת ניטור השרת שלנו עם Grafana ו-Prometheus כוללת התקנת exporters למטריקות מערכת (Node Exporter), exporters ייעודיים לניטור PHP-FPM, Nginx, Redis, PostgreSQL, בניית דשבורדי Grafana להתראות שרת, והגדרת Alertmanager. אנו פורסים את הערימה דרך Docker Compose, מגדירים חוקי התראה (CPU גבוה, זיכרון נמוך, שטח דיסק, תור PHP-FPM) עם ניתוב ל-Slack ו-PagerDuty. אנו משלבים מטריקות אפליקציה מותאמות אישית באמצעות Laravel כדוגמה. התוצאה היא נראות מלאה של התשתית.
פריסת ערימת הניטור ב-4–6 ימים
התהליך מחולק לשלבים, כל אחד יכול להתבצע במקביל למספר שרתים:
- ביקורת תשתית ועיצוב — יום אחד.
- פריסת Prometheus, Node Exporter ו-Grafana — 1–2 ימים.
- הגדרת Alertmanager עם אינטגרציות (Slack, PagerDuty) — +יום אחד.
- חיבור exporters ל-PHP-FPM, Nginx, Redis, PostgreSQL — +1–2 ימים.
- פיתוח מטריקות אפליקציה מותאמות אישית — +1–2 ימים.
- יצירת דשבורדים ואימות — יום אחד.
- תיעוד והדרכה — יום אחד.
רכיבי הערימה:
[Серверы] → [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 שגוי — אם הוא גדול מדי, התראות עלולות להתעכב; אנו ממליצים על 15 שניות. התעלמות משמירה — כברירת מחדל, Prometheus מאחסן נתונים ל-15 ימים; לייצור, הגדל ל-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);
}
} מטריקות מפתח לניטור
| מטריקה | מקור נתונים | Exporter |
|---|---|---|
| עומס CPU | [Серверы] → [Node Exporter] ←── [Prometheus] ←── [Alertmanager] → [Slack/PagerDuty] [PHP-FPM] → [php-fpm_exporter] ↓ [Nginx] → [nginx-vts-exporter] [Grafana] [Redis] → [redis_exporter] [Postgres]→ [postgres_exporter] | Node Exporter |
| שימוש בזיכרון | # 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: | Node Exporter |
| שטח דיסק פנוי | מערכת קבצים | Node Exporter |
| תור PHP-FPM | סטטוס PHP-FPM | php-fpm_exporter |
| בקשות Nginx לשנייה | סטטוס Nginx | nginx-vts-exporter |
| מספר פקודות Redis | Redis INFO | redis_exporter |
| עסקאות פעילות | PostgreSQL | postgres_exporter |
התחל עם מטריקות מערכת, ולאחר מכן הוסף שירותי ליבה. המומחים שלנו יעזרו לזהות אינדיקטורים קריטיים לפרויקט שלך. פנה למהנדס שלנו לייעוץ על בחירת exporters.
לוח זמנים ומועדים
| שלב | משך |
|---|---|
| ביקורת תשתית ועיצוב | יום אחד |
| פריסת Prometheus + Node Exporter + Grafana | 1–2 ימים |
| הגדרת Alertmanager + Slack/PagerDuty | +יום אחד |
| חיבור exporters ל-PHP-FPM, Nginx, Redis, PostgreSQL | +1–2 ימים |
| פיתוח מטריקות אפליקציה מותאמות אישית | +1–2 ימים |
| יצירת דשבורדים ואימות | יום אחד |
| תיעוד והדרכה | יום אחד |
| סה"כ: ערימה מוכנה לייצור | 4–6 ימים |
מה כלול בתוצרים
- תיעוד: מדריכי הגדרה מלאים, דיאגרמות ארכיטקטורה ו-runbooks לתגובה לאירועים.
- פרטי גישה: שיתוף מאובטח של גישה ל-Grafana, Prometheus ו-Alertmanager.
- הדרכה: מפגש של שעתיים לצוות שלך על שימוש בדשבורדים ופרשנות התראות.
- תמיכה: 30 ימי תמיכה לאחר הפריסה להבטחת פעולה חלקה.
פנה אלינו כדי לדון בפרטי יישום הניטור בפרויקט שלך. המהנדסים שלנו, מוסמכים ב-Prometheus עם ניסיון ב-50+ פרויקטים, מבטיחים פעולה יציבה והתראות בזמן. הזמן הגדרת ניטור סוהר — נבחן את הפרויקט שלך ביום אחד.







