לוחות מחוונים מותאמים אישית של Grafana לניטור יישומים

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

היכולות שלנו:

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

לוחות מחוונים מותאמים אישית של Grafana ליישומים

לעתים קרובות אנו נתקלים במצב: מדדי התשתית תקינים, אך המשתמשים מתלוננים על ביצועי API איטיים. ללא לוח מחוונים ליישום, צריך לחפש בלוגים ולקוות לטוב. עם לוח מחוונים מוגדר כראוי — 2 דקות לאבחון. הניסיון שלנו מראה שעבור שירות עם 50,000 RPS, לוח מחוונים מעוצב היטב מפחית את ה-MTTR מ-30 דקות ל-3-5.

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

למה לוח המחוונים של התשתית אינו מספיק

דוגמה טיפוסית: CPU ב-30%, זיכרון פנוי, אך זמן השהיה p95 מזנק ל-2 שניות. לוח המחוונים של התשתית לא יראה שהבעיה היא שאילתת SQL איטית או נעילת מאגר חיבורים. רק לוח מחוונים ליישום עם מדדי לוגיקה עסקית מאפשר לאתר את הבעיה תוך דקות.

פרמטר לוח מחוונים לתשתית לוח מחוונים ליישום
מיקוד משאבים (CPU, RAM, IO) מדדים עסקיים (זמן השהיה, שגיאות)
בעלים מנהל מערכת מפתח / SRE
מדדים מוני מערכת מדדי יישום (שיטת RED)
זמן ניפוי שגיאות שעות אם הבעיה אינה במשאבים דקות

אילו מדדים צריך לייצא?

היישום חייב לייצא מדדים בעצמו. עבור Go השתמשו ב-prometheus/client_golang, עבור Python — prometheus_client, עבור Node.js — prom-client, עבור Java — Micrometer עם רישום Prometheus. ללא אינסטרומנטציה, אין נתונים; ללא נתונים, אין לוח מחוונים.

קבוצה מינימלית של מדדים שכל יישום HTTP צריך לייצא:

var (
	httpRequestsTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Name: "http_requests_total",
			Help: "Total number of HTTP requests",
		},
		[]string{"method", "path", "status_code"},
	)
	httpRequestDuration = prometheus.NewHistogramVec(
		prometheus.HistogramOpts{
			Name:    "http_request_duration_seconds",
			Help:    "HTTP request duration in seconds",
			Buckets: []float64{0.01, 0.05, 0.1, 0.5, 1, 2, 5},
		},
		[]string{"method", "path", "status_code"},
	)
)

מדדים אלה מהווים את הליבה של לוח מחוונים ליישום.

פאנלים מרכזיים בלוח המחוונים ליישום

קצב בקשות — מספר בקשות לשנייה, מפוצל לפי קוד סטטוס. זיהוי מהיר של קפיצות שגיאות:

sum by (status_code) ( rate(http_requests_total{service="$service"}[5m]) ) 

אחוז שגיאות — אחוז 5xx מתוך כלל התעבורה. מוצג לעתים קרובות כפאנל סטטיסטי עם צביעת סף: ירוק עד 1%, צהוב עד 5%, אדום מעל:

sum(rate(http_requests_total{service="$service", status_code=~"5.."}[5m])) / sum(rate(http_requests_total{service="$service"}[5m])) * 100 

אחוזוני זמן השהיה — p50, p95, p99. זמן השהיה ממוצע הוא כמעט תמיד מטעה. p99 הוא מה שחווים 1% המשתמשים חסרי המזל ביותר:

histogram_quantile(0.99, sum by (le, method) ( rate(http_request_duration_seconds_bucket{service="$service"}[5m]) ) ) 

רוויה — מצבי משאבים של היישום: גודל מאגר חיבורים, goroutines, תור בקשות. ללא זה, ייתכן שתראו זמן השהיה תקין עד שהשירות קורס תחת עומס.

ספי SLO טיפוסיים:

SLO סף התראה אם
זמינות >=99.9% <99.9%
זמן השהיה p99 <=500ms >500ms
אחוז שגיאות <=1% >1%

מבנה ירידה לפרטים

קבוצה טובה של לוחות מחוונים לשירות בנויה בשלוש רמות.

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

פרטי מופע — מופע אחד עם כל המדדים: קצב בקשות, פירוט זמן השהיה לפי נקודת קצה, אחוז שגיאות, ערימת JVM (אם Java), goroutines (אם Go), שימוש במאגר חיבורי DB.

פרטי נקודת קצה — נקודת קצה HTTP ספציפית. התפלגות זמן השהיה (מפת חום היסטוגרמה), גודל מטען של בקשות/תגובות, תלויות במורד הזרם. רמה זו נדרשת בעת ניפוי שגיאות של פעולה איטית ספציפית.

מעבר בין רמות דרך קישור נתונים — לחיצה על מופע בסקירה הכללית פותחת את פרטי המופע עם המשתנים הנכונים. זה לא מוגדר אוטומטית; יש להגדיר זאת ידנית דרך var ( httpRequestsTotal = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests", }, []string{"method", "path", "status_code"}, ) httpRequestDuration = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: "http_request_duration_seconds", Help: "HTTP request duration in seconds", Buckets: []float64{0.01, 0.05, 0.1, 0.5, 1, 2, 5}, }, []string{"method", "path", "status_code"}, ) ) בהגדרות הפאנל.

הערות פריסה

פריסת היישום צריכה להיות גלויה בלוח המחוונים. הערה דרך Grafana Annotations API או אירוע Prometheus:

curl -X POST http://grafana:3000/api/annotations \
  -H "Content-Type: application/json" \
  -d '{ "time": '"$(date +%s000)"', "tags": ["deployment", '"$SERVICE_NAME"'], "text": "Deploy '"$VERSION"' to production" }'

ב-Grafana, זה מוצג כקו אנכי בכל פאנלי סדרות הזמן. אם לאחר פריסה זמן השהיה p99 עלה, זה נראה מיד, ללא צורך בתאם ידני בין זמן הפריסה לגרף.

תהליך פיתוח לוח המחוונים

אנו מתחילים במלאי מדדים: מה היישום מייצא, אילו תוויות זמינות, האם יש צורך לשקף SLOs. ללא הבנה של המדדים הזמינים, לוח המחוונים לא יעבוד.

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

יישום: פאנלים, משתנים, קישורי נתונים בין רמות, צבעי סף, יחידות מדידה (לא "ערך 0.045", אלא "45 ms"). לבסוף, provisioning JSON ב-git ותיעוד להוספת מדדים חדשים.

מה כלול בעבודה (תוצרים)

  • ביקורת מדדים ויצואנים קיימים
  • עיצוב מבנה לוח המחוונים (אב טיפוס)
  • יישום פאנלים, משתנים, קישורי נתונים
  • הגדרת הערות פריסה
  • תיעוד תפעולי (README, provisioning JSON)
  • הדרכת צוות (שעה)
  • אחריות לתוצאה: לא נמסור את לוח המחוונים עד שכל המדדים מאומתים כנכונים

לוח זמנים: לוח מחוונים לשירות אחד עם שלוש רמות פירוט — 2-3 ימים. תבנית סטנדרטית למיקרוסרוויס טיפוסי — 1-2 ימים, ואז התאמה לשירותים ספציפיים מהירה יותר.

איך לזרז פיתוח לוחות מחוונים עם תבניות?

הכנו תבניות למיקרוסרוויסים טיפוסיים (Go, Python, Java). הן מכסות 80% מהמדדים הנפוצים. התאמה לדרישות ספציפיות לוקחת יום אחד בלבד. ניסיון של למעלה מ-5 שנים ב-DevOps מאפשר לנו להבטיח שלוח המחוונים יעקוב אחרי שיטות העבודה המומלצות של Prometheus ו-Grafana.

רוצים לוח מחוונים דומה לשירות שלכם? צרו קשר — נעריך את הפרויקט שלכם ביום אחד ונציע פתרון מתאים.