نمای کلی APM
مانیتورینگ لحظهای عملکرد در همهی اپلیکیشنها با تأخیر HTTP، کوئریهای دیتابیس، عملیات سفارشی، صدکهای p50/p95/p99 و Core Web Vitals.
APM ابرووا تریس عملکرد همهی اپلیکیشنهای شما را بهصورت لحظهای مانیتور میکند. تأخیر درخواستهای HTTP، کوئریهای دیتابیس و عملیات سفارشی را با صدکهای p50، p95 و p99 دنبال کنید. برای اپهای وب، Core Web Vitals (یعنی LCP، INP و CLS و همچنین TTFB و FCP) را هم مانیتور کنید.
زمان درخواست و پاسخ HTTP را با صدکهای p50، p95 و p99 مانیتور کنید
معیارهای 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 با این فیلدها میسازد:
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
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
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)
import ir.abrova.trace.sdk.network.AbrovaTracePerformanceInterceptor
import okhttp3.OkHttpClient
val client = OkHttpClient.Builder()
.addInterceptor(AbrovaTracePerformanceInterceptor())
.build()
// All requests through this client are automatically trackediOS (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
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/spans | POST | ارسال یک span |
| /api/performance/spans/batch | POST | ارسال دستهای (حداکثر ۵۰) |
| /api/performance/web-vitals | POST | ارسال دادههای Web Vitals |
بهترین روشها#
بهجای نامهای کلی از نامهای گویا مثل «GET /api/users» استفاده کنید تا راحتتر شناخته شوند
تگهایی مثل شناسهی کاربر، شناسهی tenant یا feature flag اضافه کنید تا دادهها را فیلتر و تفکیک کنید
همیشه محیط (production، staging، development) را تنظیم کنید تا دادهها از هم جدا بمانند
میانگین تأخیر موارد پرت را پنهان میکند؛ برای بدترین تجربهی کاربر روی p95 و p99 تمرکز کنید
SDKها بهطور پیشفرض spanها را دستهای میفرستند؛ تا جای ممکن spanها را تکتک ارسال نکنید
endpointهای پرسروصدا مثل /health یا /ping را از ردیابی حذف کنید