הגדרת ניטור שרתים עם Grafana ו-Prometheus

כשהשרתים פועלים ללא תקלות, לא חושבים על זה. אבל עליית תעבורה יכולה להפוך את האתר לשגיאת 502, וכל שעת השבתה פוגעת בעסק. אנחנו מקימים ניטור עם Grafana ו-Prometheus כדי שתראו את התמונה האמיתית של העומס וצווארי הבקבוק. הצוות שלנו מספק את הפרויקט במפתח מלא—מהתקנת exporters ועד התראות במסנג'רים—עם תמיכה מתמשכת.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת ניטור שרתים עם Grafana ו-Prometheus
מורכב
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1501
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1306
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

אתר ה-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 ימים

התהליך מחולק לשלבים, כל אחד יכול להתבצע במקביל למספר שרתים:

  1. ביקורת תשתית ועיצוב — יום אחד.
  2. פריסת Prometheus, Node Exporter ו-Grafana — 1–2 ימים.
  3. הגדרת Alertmanager עם אינטגרציות (Slack, PagerDuty) — +יום אחד.
  4. חיבור exporters ל-PHP-FPM, Nginx, Redis, PostgreSQL — +1–2 ימים.
  5. פיתוח מטריקות אפליקציה מותאמות אישית — +1–2 ימים.
  6. יצירת דשבורדים ואימות — יום אחד.
  7. תיעוד והדרכה — יום אחד.

רכיבי הערימה:

[Серверы] → [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+ פרויקטים, מבטיחים פעולה יציבה והתראות בזמן. הזמן הגדרת ניטור סוהר — נבחן את הפרויקט שלך ביום אחד.