خيارات Swarm ووجهات السجلات

كل إعدادات Docker Swarm التي يمكن أن يملكها التطبيق إلى جانب حجمه وأمره، وأيها يحتاج عنقودك الخاص، وكيف ترسل السجلات إلى Loki أو Elastic أو Graylog أو Splunk.

لحجم التطبيق ونسخه وبيئته وأمره وفحص سلامته وطرحه لوحاتها الخاصة. أما خيارات Swarm فهي كل ما يستطيع Docker Swarm ضبطه أيضًا على الخدمة. الخيار المتروك فارغًا يحتفظ بقيمة Docker الافتراضية، ومسحه يعيد تلك القيمة في النشر التالي.

اضبطها في لوحة التحكم (صفحة التطبيق، خيارات Swarm)، أو بالأمر isogrid apps options <app>، أو في ملف stack حيث تُقرأ مفاتيح compose المعتادة.

ما يمكنك ضبطه

المجال الخيارات مفاتيح compose
التوزيع توزيع النسخ حسب تسمية عقدة، أقصى عدد من النسخ لكل جهاز، وحدات المعالجة المحجوزة لكل نسخة deploy.placement.preferences وmax_replicas_per_node وdeploy.resources.reservations.cpus
الحاوي دليل العمل، اسم المضيف، إشارة الإيقاف، عملية init، نظام ملفات للقراءة فقط، TTY، حدود ulimit، حد العمليات، مجموعات إضافية، صلاحيات مُزالة working_dir وhostname وstop_signal وinit وread_only وtty وulimits وgroup_add وcap_drop
الملفات ملفات إعداد تُصنع من نص (Swarm configs) configs مع content: مكتوب مباشرة
الشبكة أسطر /etc/hosts إضافية، خوادم DNS ونطاقات البحث وخياراته، عنوان لكل نسخة (dnsrr) extra_hosts وdns وdns_search وdns_opt وdeploy.endpoint_mode
السجلات وجهة المخرجات logging.driver وlogging.options

الملفات للإعدادات غير السرية. أما الأسرار فمكانها الخزنة، وتصل إلى الحاوي كملفات أو متغيرات.

الخيارات التي تحتاج عنقودك الخاص

بعض الخيارات تصل إلى الجهاز نفسه، فلا تعمل إلا على عنقود هو ملكك: عنقود خاص ممنوح لمؤسستك وحدها، أو عنقود يديره وكيل Nomad الخاص بك. في المنطقة المشتركة تُرفض، وتوضح لوحة التحكم ذلك.

  • الصلاحيات المضافة (cap_add) وإعدادات النواة (sysctls)
  • درجة OOM (oom_score_adj)
  • شبكة الجهاز (network_mode: host): يغادر التطبيق حينها شبكته الخاصة
  • أدلة الجهاز (bind mounts)
  • المنافذ المنشورة على الأجهزة (ports مع mode: host أو mode: ingress)
  • موارد العقدة مثل وحدات GPU (generic_resources)
  • نسخة على كل جهاز (deploy.mode: global). الانتقال إلى هذا الوضع أو منه يعيد إنشاء الخدمة مع انقطاع قصير، ولا يمكن تغيير عدد نسخ مثل هذا التطبيق يدويًا ولا تلقائيًا.
  • رفع أي حد غير nofile، أو جعله بلا حد

على عنقود يديره وكيل Nomad، تحتاج الخيارات التي تمنح صلاحيات الجذر على الجهاز (الصلاحيات، sysctls، درجة OOM، شبكة الجهاز، bind mounts) إلى موافقة الوكيل أيضًا: اضبط ISOGRID_NOMAD_ALLOW_PRIVILEGED=true على الوكيل. من دونها يرفضها الوكيل مهما طلبت ISOGrid.

أين تذهب السجلات

افتراضيًا تبقى المخرجات على الجهاز، حيث تقرؤها لوحة التحكم والبحث في السجلات. ويمكنك إرسالها إلى مكان آخر:

  • مشغّلات Docker نفسها: syslog وgelf (Graylog وLogstash) وfluentd وsplunk، وعلى عنقودك الخاص فقط awslogs وgcplogs وjournald، التي تستخدم هوية الجهاز أو سجله.
  • إضافات السجلات: Grafana Loki وElastic. تُثبَّت الإضافة أولًا على كل جهاز في المنطقة: isogrid regions log-plugins <region> --install loki، أو بالزر في لوحة خيارات Swarm. تعمل الإضافة بصلاحيات الجذر على كل جهاز، لذا تثبّتها على عنقود هو ملكك؛ وفي المنطقة المشتركة يقرر مشغّلو ISOGrid.
isogrid apps options shop --log-driver loki \
  --log-secret-opt loki-url=https://USER:TOKEN@logs.example.com/loki/api/v1/push --deploy

تواصل لوحة التحكم عرض المخرجات أيًّا كانت الوجهة: يحتفظ Docker بنسخة محلية بحجم سجلاتك المحفوظة. والوجهة البطيئة أو المتوقفة لا تعطّل التطبيق أبدًا: تُخزَّن المخرجات مؤقتًا (4 ميغابايت) ويُترك ما يتجاوز ذلك.

الرمز أو كلمة المرور في خيار سجل مكانهما الخيارات السرية: يُحفظان في مخزن الأسرار ولا يُعرضان مرة أخرى. وعلى عنقود يديره وكيل Nomad الخاص بك، اكتب القيمة بصيغة {{secret:<reference>}} بدلًا من ذلك، لتبقى في Vault الخاص بك.

في المنطقة المشتركة يجب أن تكون الوجهة عنوانًا عامًا: فالجهاز يرسل السجلات بنفسه، ولا يُسمح له بالوصول إلى شبكات خاصة نيابة عنك.

البحث في سجلات JSON

عندما يكتب تطبيقك أسطر JSON، يقرؤها البحث كحقول. المستوى هو مستوى أداة التسجيل نفسها (level وseverity وأرقام pino)، والرسالة هي msg، وتُصفّى الحقول بـ @:

الاستعلام ما يطابقه
@status>=500 مقارنة رقم (> و>= و< و<=)
@http.method:GET مساواة دون مراعاة حالة الأحرف؛ الحقول المتداخلة بالنقاط
@user.id:* وجود الحقل
@path:/api/* يبدأ بـ
@msg~timeout يحتوي على
-@env:dev ليس ذلك

وتُجمع كما من قبل مع الكلمات والعبارات وlevel: وreplica:.