ابرووا
شروع رایگان
☰ فهرست مستندات · معرفی APM

نمای کلی APM

مانیتورینگ لحظه‌ای عملکرد در همه‌ی اپلیکیشن‌ها با تأخیر HTTP، کوئری‌های دیتابیس، عملیات سفارشی، صدک‌های p50/p95/p99 و Core Web Vitals.

به‌روزرسانی: ۵ آبان ۱۴۰۵

APM ابرووا تریس عملکرد همه‌ی اپلیکیشن‌های شما را به‌صورت لحظه‌ای مانیتور می‌کند. تأخیر درخواست‌های HTTP، کوئری‌های دیتابیس و عملیات سفارشی را با صدک‌های p50، p95 و p99 دنبال کنید. برای اپ‌های وب، Core Web Vitals (یعنی LCP، INP و CLS و همچنین TTFB و FCP) را هم مانیتور کنید.

ردیابی تأخیر API

زمان درخواست و پاسخ HTTP را با صدک‌های p50، p95 و p99 مانیتور کنید

Core Web Vitals

معیارهای LCP، INP، CLS، TTFB و FCP برای پلتفرم‌های وب

عملیات سفارشی

هر عملیات async را با اندازه‌گیری خودکار مدت‌زمان دنبال کنید

تحلیل صدک‌ها

معیارهای تأخیر p50، p95 و p99 برای دیدی دقیق

ارسال دسته‌ای

آپلود دسته‌ای و بهینه‌ی spanها برای کم کردن بار شبکه

چندپلتفرمی

روی Next.js، Flutter، Android، iOS، Node.js و Laravel کار می‌کند

بدون هزینه‌ی اضافه.

APM بدون هزینه‌ی اضافه جزو ابرووا تریس است. spanها و Web Vitals مشکل جدید حساب نمی‌شوند، پس از سهمیه‌ی رایگان ماهانه یا کیف پول شما کم نمی‌کنند.

نگهداری داده#

spanها و Web Vitals به اندازه‌ی دوره‌ی نگهداری داده‌ی پروژه‌ی شما نگه داشته می‌شوند: ۷ روز رایگان، یا ۳۰ روز با ۵۰٬۰۰۰ تومان برای هر پروژه در ماه، هزینه از کیف پول. جزئیات در قیمت‌ها.

ساختار Performance Span#

هر عملیاتی که دنبال می‌شود یک Performance Span با این فیلدها می‌سازد:

typescript
interface PerformanceSpan {
  operation: string;        // e.g., "GET /api/users"
  operationType: 'http' | 'db' | 'custom';
  httpMethod?: string;      // GET, POST, PUT, DELETE
  httpUrl?: string;         // Full request URL
  httpStatusCode?: number;  // 200, 404, 500, etc.
  httpHost?: string;        // api.example.com
  durationMs: number;       // Request duration
  startTime: string;        // ISO timestamp
  endTime?: string;         // ISO timestamp
  traceId?: string;         // Distributed trace ID
  spanId?: string;          // Unique span ID
  parentSpanId?: string;    // Parent span for nesting
  platform: string;         // nextjs, flutter, web, android, ios, nodejs, laravel
  environment?: string;     // production, staging, dev
  releaseVersion?: string;  // App version
  tags?: Record<string, string>;  // Custom tags
  metadata?: Record<string, any>; // Additional data
  status: 'ok' | 'error';
  errorMessage?: string;
}

شروع سریع برای هر SDK#

Next.js / React

typescript
import { AbrovaTrace } from '@abrova-trace/nextjs-sdk';

AbrovaTrace.init({
  apiKey: 'ab_live_your_api_key',
  environment: 'production',
});

// Enable automatic HTTP tracking (intercepts fetch)
AbrovaTrace.getInstance()?.enablePerformanceTracking();

// Enable Web Vitals (LCP, INP, CLS, TTFB, FCP)
AbrovaTrace.getInstance()?.enableWebVitals();

Flutter

dart
import 'package:abrova_trace_flutter_sdk/abrova_trace_flutter_sdk.dart';

// Create a performance-tracking HTTP client
final client = PerformanceHttpClient(
  apiKey: 'ab_live_your_api_key',
  environment: 'production',
);

// All requests are automatically tracked
final response = await client.get(
  Uri.parse('https://api.example.com/users'),
);

Android (Kotlin)

kotlin
import ir.abrova.trace.sdk.network.AbrovaTracePerformanceInterceptor
import okhttp3.OkHttpClient

val client = OkHttpClient.Builder()
    .addInterceptor(AbrovaTracePerformanceInterceptor())
    .build()

// All requests through this client are automatically tracked

iOS (Swift)

swift
import AbrovaTrace

// Enable automatic URLSession tracking
AbrovaTrace.shared.enablePerformanceTracking()

// Or use a custom session with tracking
let config = AbrovaTrace.shared.performanceSessionConfiguration()
let session = URLSession(configuration: config)

Node.js

javascript
const AbrovaTrace = require('@abrova-trace/nodejs-sdk');

// Time any async operation and report it as a span
const users = await AbrovaTrace.trackOperation(
  'fetch-users',
  () => db.query('SELECT * FROM users'),
  { operationType: 'db' }
);

دیدن داده‌ها در داشبورد#

بعد از فعال شدن ردیابی، در کنسول ابرووا به ابرووا تریس → Performance بروید تا این‌ها را ببینید:

  • آمار کلی: تعداد درخواست‌ها، نرخ خطا و تأخیر p50، p95 و p99
  • تأخیر: p50، p95 و p99 در طول زمان، به‌همراه تعداد درخواست‌ها در طول زمان با خطاهای روی هم
  • عملیات: هر عملیات با نوع، تعداد درخواست، صدک‌های تأخیر و خطاهایش
  • کارت‌های کدهای وضعیت، Web Vitals و درخواست‌های ناموفق
  • فیلتر: بازه‌ی زمانی (۱ ساعت، ۲۴ ساعت، ۷ روز، ۳۰ روز یا دلخواه)، پلتفرم، محیط و release

Endpointهای API#

SDKها spanها را به این endpointها می‌فرستند:

Endpointمتدتوضیح
/api/performance/spansPOSTارسال یک span
/api/performance/spans/batchPOSTارسال دسته‌ای (حداکثر ۵۰)
/api/performance/web-vitalsPOSTارسال داده‌های Web Vitals

بهترین روش‌ها#

نام‌های معنادار برای عملیات

به‌جای نام‌های کلی از نام‌های گویا مثل «GET /api/users» استفاده کنید تا راحت‌تر شناخته شوند

تگ سفارشی اضافه کنید

تگ‌هایی مثل شناسه‌ی کاربر، شناسه‌ی tenant یا feature flag اضافه کنید تا داده‌ها را فیلتر و تفکیک کنید

محیط را درست تنظیم کنید

همیشه محیط (production، staging، development) را تنظیم کنید تا داده‌ها از هم جدا بمانند

به p95/p99 نگاه کنید، نه فقط میانگین

میانگین تأخیر موارد پرت را پنهان می‌کند؛ برای بدترین تجربه‌ی کاربر روی p95 و p99 تمرکز کنید

از ارسال دسته‌ای استفاده کنید

SDKها به‌طور پیش‌فرض spanها را دسته‌ای می‌فرستند؛ تا جای ممکن spanها را تک‌تک ارسال نکنید

endpointهای health check را کنار بگذارید

endpointهای پرسروصدا مثل /health یا /ping را از ردیابی حذف کنید

این صفحه مفید بود؟
گزارش مشکل