خيارات 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:.