[{"data":1,"prerenderedAt":222},["ShallowReactive",2],{"seo-verification":3,"blog-grafana-tempo-وopentelemetry-التتبع-الموزع-على-خادم-vps-ma-ar":6,"promo-bar-likely":221},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-grafana-tempo-وopentelemetry-التتبع-الموزع-على-خادم-vps-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":152,"ctaBody":153,"ctaButton":154,"ctaUrl":155,"relatedPosts":156},220,"grafana-tempo-وopentelemetry-التتبع-الموزع-على-خادم-vps",{"fr":12,"en":13,"ar":10,"es":14},"opentelemetry-grafana-tempo-vps","grafana-tempo-and-opentelemetry-distributed-tracing-on-vps","grafana-tempo-opentelemetry-trazado-distribuido-vps","Grafana Tempo وOpenTelemetry: التتبع الموزع على VPS","نشر OpenTelemetry وGrafana Tempo على VPS: البنية الكاملة، الإعداد خطوة بخطوة، استخدام Node.js وPython، الاحتفاظ بالبيانات على S3، واستعلامات TraceQL.",12,2,false,"2026-08-04T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fopentelemetry-grafana-tempo-vps-poster.svg",{"categorySlug":34,"appSlug":35},"المراقبة-وقابلية-الرصد","grafana","تتبع طلب عبر خدمات متعددة بدون أداة تتبع يعني تصفح آلاف سطور السجلات يدويًا. يشكّل OpenTelemetry وGrafana Tempo ثنائيًا مفتوح المصدر يحوّل هذا التحقيق إلى بضع نقرات. يشرح هذا الدليل كيفية نشر المكدّس الكامل على VPS، وتجهيز تطبيقاتك، واستخدام TraceQL لتشخيص مشاكل الأداء.",[38,42,53,56,59,84,87,90,93,142,145,149],{"type":39,"title":40,"body":41},"h2","لماذا اختيار OpenTelemetry بدلًا من وكيل خاص","OpenTelemetry مشروع \u003Ca href=\"https:\u002F\u002Fwww.cncf.io\u002Fprojects\u002Fopentelemetry\u002F\">متخرّج من CNCF\u003C\u002Fa> يوحّد ركائز المراقبة الثلاث — التتبعات والمقاييس والسجلات — تحت معيار محايد للمورّدين. على عكس وكلاء Datadog أو New Relic الذين يقيّدونك بعقد وصيغة خاصة، يستقبل OTel Collector البيانات ويحوّلها ويصدّرها إلى أي خادم متوافق. يمكنك تغيير التخزين دون تعديل سطر واحد في كود تطبيقك.\n\nتغطّي حزم SDK لغات Node.js وPython وGo وJava وPHP وRuby ومعظم اللغات الحديثة. **منتشرات السياق** W3C TraceContext وB3 مدمجة: تمرّر trace-id تلقائيًا بين خدماتك الصغيرة عبر رؤوس HTTP دون إعداد إضافي.",{"type":43,"title":44,"items":45},"ul","ما توفّره لك مكدّسة OTel + Grafana Tempo",[46,47,48,49,50,51,52],"**تتبع موزع بدون فهرس خارجي** — يخزّن Grafana Tempo v2.x التتبعات في كتل مضغوطة (parquet) على القرص المحلي أو تخزين الكائنات، بدون Cassandra أو Elasticsearch.","**استعلامات TraceQL** — تتيح لغة Tempo المخصصة تصفية التتبعات حسب المدة والخدمة وحالة الخطأ أو السمات المخصصة في ثوانٍ.","**توافق متعدد البروتوكولات** — يقبل Tempo بروتوكولات OTLP وZipkin وJaeger: تتصل تطبيقاتك الحالية دون إعادة تجهيز كاملة.","**خفيف على VPS** — 2 جيجابايت RAM تكفي لبيئة التطوير أو الاختبار؛ في الإنتاج تحت الحمل، يوفّر 4 جيجابايت هامشًا مريحًا.","**تكلفة محكومة** — VPS بسعر 99 درهم\u002Fشهر استضافة ذاتية يحلّ محل اشتراك Datadog APM بحوالي 23 دولارًا لكل مضيف شهريًا.","**ربط التتبعات بالسجلات والمقاييس** — بربط Tempo بـ Loki وPrometheus في Grafana، تنتقل من تتبع إلى سجلاته ومقاييسه بنقرة واحدة.","**لا قيود على المورّد** — إذا انتقلت إلى Jaeger غدًا، تعيد تهيئة مُصدِّر واحد في Collector؛ حزم SDK والكود لا تتغير.",{"type":39,"title":54,"body":55},"متطلبات VPS","يحتاج VPS إلى **2 جيجابايت RAM** على الأقل (يُنصح بـ 4 في الإنتاج) وصلاحية root أو sudo. يجب تثبيت Docker Engine ≥ 24 وDocker Compose v2.\n\nخطّط لنطاق فرعي مخصص — مثلًا `grafana.your-domain.com` — لعرض واجهة Grafana خلف وكيل عكسي TLS. يجب فتح المنفذَين **4317** (OTLP\u002FgRPC) و**4318** (OTLP\u002FHTTP) في جدار الحماية على الجانب الخاص لاستقبال البيانات من تطبيقاتك؛ لا تعرّضهما على الواجهة العامة. تبقى المنافذ 3200 (Tempo) و3000 (Grafana) داخلية في شبكة Docker.\n\nللتخزين، خطّط لـ 10 جيجابايت على الأقل لكتل التتبع. الوحدة الافتراضية في `\u002Ftmp\u002Ftempo` لا تبقى بعد إعادة التشغيل: استبدلها بـ Docker volume أو قرص مخصص قبل الإنتاج.",{"type":39,"title":57,"body":58},"بنية المكدّس: من span إلى التصوير","يتبع تدفق البيانات أربع خطوات:\n\n1. **تطبيقك** يجهّز طلباته بحزمة OTel SDK ويصدّر الـ spans إلى OTel Collector (OTLP gRPC منفذ 4317 أو HTTP منفذ 4318).\n2. **OTel Collector** يستقبل ويجمّع في دُفعات ثم يصدّر إلى Tempo عبر OTLP gRPC داخلي. يمكنه في آنٍ واحد إرسال المقاييس إلى Prometheus والسجلات إلى Loki.\n3. **Grafana Tempo** يخزّن كتل التتبع المضغوطة على القرص (أو S3). يعرض API لـ TraceQL على المنفذ 3200.\n4. **Grafana** يستعلم Tempo بـ TraceQL، ويعرض flamegraphs ورسوم بيانية للخدمات وSpan metrics.\n\n**TraceQL** هي لغة استعلام Tempo الأصلية. استعلام نموذجي: `{service.name=\"api\" && status=error && duration>500ms}`.\n\n**Span Metrics** خط أنابيب في Tempo يستخرج تلقائيًا مقاييس RED من التتبعات الواردة دون إضافة عدّاد واحد في كودك.",{"type":60,"title":61,"steps":62},"steps","نشر مكدّس OTel + Tempo في سبع خطوات",[63,66,69,72,75,78,81],{"title":64,"body":65},"إنشاء هيكل المجلدات","أنشئ مجلد `otel-stack\u002F` على VPS:\n\n```bash\nmkdir -p otel-stack\u002Fconfig\ncd otel-stack\n```\n\nستضع هنا ثلاثة ملفات إعداد: `tempo.yaml` و`otel-collector-config.yaml` و`docker-compose.yml`.",{"title":67,"body":68},"كتابة إعداد Tempo (tempo.yaml)","أنشئ `config\u002Ftempo.yaml` بخادم تخزين محلي ودعم TraceQL:\n\n```yaml\nserver:\n  http_listen_port: 3200\n\ndistributor:\n  receivers:\n    otlp:\n      protocols:\n        grpc:\n          endpoint: 0.0.0.0:4317\n\ningester:\n  max_block_bytes: 1_000_000\n  max_block_duration: 5m\n\ncompactor:\n  compaction:\n    block_retention: 168h   # 7 أيام\n\nstorage:\n  trace:\n    backend: local\n    wal:\n      path: \u002Ftmp\u002Ftempo\u002Fwal\n    local:\n      path: \u002Ftmp\u002Ftempo\u002Fblocks\n```",{"title":70,"body":71},"كتابة إعداد OTel Collector","أنشئ `config\u002Fotel-collector-config.yaml`:\n\n```yaml\nreceivers:\n  otlp:\n    protocols:\n      grpc:\n        endpoint: 0.0.0.0:4317\n      http:\n        endpoint: 0.0.0.0:4318\n\nprocessors:\n  batch:\n    timeout: 5s\n    send_batch_size: 1000\n\nexporters:\n  otlp:\n    endpoint: tempo:4317\n    tls:\n      insecure: true\n\nservice:\n  pipelines:\n    traces:\n      receivers: [otlp]\n      processors: [batch]\n      exporters: [otlp]\n```",{"title":73,"body":74},"كتابة ملف docker-compose.yml","أنشئ `docker-compose.yml` في جذر `otel-stack\u002F`:\n\n```yaml\nservices:\n  otel-collector:\n    image: otel\u002Fopentelemetry-collector-contrib:latest\n    volumes:\n      - .\u002Fconfig\u002Fotel-collector-config.yaml:\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml\n    ports:\n      - \"4317:4317\"\n      - \"4318:4318\"\n    networks:\n      - observability\n    depends_on:\n      - tempo\n\n  tempo:\n    image: grafana\u002Ftempo:latest\n    command: [\"-config.file=\u002Fetc\u002Ftempo.yaml\"]\n    volumes:\n      - .\u002Fconfig\u002Ftempo.yaml:\u002Fetc\u002Ftempo.yaml\n      - tempo-data:\u002Ftmp\u002Ftempo\n    ports:\n      - \"3200:3200\"\n    networks:\n      - observability\n\n  grafana:\n    image: grafana\u002Fgrafana:latest\n    ports:\n      - \"3000:3000\"\n    environment:\n      - GF_AUTH_ANONYMOUS_ENABLED=true\n      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin\n    networks:\n      - observability\n    depends_on:\n      - tempo\n\nvolumes:\n  tempo-data:\n\nnetworks:\n  observability:\n```\n\nشغّل المكدّس: `docker compose up -d` ثم تحقق: `docker compose ps`.",{"title":76,"body":77},"إعداد Grafana Tempo كمصدر بيانات","افتح Grafana على `http:\u002F\u002Fvps-الخاص-بك:3000`. انتقل إلى **Connections → Data sources → Add data source** واختر **Tempo**. اضبط URL على `http:\u002F\u002Ftempo:3200`. فعّل **Service graph** و**Span metrics**. إذا كانت مكدّستك تشمل Loki، اربط مصدرَي البيانات في حقل **Linked data sources** للتنقل من span إلى سجلاته بنقرة واحدة.",{"title":79,"body":80},"إرسال أول تتبع تجريبي","اختبر استقبال التتبعات باستخدام `telemetrygen`:\n\n```bash\ndocker run --rm --network otel-stack_observability \\\n  ghcr.io\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib\u002Ftelemetrygen:latest \\\n  traces \\\n  --otlp-endpoint otel-collector:4317 \\\n  --otlp-insecure \\\n  --duration 5s \\\n  --rate 10\n```\n\nفي Grafana، افتح **Explore**، اختر مصدر بيانات Tempo، ونفّذ الاستعلام `{}` لرؤية جميع التتبعات المستقبَلة.",{"title":82,"body":83},"استعلام التتبعات بـ TraceQL","في لوحة Explore بـ Grafana، أدخل استعلام TraceQL لتصفية تتبعاتك:\n\n- `{service.name=\"my-api\"}` — جميع تتبعات الخدمة\n- `{status=error}` — جميع التتبعات الخاطئة\n- `{duration>1s && service.name=\"my-api\"}` — التتبعات البطيئة\n- `{span.http.route=\"\u002Fapi\u002Forders\" && status=error}` — أخطاء مسار محدد\n\nانقر على أي تتبع لفتح flamegraph التفصيلي.",{"type":39,"title":85,"body":86},"تهيئة الاحتفاظ بالتتبعات والتخزين","يوفّر Tempo خيارَي تخزين رئيسيَّين.\n\n**التخزين المحلي على Docker volume**: الخيار الموصى به لـ VPS مستقل. اضبط `block_retention` في `tempo.yaml` حسب الحاجة: 72 ساعة لبيئة الاختبار، 168 إلى 720 ساعة للإنتاج. كل ساعة من التتبعات المضغوطة تشغل حوالي 100–300 ميجابايت.\n\n**تخزين كائنات متوافق مع S3**: لمكدّس متعدد العقد أو تخزين غير محدود. Tempo متوافق مع AWS S3 وMinIO وScaleway Object Storage. تبقى WAL دائمًا على القرص المحلي لضمان متانة التتبعات قيد الاستيعاب.\n\nيدمج **المضغّط** كتلًا صغيرة ويطبّق سياسة الاحتفاظ تلقائيًا كل 5 دقائق.",{"type":39,"title":88,"body":89},"تجهيز تطبيق Node.js","يلتقط التجهيز التلقائي لـ OTel في Node.js استدعاءات HTTP والطلبات وقواعد البيانات دون تعديل منطق الأعمال.\n\nثبّت الحزم:\n\n```bash\nnpm install @opentelemetry\u002Fsdk-node \\\n             @opentelemetry\u002Fauto-instrumentations-node \\\n             @opentelemetry\u002Fexporter-trace-otlp-grpc\n```\n\nأنشئ `tracing.js`:\n\n```js\nconst { NodeSDK } = require('@opentelemetry\u002Fsdk-node');\nconst { getNodeAutoInstrumentations } = require('@opentelemetry\u002Fauto-instrumentations-node');\nconst { OTLPTraceExporter } = require('@opentelemetry\u002Fexporter-trace-otlp-grpc');\n\nconst sdk = new NodeSDK({\n  traceExporter: new OTLPTraceExporter({\n    url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'grpc:\u002F\u002Flocalhost:4317',\n  }),\n  instrumentations: [getNodeAutoInstrumentations()],\n});\n\nsdk.start();\n```\n\nشغّل التطبيق:\n\n```bash\nexport OTEL_SERVICE_NAME=my-api\nexport OTEL_EXPORTER_OTLP_ENDPOINT=http:\u002F\u002Fyour-vps:4317\nnode --require .\u002Ftracing.js app.js\n```",{"type":39,"title":91,"body":92},"تجهيز تطبيق Python","تثبيت وإعداد:\n\n```bash\npip install opentelemetry-distro opentelemetry-exporter-otlp\nopentelemetry-bootstrap -a install\n```\n\nتشغيل التطبيق:\n\n```bash\nexport OTEL_SERVICE_NAME=my-python-service\nexport OTEL_EXPORTER_OTLP_ENDPOINT=http:\u002F\u002Fyour-vps:4317\nexport OTEL_EXPORTER_OTLP_PROTOCOL=grpc\nopentelemetry-instrument python app.py\n```\n\nيتم تجهيز Django وFlask وFastAPI وSQLAlchemy وعملاء HTTP تلقائيًا. للتجهيز اليدوي:\n\n```python\nfrom opentelemetry import trace\ntracer = trace.get_tracer(__name__)\nwith tracer.start_as_current_span(\"process-order\") as span:\n    span.set_attribute(\"order.id\", order_id)\n```",{"type":94,"title":95,"headers":96,"rows":101},"comparison","OTel + Tempo مقابل Jaeger مقابل Zipkin مقابل Datadog APM",[97,98,99,100],"المعيار","OTel + Grafana Tempo","Jaeger","Datadog APM",[102,107,112,117,122,127,132,137],[103,104,105,106],"التكلفة الشهرية","الاستضافة فقط (99 درهم\u002Fشهر VPS)","الاستضافة فقط (مماثل)","~23 دولار لكل مضيف شهريًا",[108,109,110,111],"خادم التخزين","محلي، S3، GCS، Azure Blob","Cassandra، Elasticsearch، Badger","SaaS مُدار (مغلق)",[113,114,115,116],"لغة الاستعلام","TraceQL (أصلية، قوية)","Jaeger Query UI (أساسية)","لغة خاصة بـ Datadog",[118,119,120,121],"التجهيز التلقائي","حزمة OTel SDK عالمية","مكتبات Jaeger أو OTel","وكيل Datadog الخاص",[123,124,125,126],"ربط التتبعات بالسجلات","نعم (Loki + Grafana)","محدود","نعم (مدمج، مدفوع)",[128,129,130,131],"Span Metrics (RED)","نعم (خط أنابيب Tempo أصلي)","غير أصلي","نعم (يحسبه Datadog)",[133,134,135,136],"القيود على المورّد","لا شيء (معيار CNCF)","منخفض (متوافق مع OTel)","قوي (وكيل وصيغة خاصة)",[138,139,140,141],"تعقيد التثبيت","متوسط (3 حاويات)","منخفض إلى متوسط","منخفض (وكيل تلقائي)",{"type":39,"title":143,"body":144},"التنبيهات وـ SLOs في Grafana","يتيح Grafana 10+ تعريف تنبيهات على المقاييس المشتقة من التتبعات. تولّد **Span Metrics** في Tempo ثلاثة مقاييس تلقائيًا لكل خدمة: معدل الطلبات وتوزيع زمن الاستجابة وعدّاد الأخطاء.\n\nلإنشاء SLO على معدل الخطأ، اذهب إلى **Alerting → Alert rules → New alert rule** في Grafana، اختر مصدر بيانات Prometheus، وأدخل استعلامًا يحسب نسبة الأخطاء. اضبط الحد (مثلًا `> 0.05` لمعدل خطأ فوق 5%) ونافذة التقييم. هيّئ نقطة اتصال: Alertmanager أو PagerDuty أو Slack أو webhook. التنبيهات المبنية على التتبعات أدق بكثير من التنبيهات على مقاييس اصطناعية.",{"type":146,"title":147,"body":148},"tip","الجمع بين التتبعات والسجلات والمقاييس في Collector واحد","OTel Collector ليس حصرًا للتتبعات. بإضافة **`filelog` receiver**، تجمع سجلات حاويات Docker وترسلها إلى Loki. و**`prometheus` receiver** يجمع نقاط `\u002Fmetrics` ويصدّرها إلى Prometheus. عملية واحدة تدير كل بيانات المراقبة على VPS.\n\nفي Grafana، اربط Tempo وLoki عبر **derived fields**: عندما يحتوي سجل على `trace_id`، رابط قابل للنقر يأخذك مباشرة إلى flamegraph المقابل. هذا التنقل المتقاطع يقلّص وقت التشخيص بشكل ملحوظ.",{"type":39,"title":150,"body":151},"حل المشكلات الشائعة","**لا spans تصل إلى Tempo.** تحقق أولًا من أن OTel Collector قابل للوصول من تطبيقك (`telnet your-vps 4317`). راجع سجلات Collector: خطأ `connection refused` على `tempo:4317` يعني أن Tempo لم يبدأ بعد أو منفذه الداخلي غير مكشوف على شبكة Docker.\n\n**رفض الاتصال من التطبيق إلى Collector.** في UFW أو firewalld، اسمح بالمنفذَين 4317 و4318 لعناوين IP تطبيقاتك فقط. في الإنتاج، ضع التطبيقات والـ Collector على نفس الشبكة الخاصة.\n\n**تتبعات مقطوعة أو spans مفقودة.** قد يستغرق الـ batch processor حتى 5 ثوانٍ قبل الإرسال. للتطوير، قلّل `timeout: 1s`. إذا كانت spans غائبة باستمرار، تحقق من تفعيل منتشر السياق `W3CTraceContextPropagator` في SDK.\n\n**Tempo يستهلك مساحة كبيرة.** قلّل `block_retention` وأعد تشغيل Tempo. سيطبّق المضغّط السياسة الجديدة في الدورة القادمة.\n\n**Grafana لا يجد تتبعات من سجلات Loki.** تحقق من أن تطبيقاتك تحقن `trace_id` في السجلات وأن **Derived fields** في مصدر بيانات Loki يشير إلى النمط الصحيح.","استضف مكدّس المراقبة على VPS","ابدأ من 99 درهم\u002Fشهر — وصول root كامل، تخزين SSD، بدون قيود على المزود.","اطلع على خطط VPS","\u002Fapplications\u002Fالمراقبة-وقابلية-الرصد\u002Fgrafana",[157,181,199],{"id":158,"slug":159,"slugs":160,"title":164,"excerpt":165,"readTime":166,"views":167,"isPinned":19,"noindex":19,"publishedAt":168,"updatedAt":169,"category":170,"categories":176,"featuredImage":30,"bgImage":31,"posterImage":178,"relatedSolution":179},176,"استضافة-openobserve-على-vps-سجلات-ومقاييس-وتتبعات-موحدة",{"fr":161,"en":162,"ar":159,"es":163},"self-host-openobserve-vps","self-host-openobserve-on-a-vps-unified-logs-metrics-and-traces","alojar-openobserve-en-un-vps","استضافة OpenObserve على VPS: سجلات ومقاييس وتتبّعات موحّدة","استبدل حزمة Elasticsearch وGrafana بـ OpenObserve: ملف Rust تنفيذي واحد للسجلات والمقاييس والتتبّعات واللوحات، بتكلفة تخزين أقل بمقدار 140 مرة.",6,0,"2026-07-10T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":171,"name":172,"slug":173,"color":174,"icon":175},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[177],{"id":171,"name":172,"slug":173,"color":174,"icon":175},"\u002Fblog\u002Fcovers\u002Fself-host-openobserve-vps-poster.svg",{"categorySlug":34,"appSlug":180},"openobserve",{"id":182,"slug":183,"slugs":184,"title":188,"excerpt":189,"readTime":190,"views":191,"isPinned":19,"noindex":19,"publishedAt":192,"updatedAt":21,"category":193,"categories":194,"featuredImage":30,"bgImage":31,"posterImage":196,"relatedSolution":197},209,"استضافة-gatus-على-vps-صفحة-حالة-بالكود-ومراقبة-شاملة",{"fr":185,"en":186,"ar":183,"es":187},"self-host-gatus-vps","self-host-gatus-on-a-vps-config-as-code-status-page-and-checks","alojar-gatus-en-un-vps","استضافة Gatus على VPS: صفحة حالة بالكود ومراقبة شاملة","انشر Gatus على VPS ServOrbit للحصول على صفحة حالة عامة ومراقبة HTTP وTCP وDNS وICMP وانتهاء TLS من ملف YAML واحد، مع أكثر من 40 تكاملًا للتنبيه.",4,1,"2026-08-02T00:00:00+00:00",{"id":171,"name":172,"slug":173,"color":174,"icon":175},[195],{"id":171,"name":172,"slug":173,"color":174,"icon":175},"\u002Fblog\u002Fcovers\u002Fself-host-gatus-vps-poster.svg",{"categorySlug":34,"appSlug":198},"gatus",{"id":200,"slug":201,"slugs":202,"title":206,"excerpt":207,"readTime":208,"views":18,"isPinned":19,"noindex":19,"publishedAt":209,"updatedAt":21,"category":210,"categories":215,"featuredImage":30,"bgImage":31,"posterImage":217,"relatedSolution":218},177,"استضافة-langfuse-على-vps-مراقبة-llm-بلا-فاتورة-saas",{"fr":203,"en":204,"ar":201,"es":205},"self-host-langfuse-vps","self-host-langfuse-on-a-vps-llm-observability-no-saas-bill","alojar-langfuse-en-un-vps","استضافة ‫Langfuse‬ على ‫VPS‬: مراقبة ‫LLM‬ بلا فاتورة ‫SaaS‬","استضف ‫Langfuse‬ ذاتيًا على خادم ‫VPS‬ — تتبّع كل استدعاء ذكاء اصطناعي، قيّم جودة الـ ‫prompts‬، وراقب التكاليف. دليل كامل: تثبيت، ‫nginx‬، ‫TLS‬، ‫SDK‬ وحل المشكلات.",11,"2026-07-12T00:00:00+00:00",{"id":191,"name":211,"slug":212,"color":213,"icon":214},"الذكاء الاصطناعي","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400","ia",[216],{"id":191,"name":211,"slug":212,"color":213,"icon":214},"\u002Fblog\u002Fcovers\u002Fself-host-langfuse-vps-poster.svg",{"categorySlug":219,"appSlug":220},"الذكاء-الاصطناعي","langfuse",true,1794270338375]