تخطَّ إلى المحتوى

OpenTelemetry

OpenTelemetry هو معيار CNCF لجمع بيانات الحالة الصحية (التتبع والقياس والسجلات) من التطبيقات والبنية التحتية.

التثبيت

Node.js/JavaScript

# الحزم الأساسية
npm install @opentelemetry/api @opentelemetry/sdk-node

# الأدوات التلقائية
npm install @opentelemetry/auto

# المُصَدِّرات
npm install @opentelemetry/exporter-trace-otlp-http
npm install @opentelemetry/exporter-metrics-otlp-http

# الأدوات للمكتبات
npm install @opentelemetry/instrumentation-express
npm install @opentelemetry/instrumentation-http
npm install @opentelemetry/instrumentation-pg

Python

# الحزم الأساسية
pip install opentelemetry-api
pip install opentelemetry-sdk

# المُصَدِّرات
pip install opentelemetry-exporter-otlp
pip install opentelemetry-exporter-jaeger

# الأدوات
pip install opentelemetry-instrumentation-flask
pip install opentelemetry-instrumentation-requests
pip install opentelemetry-instrumentation-sqlalchemy

Java

# Maven تبعيات
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-api</artifactId>
    <version>1.28.0</version>
</dependency>

<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk</artifactId>
    <version>1.28.0</version>
</dependency>

# Java agent للأدوات التلقائية
wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.28.0/opentelemetry-javaagent.jar

الإعداد الأساسي

تتبع Node.js

// tracing.js
const { NodeSDK } = require("@opentelemetry/sdk-node");
const { getNodeAutoInstrumentations } = require("@opentelemetry/auto-instrumentations-node");
const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-http");

const sdk = new NodeSDK({
  traceExporter: new OTLPTraceExporter({
    url: "http://localhost:4318/v1/traces"
  }),
  instrumentations: [getNodeAutoInstrumentations()]
});

sdk.start();

console.log("تم تهيئة التتبع");

تتبع Python

# tracing.py
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from opentelemetry.instrumentation.requests import RequestsInstrumentor

# إعداد مُصَدِّر OTLP
otlp_exporter = OTLPSpanExporter(
    endpoint="http://localhost:4318/v1/traces"
)

# إعداد موفر التتبع
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(otlp_exporter)
)

# أدوات المكتبات التلقائية
FlaskInstrumentor().instrument()
RequestsInstrumentor().instrument()

tracer = trace.get_tracer(__name__)

تتبع Java

# التشغيل مع Java agent
java -javaagent:opentelemetry-javaagent.jar \
  -Dotel.exporter.otlp.endpoint=http://localhost:4318 \
  -Dotel.service.name=my-app \
  -jar app.jar

الأدوات اليدوية

إنشاء العروات

// Node.js
const { trace } = require("@opentelemetry/api");
const tracer = trace.getTracer("my-app");

const span = tracer.startSpan("process-request", {
  attributes: {
    "http.method": "GET",
    "http.url": "/api/users"
  }
});

try {
  // تنفيذ العمل
  span.addEvent("معالجة بيانات المستخدم");
  span.setStatus({ code: 0 });
} catch (error) {
  span.recordException(error);
  span.setStatus({ code: 2, message: error.message });
} finally {
  span.end();
}

جمع المقاييس

مقاييس JavaScript

// metrics.js
const { MeterProvider, PeriodicExportingMetricReader } = require("@opentelemetry/sdk-metrics");
const { OTLPMetricExporter } = require("@opentelemetry/exporter-metrics-otlp-http");

const reader = new PeriodicExportingMetricReader({
  exporter: new OTLPMetricExporter({
    url: "http://localhost:4318/v1/metrics"
  })
});

const meterProvider = new MeterProvider({ reader });
const meter = meterProvider.getMeter("my-app");

// إنشاء عداد
const requestCounter = meter.createCounter("http.requests", {
  description: "إجمالي طلبات HTTP"
});

requestCounter.add(1, {
  "http.method": "GET",
  "http.status_code": 200
});

إعدادات المُصَدِّرات

مُصَدِّر OTLP

// عبر HTTP
const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-http");

const exporter = new OTLPTraceExporter({
  url: "http://localhost:4318/v1/traces",
  headers: {
    "api-key": "your-api-key"
  },
  concurrencyLimit: 10,
  timeoutMillis: 30000
});

// عبر gRPC
const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-grpc");

const exporter = new OTLPTraceExporter({
  url: "grpc://localhost:4317"
});

أفضل الممارسات

  • تهيئة التتبع في وقت بدء التطبيق
  • استخدام نشر السياق للتتبع الموزع عبر الخدمات
  • تعيين سمات العروة ذات المعنى للتصحيح والتصفية
  • تطبيق أخذ العينات لتقليل النفقات في الأنظمة ذات حركة المرور العالية
  • تكوين معالجات دفعية لإنتاجية أفضل
  • استخدام السجلات المنظمة جنبًا إلى جنب مع العروات
  • مراقبة صحة المُصَدِّر والتصديرات الفاشلة
  • تعيين عتبات الإنذار لزمن استجابة التتبع

الموارد


آخر تحديث: 2025-03-30