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

REST API برای لاگ‌ها

لاگ‌ها را از هر اپلیکیشن، زبان یا ابزاری با HTTPS بفرستید؛ تک‌به‌تک یا دسته‌ای.

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

لاگ‌ها را از هر اپلیکیشن، زبان یا فریم‌ورکی با HTTPS بفرستید. هر درخواست در هدر x-api-key به یک کلید پروژه نیاز دارد: وقتی از سرور می‌فرستید کلید سرور (ab_srv_...)، و وقتی از اپ می‌فرستید کلید اپ (ab_live_...).

کدام کلید؟

کلید اپ داخل اپ‌های موبایل و وب منتشر می‌شود، پس آن را عمومی در نظر بگیرید. روی سرورهای خودتان از کلید سرور در یک متغیر محیطی استفاده کنید و آن را از کد سمت کلاینت دور نگه دارید. هر دو کلید، صرف‌نظر از تنظیمات پروژه، روی دو endpoint زیر پذیرفته می‌شوند. کلید سرور و مسیرهای سرور را ببینید.

هزینه از کیف پول.

لاگ‌ها تا ۱ گیگابایت در ماه رایگان هستند؛ بیش از آن، هزینه از کیف پول: هر گیگابایت ۱۵٬۰۰۰ تومان. لاگ‌ها ۳۰ روز نگه داشته می‌شوند. قیمت‌ها را ببینید.

ارسال یک لاگ#

POSThttps://trace.abrova.ir/api/logs/ingest
گزینهنوعاجباریتوضیح
messagestringبلهمتن خط لاگ (تا ۱۰٬۰۰۰ نویسه نگه داشته می‌شود)
levelstringخیرfatal، error، warn، info، debug یا trace (پیش‌فرض: info)
sourceIdstringخیرشناسه‌ی منبع لاگ (مثلاً "api-server"). پیش‌فرض: "<platform>-default" یا "unknown-default"
sourceNamestringخیرنام خوانای منبع
timestampstringخیرزمان با قالب ISO 8601 (پیش‌فرض: زمان دریافت)
metadataobjectخیرجفت‌های کلید-مقدار اضافه
platformstringخیربرچسب پلتفرم که در نمای Logs نشان داده می‌شود
environmentstringخیرEnvironment (پیش‌فرض: production)
releasestringخیرنسخه‌ی release
userIdstringخیرکاربری که لاگ به او مربوط است
bash
curl -X POST https://trace.abrova.ir/api/logs/ingest \
  -H "x-api-key: $ABROVA_TRACE_SERVER_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceId": "api-server",
    "sourceName": "API Server",
    "level": "info",
    "message": "User login successful",
    "metadata": {
      "userId": "user_123",
      "ip": "192.168.1.1"
    }
  }'

پاسخ (201): {"status": "created", "id": 12345}

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

POSThttps://trace.abrova.ir/api/logs/ingest/batch

برای حجم بالای لاگ کارآمدتر است: چندین مورد را در یک درخواست، به‌صورت آرایه‌ی JSON زیر logs بفرستید. اینجا sourceId الزامی است؛ هر مورد در logs همان فیلدهای یک لاگ تکی را می‌پذیرد (به‌جز sourceId / sourceName). از هر درخواست حداکثر ۱٬۰۰۰ مورد ذخیره می‌شود؛ بیشتر از آن را در چند دسته بفرستید.

bash
curl -X POST https://trace.abrova.ir/api/logs/ingest/batch \
  -H "x-api-key: $ABROVA_TRACE_SERVER_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceId": "api-server",
    "logs": [
      { "level": "info", "message": "Request received: GET /api/users" },
      { "level": "debug", "message": "Querying database..." },
      { "level": "info", "message": "Response sent: 200 OK (45ms)" }
    ]
  }'

پاسخ (201): {"status": "created", "count": 3, "projectId": "..."}

نمونه کدها#

Node.js

javascript
const ABROVA_TRACE_SERVER_SECRET = process.env.ABROVA_TRACE_SERVER_SECRET; // ab_srv_...
const ABROVA_TRACE_URL = 'https://trace.abrova.ir';

async function sendLog(sourceId, level, message, metadata = {}) {
await fetch(`${ABROVA_TRACE_URL}/api/logs/ingest`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': ABROVA_TRACE_SERVER_SECRET,
  },
  body: JSON.stringify({ sourceId, level, message, metadata }),
});
}

// Usage
sendLog('api-server', 'info', 'Server started on port 3000');
sendLog('api-server', 'error', 'Database connection failed', {
error: 'ECONNREFUSED',
});

در اپ‌های Node.js، SDK برای Node.js ارسال دسته‌ای و تلاش دوباره را برایتان انجام می‌دهد.

Python

python
import os
import requests

ABROVA_TRACE_SERVER_SECRET = os.environ.get('ABROVA_TRACE_SERVER_SECRET')  # ab_srv_...
ABROVA_TRACE_URL = 'https://trace.abrova.ir'

def send_log(source_id, level, message, metadata=None):
    requests.post(
        f'{ABROVA_TRACE_URL}/api/logs/ingest',
        json={
            'sourceId': source_id,
            'level': level,
            'message': message,
            'metadata': metadata or {},
        },
        headers={'x-api-key': ABROVA_TRACE_SERVER_SECRET},
        timeout=5,
    )

# Usage
send_log('worker', 'info', 'Job started')
send_log('worker', 'error', 'Job failed', {'job_id': '123'})

Go

go
package main

import (
    "bytes"
    "encoding/json"
    "net/http"
    "os"
)

func sendLog(sourceId, level, message string, metadata map[string]interface{}) error {
    body, _ := json.Marshal(map[string]interface{}{
        "sourceId": sourceId,
        "level":    level,
        "message":  message,
        "metadata": metadata,
    })

    req, _ := http.NewRequest("POST",
        "https://trace.abrova.ir/api/logs/ingest",
        bytes.NewBuffer(body))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("x-api-key", os.Getenv("ABROVA_TRACE_SERVER_SECRET"))

    _, err := http.DefaultClient.Do(req)
    return err
}

PHP

در اپ‌های Laravel از کانال لاگ در SDK برای Laravel استفاده کنید. برای PHP ساده:

php
$ch = curl_init('https://trace.abrova.ir/api/logs/ingest');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'x-api-key: ' . getenv('ABROVA_TRACE_SERVER_SECRET'),
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'sourceId' => 'shop-backend',
        'level' => 'error',
        'message' => 'payment callback timeout order=ORD-8812',
    ]),
]);
curl_exec($ch);
curl_close($ch);

کدهای پاسخ#

  • 201 — ساخته شد
  • 400 — بدنه‌ی درخواست نامعتبر است (message نیامده؛ در ارسال دسته‌ای، logs خالی است یا sourceId نیامده)
  • 401 — کلید نیامده یا نامعتبر است، یا ابرووا تریس برای پروژه فعال نیست
  • 429 — درخواست‌ها بیش از حد است. برای هر کلید و هر آدرس کلاینت سقف بالایی وجود دارد؛ کلاینتی که از آن بگذرد پاسخ 429 با هدر Retry-After (به ثانیه) می‌گیرد. به‌جای لاگ تکی دسته‌ای بفرستید و پیش از تلاش دوباره صبر کنید.
  • 500 — خطای سرور؛ بعداً دوباره تلاش کنید.
این صفحه مفید بود؟
گزارش مشکل