ניטור צד שרת למובייל: הגדרת Prometheus + Grafana

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

פיתוח ותמיכה בכל סוגי היישומים הניידים:

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

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

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

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

שאלות נפוצות

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

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

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

עם ניסיון של 5+ שנים, השלמנו מעל 50 הטמעות לפרויקטים של iOS ו-Android — מסטארטאפים ועד ארגונים. אנו מבטיחים שתוך 2 ימים מתחילת העבודה תהיה לכם לוח בקרה פעיל עם מדדים מרכזיים. ההשקעה בניטור מתחילה מ-$2,000 עבור הגדרה בסיסית, ומפחיתה עלויות תקלות בעד 80%. ההשקעה מחזירה את עצמה במהירות: היא מפחיתה את זמן גילוי התקלות ב-85%.

למה Prometheus?

לפי תיעוד Prometheus, מודל המשיכה (pull model) של איסוף מדדים מפשט גילוי של יעדים חדשים באמצעות service discovery ומפחית עומס רשת. Prometheus מתקנה ל-10^6 מדדים לכל מופע, פי 10 יותר מ-Zabbix, שמתחיל לפגר ב-10^5. מודל הנתונים הרב-ממדי עם תוויות (labels) מאפשר סינון ואגרגציה גמישים — לדוגמה, ניתן לראות זמן השהיה רק עבור נקודות קצה עם שיטת POST.

אילו מדדים קריטיים לשרת אחורי של אפליקציה ניידת?

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

סוג מדד דוגמאות למה זה חשוב
מדדי API זמן השהיה, שיעור שגיאות, תפוקה זמן השהיה p95 ו-p99 משפיע ישירות על חוויית המשתמש. הממוצע מסתיר השהיות זנב. מעל 95% מהחריגות מתגלות לפני שהמשתמשים מושפעים.
מדדי מסד נתונים חיבורים פעילים, משך שאילתה, המתנות נעילה שאילתות איטיות הן גורם נפוץ להאטה. pg_stat_statements עוזר למצוא אותן.
מדדי תשתית CPU, RAM, קלט/פלט דיסק צווארי בקבוק בשרת מובילים לקריסות.
מדדי תור עומק תור, פיגור צרכן עיבוד רקע חייב לעמוד בקצב.

בנוסף, אנו ממליצים לנטר אישורי SSL: פקיעת תוקף פירושה שמשתמשים לא יכולים להתחבר. לשם כך אנו משתמשים ב-blackbox_exporter.

איך לבצע אינסטרומנטציה לשרת ה-API?

Prometheus מצפה למדדים בפורמט משלו. קיימות ספריות לקוח מוכנות לשפות שונות:

# Python (FastAPI / Flask)
from prometheus_fastapi_instrumentator import Instrumentator

app = FastAPI()
Instrumentator().instrument(app).expose(app)
# Endpoint /metrics появляется автоматически
// Go (Echo / Gin)
import "github.com/prometheus/client_golang/prometheus/promhttp"

func setupMetrics(e *echo.Echo) {
	httpRequestsTotal := prometheus.NewCounterVec(
		prometheus.CounterOpts{Name: "http_requests_total"},
		[]string{"method", "path", "status"},
	)
	prometheus.MustRegister(httpRequestsTotal)

	e.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
		return func(c echo.Context) error {
			err := next(c)
			httpRequestsTotal.WithLabelValues(
				c.Request().Method,
				c.Path(),
				strconv.Itoa(c.Response().Status),
			).Inc()
			return err
		}
	})

	e.GET("/metrics", echo.WrapHandler(promhttp.Handler()))
}

חשוב: אל תיצרו מדד עם # Python (FastAPI / Flask) from prometheus_fastapi_instrumentator import Instrumentator app = FastAPI() Instrumentator().instrument(app).expose(app) # Endpoint /metrics появляется автоматически כתווית בעלת קרדינליות גבוהה — אם הנתיב מכיל user_id או ערכים דינמיים אחרים, Prometheus ייחנק. נמקו את הנתיב: // Go (Echo / Gin) import "github.com/prometheus/client_golang/prometheus/promhttp" func setupMetrics(e *echo.Echo) { httpRequestsTotal := prometheus.NewCounterVec( prometheus.CounterOpts{Name: "http_requests_total"}, []string{"method", "path", "status"}, ) prometheus.MustRegister(httpRequestsTotal) e.Use(func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { err := next(c) httpRequestsTotal.WithLabelValues( c.Request().Method, c.Path(), strconv.Itoa(c.Response().Status), ).Inc() return err } }) e.GET("/metrics", echo.WrapHandler(promhttp.Handler())) } → path. אנו גם מגדירים מדדים מותאמים אישית ללוגיקה עסקית: מספר הזמנות, שגיאות אימות, זמן תגובה של API חיצוני.

איזו תצורת Prometheus עובדת לייצור?

/users/12345/profile בסיסי לשרת אחורי נייד:

---
global:
  scrape_interval: 15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: 'api-server'
    static_configs:
      - targets: ['api:8080']
    metrics_path: /metrics
  - job_name: 'postgres'
    static_configs:
      - targets: ['postgres-exporter:9187']
  - job_name: 'redis'
    static_configs:
      - targets: ['redis-exporter:9121']
  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']

לייצור, השתמשו ב-Service Discovery דרך Consul או Kubernetes service discovery במקום /users/:id/profile. הוסיפו גם prometheus.yml של 10 שניות כדי להימנע מהמתנה לנקודות קצה תלויות.

איך אנחנו עושים את זה: מקרה בוחן

אחד הלקוחות שלנו עם אפליקציית משלוחים ניידת חווה עלייה בזמן השהיה p99 ל-12 שניות. לאחר הטמעת ניטור, גילינו צוואר בקבוק בשאילתת PostgreSQL — אינדקס חסר. האופטימיזציה ארכה שעתיים, וזמן ההשהיה ירד ל-200ms (הפחתה של 98%, שיפור פי 60). ללא ניטור, הבעיה הזו הייתה יכולה להיעלם מעיניים במשך שבועות.

אילו לוחות בקרה אנו בונים ב-Grafana?

אתם לא חייבים לבנות לוחות בקרה מאפס — Grafana.com/dashboards מכיל לוחות מוכנים: ID 1860 עבור Node Exporter, ID 9628 עבור PostgreSQL דרך postgres_exporter. ייבאו אותם בלחיצה אחת.

לניטור API אנו בונים לוח בקרה מותאם אישית עם פאנלים מרכזיים:

  • global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'api-server' static_configs: - targets: ['api:8080'] metrics_path: /metrics - job_name: 'postgres' static_configs: - targets: ['postgres-exporter:9187'] - job_name: 'redis' static_configs: - targets: ['redis-exporter:9121'] - job_name: 'node' static_configs: - targets: ['node-exporter:9100'] — RPS לכל נקודת קצה
  • static_configs — זמן השהיה p95
  • scrape_timeout — שיעור שגיאות
פאנל מדד מקור חשיבות
RPS rate(http_requests_total[5m]) API גבוהה — מציג עומס
זמן השהיה p95 histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) API קריטית — משפיע על חוויית המשתמש
שיעור שגיאות rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) API גבוהה
חיבורים פעילים rate(http_requests_total[5m]) postgres_exporter בינונית
פיגור תור histogram_quantile(0.95, ...) redis_exporter בינונית

איך להגדיר התראות?

Grafana Alerting או Alertmanager — אנו מגדירים ספים עבור PagerDuty/Telegram/Slack. סט ההתראות המינימלי לשרת אחורי נייד:

---
# alerting/rules.yml
groups:
  - name: api
    rules:
      - alert: HighErrorRate
        expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Error rate > 5% on {{ $labels.job }}"
      - alert: HighLatency
        expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 1
        for: 5m
        annotations:
          summary: "p95 latency > 1s"
---

... / rate(...) — הימנעו מהפעלת התראות עבור קפיצות קצרות, רק עבור הידרדרות מתמשכת. הוראות שלב-אחר-שלב:

  1. התקינו את Alertmanager והגדירו מקלטים (Telegram, Slack).
  2. צרו קובץ rules.yml עם הכללים המתוארים.
  3. הוסיפו את הקובץ ל-pg_stat_activity_count תחת redis_queue_length.
  4. אמתו את הכללים עם # alerting/rules.yml groups: - name: api rules: - alert: HighErrorRate expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05 for: 2m labels: severity: critical annotations: summary: "Error rate > 5% on {{ $labels.job }}" - alert: HighLatency expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 1 for: 5m annotations: summary: "p95 latency > 1s" .
  5. הגדירו ניתוב: התראות קריטיות עוברות ל-Telegram/PagerDuty, אזהרות ל-Slack.
  6. בדקו את ההתראות על ידי יצירת קפיצה (לדוגמה, פגיעה בנקודת קצה 500) כדי לוודא מסירה.

טעויות נפוצות בהגדרת ניטור

  • תוויות בעלות קרדינליות גבוהה — אל תכללו user_id או session_id בנתיב.
  • ספי התראה חסרים — בלעדיהם אתם לומדים על בעיות רק מהמשתמשים.
  • התעלמות מזמן השהיה p99 — הממוצע מסתיר האטות מזדמנות.
  • scrape_interval שגוי — איסוף נדיר מדי מפספס קפיצות קצרות.

תוצרים

  • קבצי Docker Compose או Kubernetes manifests עבור Prometheus, Grafana, Alertmanager, כולם מוגדרים מראש.
  • אינסטרומנטציה של שרת ה-API (Python / Go / Node.js / Java) עם מדדים עסקיים מותאמים אישית.
  • חיבור של exporters: postgres_exporter, redis_exporter, node_exporter, וכל אחר שנדרש.
  • לוחות בקרה מותאמים אישית של Grafana המותאמים לאפליקציה שלכם, עם הערות (annotations) לפריסות.
  • הגדרת התראות עם ניתוב ל-Telegram / Slack / PagerDuty, כולל תרחישי בדיקה.
  • תיעוד של כל המדדים, ספי ההתראות, ומדריך לפתרון תקלות.
  • מפגש הדרכה לצוות שלכם (עד שעתיים) על שימוש בלוחות בקרה ושינוי התראות.
  • 30 ימי תמיכה לאחר ההגדרה לכיוונון עדין.

לוח זמנים ועלות

הגדרה בסיסית עם לוחות בקרה והתראות מוכנים: 2–3 ימים. ערכה מלאה עם מדדים מותאמים אישית, אינסטרומנטציה לקוד, ותצורה מוכנה לייצור: 4–6 ימים. העלות מתחילה מ-$2,000 עבור בסיסי ומחושבת באופן אישי עבור ערכה מלאה. צרו קשר להערכת פרויקט — נציע את הפתרון הטוב ביותר.

הזמינו הגדרת ניטור — נעריך את הפרויקט שלכם תוך יום אחד. קבלו ייעוץ על בחירת מדדים וספי התראות.