ניטור בקשות HTTP: זמן תגובה ושיעור שגיאות

כאשר אפליקציה מתחילה להאט, משתמשים עוזבים בשקט—ואתה מגלה רק מביקורות שליליות. אנחנו מיישמים ניטור בקשות HTTP העוקב אחר Response Time ו-Error Rate בזמן אמת, כך שאתה רואה בעיות לפני שהן הופכות קריטיות. הצוות שלנו מספק את הפרויקט במפתח מלא, מהגדרת מדדים ועד תמיכה שוטפת, ומבטיח ביצועים יציבים של אפליקציית המובייל שלך.

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
ניטור בקשות HTTP: זמן תגובה ושיעור שגיאות
בינוני
מ- 4 שעות עד 2 ימים

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

שאלות נפוצות

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

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

הערה: כאשר זמן התגובה הממוצע של נקודת הקצה GET /api/feed גדל מ-200 אלפיות שנייה ל-1800 אלפיות שנייה, המשתמשים מרגישים בפיגור, אבל הביקורות ב-App Store מופיעות רק יום לאחר מכן. עם ניטור, אתם לומדים על הבעיה תוך 5 דקות. הצוות שלנו, עם ניסיון של למעלה מ-10 שנים בפיתוח מובייל, ראה מצבים שבהם חוסר ניטור בקשות HTTP הוביל לאובדן של עד 30% מהמשתמשים. יישמנו יותר מ-50 פרויקטים עם ניטור—החל מסטארטאפים ועד אפליקציות ארגוניות עם 10 מיליון משתמשים. לכן אנו פורסים מערכות מפתח בידיים מלאות לאיסוף מדדי זמן תגובה ושיעור שגיאות. לפי אנליסטים, כל שעה של השבתה עם חביון גבוה עולה לחברות בממוצע 10,000 דולר. הגדרת ניטור מלאה עולה מ-1,500 דולר לאינטגרציה בסיסית של Firebase ועד 10,000 דולר למערכת ארגונית מותאמת אישית, אבל היא מחזירה את עצמה במהירות על ידי מניעת ההפסד השעתי הזה. בואו נפרק איך זה עובד בפועל ואילו גישות מספקות תוצאות אמיתיות.

בעיות ללא ניטור בקשות HTTP

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

ניטור בצד הלקוח מול ניטור בצד השרת: מה לבחור?

שתי רמות של איסוף מדדים מספקות תמונה מלאה.

צד הלקוח (בתוך האפליקציה): זמן תגובה מהמכשיר של המשתמש—כולל חביון רשת. משקף חוויה אמיתית אבל רועש: רשת גרועה של משתמש אחד לא אומרת בעיית שרת.

צד השרת (APM): מכשירים את השרת, מודדים רק זמן עיבוד. לא רואה חביון רשת אבל מראה במדויק את מצב הקצה האחורי.

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

פרמטר ניטור צד לקוח ניטור צד שרת
מה הוא מודד זמן תגובה במכשיר (כולל רשת) זמן עיבוד בקשה בשרת
רמת רעש גבוהה (תלויה ברשת של המשתמש) נמוכה
משקף חווית משתמש כן לא
כלים אופייניים Firebase Performance, אינטרספטורים מותאמים אישית מערכות APM (Datadog, New Relic)

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

איך למכשיר את לקוח ה-HTTP: קוד ודוגמאות

אראה באמצעות React Native. הקוד דומה ל-iOS (URLProtocol) ול-Android (OkHttpInterceptor).

אינטרספטור Axios ב-React Native

import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
type RequestMetric = {
  endpoint: string;
  method: string;
  statusCode: number;
  durationMs: number;
  timestamp: number;
  error?: string;
};
const metricsBuffer: RequestMetric[] = [];
const FLUSH_INTERVAL_MS = 30_000;
const FLUSH_BATCH_SIZE = 50;
function createMonitoredAxios(): AxiosInstance {
  const instance = axios.create({ baseURL: API_BASE_URL });
  instance.interceptors.request.use((config: AxiosRequestConfig) => {
    (config as any).metadata = { startTime: Date.now() };
    return config;
  });
  instance.interceptors.response.use(
    (response: AxiosResponse) => {
      recordMetric(response.config, response.status, null);
      return response;
    },
    (error) => {
      const status = error.response?.status ?? 0;
      recordMetric(error.config, status, error.message);
      return Promise.reject(error);
    }
  );
  return instance;
}
function recordMetric(config: any, status: number, error: string | null) {
  const durationMs = Date.now() - (config?.metadata?.startTime ?? Date.now());
  const url = config?.url ?? 'unknown';
  const endpoint = new URL(url, API_BASE_URL).pathname;
  metricsBuffer.push({
    endpoint,
    method: (config?.method ?? 'GET').toUpperCase(),
    statusCode: status,
    durationMs,
    timestamp: Date.now(),
    error: error ?? undefined,
  });
  if (metricsBuffer.length >= FLUSH_BATCH_SIZE) flushMetrics();
}

אנחנו מנרמלים את ה-URL ל-pathname—אנחנו לא רוצים אלפי מדדים ייחודיים כמו import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; type RequestMetric = { endpoint: string; method: string; statusCode: number; durationMs: number; timestamp: number; error?: string; }; const metricsBuffer: RequestMetric[] = []; const FLUSH_INTERVAL_MS = 30_000; const FLUSH_BATCH_SIZE = 50; function createMonitoredAxios(): AxiosInstance { const instance = axios.create({ baseURL: API_BASE_URL }); instance.interceptors.request.use((config: AxiosRequestConfig) => { (config as any).metadata = { startTime: Date.now() }; return config; }); instance.interceptors.response.use( (response: AxiosResponse) => { recordMetric(response.config, response.status, null); return response; }, (error) => { const status = error.response?.status ?? 0; recordMetric(error.config, status, error.message); return Promise.reject(error); } ); return instance; } function recordMetric(config: any, status: number, error: string | null) { const durationMs = Date.now() - (config?.metadata?.startTime ?? Date.now()); const url = config?.url ?? 'unknown'; const endpoint = new URL(url, API_BASE_URL).pathname; metricsBuffer.push({ endpoint, method: (config?.method ?? 'GET').toUpperCase(), statusCode: status, durationMs, timestamp: Date.now(), error: error ?? undefined, }); if (metricsBuffer.length >= FLUSH_BATCH_SIZE) flushMetrics(); } , /api/users/123. יש צורך בתבנית כמו /api/users/456.

אגרגציה בצד הלקוח: P50/P95/P99

זמן תגובה ממוצע מטעה: 90% מהבקשות ב-100 אלפיות שנייה ו-10% ב-5000 אלפיות שנייה נותנים ממוצע של 590 אלפיות שנייה—לא משקף את המציאות. אחוזונים מדויקים יותר:

function calculatePercentiles(durations: number[]): { p50: number; p95: number; p99: number } {
    const sorted = [...durations].sort((a, b) => a - b);
    const p = (percentile: number) => sorted[Math.floor(sorted.length * percentile / 100)];
    return { p50: p(50), p95: p(95), p99: p(99) };
}

P99 הוא זמן התגובה עבור 99% מהבקשות. אם P99 עולה בזמן ש-P50 יציב, יש בעיה עם בקשות איטיות מתת-קבוצה קטנה של משתמשים (נקודת קצה ספציפית, מערכת הפעלה ספציפית, אזור ספציפי).

שליחת מדדים: אצווה ותעדוף

async function flushMetrics() {
  if (metricsBuffer.length === 0) return;
  const batch = metricsBuffer.splice(0, FLUSH_BATCH_SIZE);
  try {
    await fetch(`${METRICS_ENDPOINT}/ingest`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ metrics: batch, appVersion: APP_VERSION, platform: Platform.OS }),
    });
  } catch {
    // При ошибке отправки — кладём обратно в буфер, но не более MAX_BUFFER_SIZE
    metricsBuffer.unshift(...batch.slice(0, MAX_BUFFER_SIZE - metricsBuffer.length));
  }
}

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

פתרונות מוכנים: Firebase Performance Monitoring

/api/users/:id ממכן את רוב העבודה: מיירט function calculatePercentiles(durations: number[]): { p50: number; p95: number; p99: number } { const sorted = [...durations].sort((a, b) => a - b); const p = (percentile: number) => sorted[Math.floor(sorted.length * percentile / 100)]; return { p50: p(50), p95: p(95), p99: p(99) }; } /async function flushMetrics() { if (metricsBuffer.length === 0) return; const batch = metricsBuffer.splice(0, FLUSH_BATCH_SIZE); try { await fetch(`${METRICS_ENDPOINT}/ingest`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ metrics: batch, appVersion: APP_VERSION, platform: Platform.OS }), }); } catch { // При ошибке отправки — кладём обратно в буфер, но не более MAX_BUFFER_SIZE metricsBuffer.unshift(...batch.slice(0, MAX_BUFFER_SIZE - metricsBuffer.length)); } } , מודד זמן, שולח ל-Firebase. הקונסולה מספקת דשבורד עם אחוזונים לפי נקודת קצה. לפי תיעוד Firebase Performance Monitoring, איסוף מדדי רשת אוטומטי זמין ב-Android וב-iOS.

import perf from '@react-native-firebase/perf'; // Кастомный trace для критичной операции
const trace = await perf().startTrace('checkout_flow');
trace.putAttribute('userId', userId);
// ... операция ...
await trace.stop();

עבור רוב האפליקציות, Firebase Performance Monitoring הוא הבחירה הנכונה. עבור ארגונים עם דרישות אירוח עצמי—Datadog RUM Mobile או שליחה מותאמת אישית ל-InfluxDB/Prometheus.

אחוזונים: למה זה המדד המרכזי?

זמן תגובה ממוצע עשוי להיות מקובל, אבל 10% מהבקשות האיטיות ביותר גורמות לאפליקציה להרגיש איטית. P95 ו-P99 מראים כמה משתמשים עם חיבורים גרועים או מכשירים ישנים באמת ממתינים. הגדרת התראות על P95 מאפשרת לכם להגיב לירידה בביצועים עבור הרוב, ו-P99 עבור חריגים.

איך להגדיר התראות ולא לפספס ירידה בביצועים?

הגדירו קו בסיס—ממוצע שבועי של P95. הגדירו ספים: P95 > פי 2 מקו הבסיס למשך 5 דקות—אזהרה ב-Slack. שיעור שגיאות > 5% למשך 10 דקות—התראה קריטית ב-PagerDuty. חשוב להפריד בין מדדי לקוח לשרת: עליית P95 בצד הלקוח עם P95 יציב בצד השרת מצביעה על בעיות רשת.

Firebase Performance משולב פי 3 מהר יותר מפתרון Datadog מותאם אישית—3 ימים מול שבועיים. אבל פתרונות מותאמים אישית נותנים שליטה מלאה על אחסון והתאמת דשבורד. ההשקעה בניטור משתלמת על ידי הפחתת נטישת משתמשים ועלויות תמיכה, וחוסכת עד 30% מהתקציב.

קריטריון Firebase Performance מערכת מותאמת אישית (Datadog/Grafana)
זמן אינטגרציה 3 ימים 2-4 שבועות
שליטה בנתונים מוגבלת (ענן Google) מלאה (אירוח עצמי)
התאמת דשבורד בינונית גבוהה
עלות התחלתית חינם (עם מגבלות) תלויה בתשתית

מה כלול

  • מכשור לקוח HTTP (Axios/OkHttp/URLSession) לפלטפורמה שלכם
  • הגדרת דשבורד מדדים (Grafana, Firebase Console, או Datadog)
  • סקריפטים לאצווה ושליחת מדדים עם טיפול בשגיאות
  • תיעוד על התראות וספים
  • הדרכה לצוות התפעול

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

  1. ניתוח: ביקורת על המחסנית הנוכחית, זיהוי נקודות קצה קריטיות
  2. עיצוב: בחירת גישה (לקוח/שרת), כלים, סכמת מדדים
  3. יישום: שילוב אינטרספטורים, יישום לוגיקת אצווה ואגרגציה
  4. בדיקות: אימות בתרחישים אמיתיים, בדיקת עומס על המאגר
  5. שחרור: פרסום, ניטור בימים הראשונים, כיול ספים

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

רשימת בדיקה להגדרת ניטור
  • בחירת כלי (Firebase Performance / Datadog / פתרון מותאם אישית)
  • נרמול תבניות URL
  • הגדרת איסוף אחוזונים (P50, P95, P99)
  • הגדרת התראות: P95 > פי 2 מקו הבסיס, שיעור שגיאות > 5%
  • אימות שליחת מדדים במצב לא מקוון
  • הוספת טראקינג לתרחישי משתמש קריטיים

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