[{"data":1,"prerenderedAt":176},["ShallowReactive",2],{"seo-verification":3,"blog-loki-grafana-logs-centralises-vps-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"title":9,"excerpt":10,"readTime":11,"views":12,"isPinned":13,"publishedAt":14,"category":15,"categories":21,"featuredImage":23,"bgImage":24,"posterImage":25,"relatedSolution":26,"intro":29,"sections":30,"ctaTitle":137,"ctaBody":138,"ctaButton":139,"ctaUrl":140,"relatedPosts":141},243,"loki-grafana-logs-centralises-vps","مركزة سجلات Docker على VPS باستخدام Loki وGrafana","اجمع سجلات جميع حاويات Docker في لوحة تحكم Grafana واحدة باستخدام Loki وPromtail على VPS الخاص بك. بدون Datadog ولا حصص.",10,0,false,"2026-08-10T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":20},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[22],{"id":16,"name":17,"slug":18,"color":19,"icon":20},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Floki-grafana-logs-centralises-vps-poster.svg",{"categorySlug":27,"appSlug":28},"monitoring","grafana","التنقل بين جلسات SSH لقراءة سجلات كل حاوية يستهلك وقتًا ثمينًا — هو الوقت اللازم لتحديد خطأ 502 ظهر في عدة خدمات في آنٍ واحد. تحلّ Loki هذه المشكلة بتمركز جميع تدفقات السجلات في لوحة تحكم Grafana واحدة، مع استهلاك ذاكرة يتوافق مع VPS قياسي، في حين تتطلّب مكدّسة ELK خادمًا مخصصًا. يغطي هذا الدليل النشر الكامل: Loki وPromtail وGrafana والإعداد بعد التثبيت.",[31,35,47,50,81,84,87,90,98,101,134],{"type":32,"title":33,"body":34},"h2","لماذا تمركز السجلات على VPS بدلًا من الاكتفاء بـ SSH","حين تصيب مشكلةٌ عدة خدمات في الوقت ذاته — انتهاء مهلة على مستوى التطبيق، وخطأ 502 على مستوى ‎nginx‎، واستثناء داخل worker — لا تتيح أداة SSH واحدة ربط هذه الأحداث دون قراءتها واحدة تلو الأخرى. `docker compose logs -f app` ثم `docker compose logs -f nginx` ثم `docker compose logs -f worker`: هذا تشخيص تسلسلي على خادم واحد. وعلى خادمَي ‎VPS‎ يتضاعف الوقت، وعلى ثلاثة يتضاعف ثلاثًا.\n\nLoki هو نظام مفتوح المصدر لتجميع السجلات، طوّرته Grafana Labs وهو مدرج في كتالوج CNCF. على عكس Elasticsearch الذي يُفهرس كامل محتوى كل سطر، لا تُفهرس Loki إلا **التسميات** — البيانات الوصفية الخفيفة كاسم الحاوية والخدمة والبيئة. أما السجلات ذاتها فتُضغط وتُخزَّن كما هي. لهذا الاختيار التصميمي نتيجة مباشرة: تعمل Loki بارتياح على ‎VPS‎ بذاكرة 2 غيغابايت، في حين تتطلب مكدّسة ELK الأساسية 8 إلى 16 غيغابايت على الأقل لتبقى مستقرة. بالنسبة لمطور أو مسؤول نظام يدير تطبيقات باستضافة ذاتية متعددة بدون ميزانية APM مؤسسية، هذا هو الفارق بين حل قابل للتطبيق وحل مثالي غير عملي.",{"type":36,"title":37,"items":38},"ul","ما تقدمه هذه المكدّسة بشكل ملموس",[39,40,41,42,43,44,45,46],"**بحث موحّد عبر جميع الحاويات** — استعلام LogQL واحد يشمل جميع الخدمات على كل ‎VPS‎ الخاص بك، دون SSH أو ‎`grep`‎ موزّع.","**ربط زمني** — تعرض Grafana كلًا من Loki (السجلات) وPrometheus (المقاييس) على نفس محور الزمن: ترى خطأ 502 وذروة CPU التي سبقته في عرض واحد.","**لا حصص استيعاب** — تخزّن من السجلات ما يسمح به قرصك دون اشتراك أو حدود شهرية مفروضة من طرف ثالث.","**بصمة ذاكرة محدودة** — تستهلك Loki ذاكرة أقل بكثير من Elasticsearch عند نفس حجم السجلات، بفضل الفهرسة بالتسميات فقط.","**احتفاظ قابل للتهيئة** — حدّد مدة الاحتفاظ لكل تسمية (`chunk_retain_period`، `retention_period`) وفقًا لقيود القرص والامتثال لديك.","**تكامل أصلي مع Grafana** — Loki هو مصدر بيانات من الدرجة الأولى في Grafana: لا مكوّن إضافي من طرف ثالث، ولا واجهة API وسيطة.","**تنبيهات على محتوى السجلات** — يمكن لـ Grafana تشغيل تنبيه حين يطابق تعبير نظامي تدفق Loki، دون المرور بخدمة خارجية.","**البيانات مستضافة على بنيتك التحتية** — تبقى السجلات على ‎VPS‎ الخاص بك دون عبور خدمة سحابية.",{"type":32,"title":48,"body":49},"المتطلبات الأساسية قبل النشر","مكدّسة Loki + Promtail + Grafana خفيفة، لكن لها متطلباتها الخاصة. إليك ما تحتاجه قبل البدء.\n\n**الموارد الموصى بها لـ VPS**: يُمثّل 2 vCPU و2 غيغابايت RAM الحدَّ الأدنى المعقول للاستخدام على خادم واحد مع عشرات الحاويات النشطة. إن كنت تجمع سجلات من عدة ‎VPS‎ أو عدد كبير من الخدمات، استهدف 4 غيغابايت RAM. لا تحتفظ Loki بالسجلات في الذاكرة: تضغطها وتكتبها على القرص، مما يُبقي بصمة الذاكرة مستقرة بمرور الوقت. خطّط لـ 20 إلى 50 غيغابايت من تخزين SSD بحسب حجم سجلاتك ومدة الاحتفاظ.\n\n**البرامج المطلوبة**: Docker وDocker Compose v2 مثبَّتان على ‎VPS‎، ونطاق فرعي مخصص (`logs.your-domain.com`) يشير إلى عنوان IP للـ ‎VPS‎، مع إمكانية الوصول الداخلي إلى المنفذين 3100 (Loki) و3000 (Grafana). يجب **ألا** يُكشف المنفذ 3100 للعموم — Loki لا تمتلك طبقة مصادقة أصلية، ويُكشف Grafana فقط عبر بروكسي عكسي.",{"type":51,"title":52,"steps":53},"steps","النشر خطوة بخطوة",[54,57,60,63,66,69,72,75,78],{"title":55,"body":56},"إنشاء هيكل الدلائل","تواصل مع ‎VPS‎ الخاص بك وأنشئ دليلًا مخصصًا: `mkdir -p \u002Fopt\u002Floki-stack\u002F{loki,promtail} && cd \u002Fopt\u002Floki-stack`. سيستضيف هذا المجلد ملفات إعداد Loki وPromtail إلى جانب ‎`docker-compose.yml`‎.",{"title":58,"body":59},"كتابة إعداد Loki","أنشئ ‎`\u002Fopt\u002Floki-stack\u002Floki\u002Floki-config.yaml`‎ بالمحتوى التالي:\n\n`auth_enabled: false` — يُعطّل المصادقة متعددة المستأجرين، وهو كافٍ للاستخدام على ‎VPS‎ واحد.\n\n`server: { http_listen_port: 3100 }`\n\n`ingester: { lifecycler: { address: 127.0.0.1, ring: { kvstore: { store: inmemory }, replication_factor: 1 } }, chunk_idle_period: 5m, chunk_retain_period: 30s }`\n\n`schema_config: { configs: [ { from: 2020-10-24, store: boltdb-shipper, object_store: filesystem, schema: v11, index: { prefix: index_, period: 24h } } ] }`\n\n`storage_config: { boltdb_shipper: { active_index_directory: \u002Floki\u002Fboltdb-shipper-active, cache_location: \u002Floki\u002Fboltdb-shipper-cache, shared_store: filesystem }, filesystem: { directory: \u002Floki\u002Fchunks } }`\n\n`limits_config: { retention_period: 720h }`",{"title":61,"body":62},"كتابة إعداد Promtail","أنشئ ‎`\u002Fopt\u002Floki-stack\u002Fpromtail\u002Fpromtail-config.yaml`‎. Promtail هو العميل الذي يجمع السجلات من حاويات Docker ويرسلها إلى Loki:\n\n`server: { http_listen_port: 9080, grpc_listen_port: 0 }`\n\n`positions: { filename: \u002Ftmp\u002Fpositions.yaml }`\n\n`clients: [ { url: http:\u002F\u002Floki:3100\u002Floki\u002Fapi\u002Fv1\u002Fpush } ]`\n\n`scrape_configs: [ { job_name: docker, docker_sd_configs: [ { host: unix:\u002F\u002F\u002Fvar\u002Frun\u002Fdocker.sock, refresh_interval: 5s } ], relabel_configs: [ { source_labels: ['__meta_docker_container_name'], regex: '\u002F(.*)', target_label: container }, { source_labels: ['__meta_docker_container_log_stream'], target_label: stream } ] } ]`\n\nيستخدم هذا الإعداد الاكتشاف التلقائي لـ ‎Docker‎ (`docker_sd_configs`)، الذي يكتشف كل حاوية مُشغَّلة دون تدخل يدوي.",{"title":64,"body":65},"كتابة ملف docker-compose.yml","أنشئ ‎`\u002Fopt\u002Floki-stack\u002Fdocker-compose.yml`‎:\n\n`version: '3.8'`\n\n`services:`\n  `loki:` `image: grafana\u002Floki:3.0.0` `ports: ['127.0.0.1:3100:3100']` `volumes: [loki-data:\u002Floki, .\u002Floki\u002Floki-config.yaml:\u002Fetc\u002Floki\u002Flocal-config.yaml]` `command: -config.file=\u002Fetc\u002Floki\u002Flocal-config.yaml` `restart: unless-stopped`\n\n  `promtail:` `image: grafana\u002Fpromtail:3.0.0` `volumes: [\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro, .\u002Fpromtail\u002Fpromtail-config.yaml:\u002Fetc\u002Fpromtail\u002Fconfig.yml, \u002Fvar\u002Flog:\u002Fvar\u002Flog:ro]` `command: -config.file=\u002Fetc\u002Fpromtail\u002Fconfig.yml` `restart: unless-stopped` `depends_on: [loki]`\n\n  `grafana:` `image: grafana\u002Fgrafana:latest` `ports: ['127.0.0.1:3000:3000']` `volumes: [grafana-data:\u002Fvar\u002Flib\u002Fgrafana]` `environment: [GF_SECURITY_ADMIN_PASSWORD=غيّر-هذا]` `restart: unless-stopped` `depends_on: [loki]`\n\n`volumes:` `loki-data:` `grafana-data:`\n\nلاحظ أن Loki (3100) وGrafana (3000) مرتبطان بـ `127.0.0.1` فقط — لا يمكن الوصول إليهما مباشرةً من الخارج.",{"title":67,"body":68},"تشغيل المكدّسة","من داخل `\u002Fopt\u002Floki-stack`، شغّل: `docker compose up -d`. انتظر 20 إلى 30 ثانية ثم تحقق من أن الحاويات الثلاث تعمل: `docker compose ps`. ثم تحقق من سجلات Loki لتأكيد أنها بدأت دون أخطاء: `docker compose logs -f loki`. يجب أن ترى السطر `msg=\"Loki started\"` في المخرجات.",{"title":70,"body":71},"إعداد البروكسي العكسي لـ Grafana","اكشف Grafana عبر ‎nginx‎ بنطاق فرعي وشهادة TLS. أنشئ ‎`\u002Fetc\u002Fnginx\u002Fsites-available\u002Fgrafana.conf`‎:\n\n`server { listen 443 ssl; server_name logs.your-domain.com; ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Flogs.your-domain.com\u002Ffullchain.pem; ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Flogs.your-domain.com\u002Fprivkey.pem; location \u002F { proxy_pass http:\u002F\u002F127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }`\n\naحصل على الشهادة بـ: `certbot certonly --nginx -d logs.your-domain.com`، ثم فعّل الموقع: `ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fgrafana.conf \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F && nginx -t && systemctl reload nginx`.",{"title":73,"body":74},"إضافة Loki كمصدر بيانات في Grafana","افتح `https:\u002F\u002Flogs.your-domain.com` في متصفحك. سجّل الدخول باسم المستخدم `admin` وكلمة المرور التي حددتها في `GF_SECURITY_ADMIN_PASSWORD`. انتقل إلى **Connections → Data sources → Add data source**، اختر **Loki**، وأدخل الرابط: `http:\u002F\u002Floki:3100`. انقر **Save & test** — يجب أن ترى الرسالة `Data source connected and labels found`.",{"title":76,"body":77},"استعلام أول سجلاتك","في Grafana، افتح تبويب **Explore** وحدد مصدر Loki. استخدم Log Browser لاختيار تسمية `container` والتصفية باسم الحاوية. على سبيل المثال، لرؤية جميع سجلات حاوية `nginx`: `{container=\"nginx\"}`. للتصفية على سلسلة نصية: `{container=\"nginx\"} |= \"error\"`. لحساب الأخطاء بحسب الحاوية خلال الساعة الأخيرة: `sum by (container) (count_over_time({container=~\".+\"} |= \"error\" [1h]))`.",{"title":79,"body":80},"جمع سجلات من VPS ثانٍ","لمركزة سجلات ‎VPS‎ ثانٍ في نفس Loki، ثبّت Promtail فقط على ذلك ‎VPS‎ الثانوي. في إعداده، استبدل رابط العميل بالعنوان الداخلي لـ ‎VPS‎ الأول: `url: http:\u002F\u002F\u003CLoki-VPS-IP>:3100\u002Floki\u002Fapi\u002Fv1\u002Fpush`. افتح المنفذ 3100 **فقط** بين الخادمَين (جدار حماية أو شبكة خاصة)، ولا تكشفه للعموم أبدًا. أضف تسمية ثابتة لتمييز السجلات بحسب الخادم: `static_configs: [ { labels: { host: vps2 } } ]`.",{"type":32,"title":82,"body":83},"الإعداد بعد التثبيت: الاحتفاظ والنسخ الاحتياطي والتنبيهات","بعد تشغيل المكدّسة، ثمة ثلاثة تعديلات مهمة قبل اعتبار النشر مكتملًا.\n\n**الاحتفاظ.** تمثل قيمة `retention_period: 720h` في `loki-config.yaml` ما يعادل 30 يومًا. اضبط هذا المعامل بحسب المساحة المتاحة على قرصك (`docker system df` للتحقق من استخدام الأحجام). تُطبّق Loki الاحتفاظ في الخلفية دون تأثير ملحوظ على الأداء.\n\n**النسخ الاحتياطي.** يحتوي حجم `loki-data` على فهارس BoltDB والمقاطع المضغوطة — وهو العنصر الوحيد الذي يحتاج نسخًا احتياطيًا. يكفي لقطة يومية لحجم Docker (`docker run --rm -v loki-data:\u002Fdata -v \u002Fbackup:\u002Fbackup alpine tar czf \u002Fbackup\u002Floki-$(date +%F).tar.gz \u002Fdata`) للاستخدام القياسي. لا تنسَ تضمين حجم `grafana-data` في النسخ الاحتياطي (يحتوي على لوحات التحكم والتنبيهات).\n\n**التنبيهات على محتوى السجلات.** في Grafana، أنشئ تنبيهًا من نوع **Grafana managed alert** على استعلام Loki: مثلًا، تشغيل إشعار حين يتجاوز عدد السطور التي تحتوي على `FATAL` الصفر خلال آخر 5 دقائق. هيّئ قناة إشعارات (بريد إلكتروني، Slack، webhook) في **Alerting → Contact points** قبل إنشاء القاعدة.",{"type":85,"body":86},"tip","لا تُوفّر Loki أي آلية مصادقة أصلية على المنفذ 3100. إن احتجت إلى كشف واجهة Loki لشبكة غير موثوقة (لعملاء Promtail بعيدين مثلًا)، ضع بروكسي عكسيًا لـ ‎nginx‎ مع مصادقة بشهادة العميل أو basic auth أمامه. لا تترك المنفذ 3100 مفتوحًا على `0.0.0.0` في ‎VPS‎ الإنتاج أبدًا. على جانب Grafana، فعّل المصادقة القوية: `GF_AUTH_ANONYMOUS_ENABLED=false` و`GF_USERS_ALLOW_SIGN_UP=false` في متغيرات بيئة الحاوية.",{"type":32,"title":88,"body":89},"استكشاف الأخطاء: الأخطاء الشائعة وكيفية حلها","إليك المشكلات الأكثر شيوعًا عند نشر مكدّسة Loki + Promtail + Grafana.",{"type":36,"title":91,"items":92},"الأخطاء الشائعة",[93,94,95,96,97],"**`msg=\"error creating ingester\" err=\"context deadline exceeded\"` عند بدء تشغيل Loki** — حاوية Loki لا تملك صلاحية الكتابة إلى الحجم المُركَّب. تحقق من صلاحيات الدليل المقابل لحجم Docker (`docker inspect loki-data` للعثور على المسار الفعلي) وتأكد من أن مستخدم الحاوية (UID 10001 في صور Grafana الحديثة) يمكنه الكتابة: `chown -R 10001:10001 \u002Fمسار\u002Fالحجم`.","**غياب `Data source connected and labels found` في Grafana واستبداله بـ `connection refused`** — لا تستطيع Grafana الوصول إلى Loki. تحقق من أن الرابط المُدخَل في مصدر البيانات هو `http:\u002F\u002Floki:3100` (اسم خدمة Docker، وليس `localhost`) وأن الحاويتين في نفس شبكة Docker (`docker inspect loki-grafana-stack_default`).","**عدم جمع Promtail لأي سجلات، وظهور `component=discovery.docker msg=\"refreshing targets\"` في حلقة بلا تقدم عند تشغيل `docker compose logs -f promtail`** — Promtail لا يملك صلاحية الوصول إلى socket Docker. تحقق من أن الحجم `\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro` مُعرَّف في خدمة Promtail وأن الـ socket موجود على المضيف: `ls -la \u002Fvar\u002Frun\u002Fdocker.sock`.","**`err=\"entry out of order for stream\"` في سجلات Loki** — تصل سجلات بتوقيتات مضطربة الترتيب (حاوية أُعيد تشغيلها تُعيد إرسال سجلات قديمة مثلًا). أضف `max_stream_label_count: 0` تحت `limits_config` و`unordered_writes: true` تحت `ingester` في `loki-config.yaml` لقبول الإدخالات غير المتسلسلة.","**عرض Grafana لـ `no data` على استعلام LogQL صحيح** — تحقق أولًا من نطاق الوقت المُحدد في أعلى اليمين (الفخ الأكثر شيوعًا: نطاق مضبوط على `last 5 minutes` بينما لم يجمع Promtail بعد سجلات حديثة). ثم تحقق من وجود التسمية المُستخدمة في استعلامك: `{container=\"nginx\"}` يفشل إن كانت الحاوية تُسمى `nginx-1` — استخدم Log Browser لاستكشاف التسميات المتاحة.",{"type":32,"title":99,"body":100},"لوحة تحكم لربط السجلات بالمقاييس","الفائدة الرئيسية لـ Loki في بيئة Grafana قائمة هي الربط مع مقاييس Prometheus. إن كان لديك بالفعل مصدر Prometheus (راجع مقال مراقبة VPS بـ Grafana وPrometheus)، يمكنك إنشاء لوحة تحكم مختلطة: صف من لوحات المقاييس (CPU والذاكرة ومعدل طلبات HTTP) في الأعلى، ولوحة سجلات Loki مُصفَّاة على نفس الخدمة في الأسفل. حين يظهر ذروة CPU عند الساعة 14:37، ترى فورًا أي السجلات صدرت في تلك اللحظة بالذات، دون تبديل أدوات أو إعادة تشغيل أمر SSH. هذا النوع من الربط هو حالة الاستخدام التي تُبرر نشر المكدّستين معًا بدلًا من واحدة منهما: Prometheus لـ\"ما يُقاس\"، وLoki لـ\"ما يُروى\".",{"type":102,"title":103,"headers":104,"rows":109},"comparison","Loki مقابل ELK مقابل سجلات SSH — أي نهج لأي حالة",[105,106,107,108],"المعيار","SSH + docker logs","مكدّسة ELK (Elastic)","Loki + Grafana",[110,115,120,125,130],[111,112,113,114],"RAM المطلوبة","لا شيء (لا خدمة)","8–16 غيغابايت كحد أدنى لكل عقدة","2–4 غيغابايت لـ VPS قياسي",[116,117,118,119],"الفهرسة","لا شيء","فهرسة نصية كاملة (Elasticsearch)","فهرسة بالتسميات فقط",[121,122,123,124],"البحث متعدد الخوادم","مستحيل بلا نص برمجي","نعم، بشكل أصلي","نعم، عبر Promtail متعدد المضيفين",[126,127,128,129],"الربط بالمقاييس","يدوي","مع Kibana + APM (معقد)","أصلي في Grafana",[131,117,132,133],"تكلفة البرمجيات","الرخصة الأساسية مجانية، الميزات محدودة","مفتوح المصدر كليًا، بلا حصص",{"type":32,"title":135,"body":136},"ما وضعته الآن في المدار","أصبح لديك الآن مكدّسة تجميع سجلات تعمل بالكامل: تُخزّن Loki وتُفهرس بالتسميات، ويجمع Promtail تلقائيًا تدفقات جميع حاويات Docker الخاصة بك، وتوفر Grafana واجهة بحث وتنبيه. تعمل المكدّسة بالكامل على ‎VPS‎ الخاص بك، دون خدمة طرف ثالث، ودون حصص استيعاب، ودون تكلفة برمجية إضافية.\n\nالخطوات الطبيعية التالية: ربط هذه المكدّسة بمراقبة Prometheus الحالية لربط المقاييس بالسجلات، وتفعيل تتبع موزّع مع Tempo إن كانت تطبيقاتك تُصدر تتبعات OpenTelemetry، واستكشاف تنبيهات Grafana على محتوى السجلات لتكون على دراية بالمشكلة قبل أن يُبلّغك عنها مستخدموك.","VPS جاهز لمكدّسة الملاحظة الخاصة بك","انشر Loki وPromtail وGrafana على VPS ServOrbit Cloud مع وصول كامل بصلاحيات root وIPv4 مخصصة وتخزين SSD NVMe. لا قيود على المنافذ، ولا رسوم إضافية على البرامج.","عرض VPS السحابية","\u002Fsolutions\u002Fdeveloppeurs",[142,155,166],{"id":143,"slug":144,"title":145,"excerpt":146,"readTime":147,"views":148,"isPinned":13,"publishedAt":149,"category":150,"categories":151,"featuredImage":23,"bgImage":24,"posterImage":153,"relatedSolution":154},106,"monitoring-vps-grafana-prometheus","مراقبة الخادم الافتراضي VPS باستخدام Grafana و Prometheus","أنشئ حزمة Grafana + Prometheus على خادمك الافتراضي VPS لجمع مقاييس النظام والتطبيقات وتخزينها وعرضها بصريًا.",4,522,"2026-03-06T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":20},[152],{"id":16,"name":17,"slug":18,"color":19,"icon":20},"\u002Fblog\u002Fcovers\u002Fmonitoring-vps-grafana-prometheus-poster.svg",{"categorySlug":27,"appSlug":28},{"id":156,"slug":157,"title":158,"excerpt":159,"readTime":147,"views":12,"isPinned":13,"publishedAt":160,"category":161,"categories":162,"featuredImage":23,"bgImage":24,"posterImage":164,"relatedSolution":165},220,"opentelemetry-grafana-tempo-vps","‏Grafana Tempo و‏OpenTelemetry: التتبع الموزع على خادم VPS","انشر مكدس تتبع موزع كامل على خادم VPS الخاص بك باستخدام OpenTelemetry و‏Grafana Tempo، بعيداً عن الارتباط بموردين ومن دون تكاليف APM.","2026-08-04T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":20},[163],{"id":16,"name":17,"slug":18,"color":19,"icon":20},"\u002Fblog\u002Fcovers\u002Fopentelemetry-grafana-tempo-vps-poster.svg",{"categorySlug":27,"appSlug":28},{"id":167,"slug":168,"title":169,"excerpt":170,"readTime":11,"views":12,"isPinned":13,"publishedAt":171,"category":172,"categories":173,"featuredImage":23,"bgImage":24,"posterImage":175,"relatedSolution":23},228,"durcissement-serveur-linux-initial","تصليب الخادم ‎Linux‎ الأولي","أنشئ مستخدم ‎sudo‎، وكوّن ‎SSH‎ بالمفاتيح، وفعّل ‎UFW‎ و‎fail2ban‎ على ‎Ubuntu 22.04‎ أو ‎Debian 12‎ في أقل من ساعة.","2026-08-06T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":20},[174],{"id":16,"name":17,"slug":18,"color":19,"icon":20},"\u002Fblog\u002Fcovers\u002Fdurcissement-serveur-linux-initial-poster.svg",1786366654013]