يقوم Docker تلقائيًا بتجميع الإخراج القياسي للحاوية وتدفقات الخطأ ( stdout
/ stderr
) في خلاصات السجل التي يحتفظ بها Docker daemon. يمكنك بسهولة مراقبة السجلات لفهم ما يحدث في حاوياتك.
تحتوي السجلات على المخرجات التي تراها في جهازك الطرفي عند إرفاقها بحاوية في الوضع التفاعلي ( -it
). لن تكون السجلات متاحة إلا إذا كانت العملية الأمامية في الحاوية الخاصة بك تصدر بالفعل بعض المخرجات. يجب عليك التأكد من تسجيل أخطاء الحاويات الخاصة بك stderr
حتى تتمكن أوامر Docker من كشفها.
يمكنك عرض سجلات الحاوية في أي وقت خلال دورة حياة الحاوية. عند تشغيل الحاوية ، يمكنك دفق السجلات في الوقت الفعلي. بالنسبة للحاويات التي تم إيقافها ، يمكنك الوصول إلى جميع السجلات التي تم التقاطها قبل الإنهاء.
عرض سجلات الحاوية
لعرض سجلات الحاوية ، استخدم docker logs
الأمر:
docker logs my-container
استبدل my-container
باسم أو معرف الحاوية التي تريد فحصها. يمكنك استخدامها docker ps -a
للحصول على معرّفات وأسماء حاوياتك.
يقوم logs
الأمر بطباعة إخراج السجل بالكامل للحاوية إلى الجهاز الطرفي. لن يكون الإخراج مستمرًا. إذا كنت ترغب في الاستمرار في تدفق السجلات الجديدة ، فأضف --follow
العلم إلى الأمر. هذا يعادل الاستخدام tail -f
مع ملفات السجل العادية على جهازك.
تخصيص ما يتم عرضه
و docker logs
يدعم قيادة عدة الأعلام التي تمكنك من ضبط انتاجها:
- -timestamps – عرض الطوابع كاملة في بداية كل سطر السجل.
- – حتى و
--since
– تتيح لك هذه العلامات جلب الأسطر التي تم تسجيلها خلال فترة زمنية معينة. إما أن تمرر طابعًا2021-04-30T20:00:00Z
زمنيًا كاملاً ( ) أو وقتًا نسبيًا ودودًا (على سبيل المثال1h
= قبل ساعة واحدة). - –tail – جلب عددًا معينًا من الأسطر من السجل.
--tail 10
سيعرض آخر عشرة أسطر تم تسجيلها بواسطة الحاوية. - –details – هذه علامة خاصة تضيف معلومات إضافية إلى إخراج السجل ، بناءً على الخيارات التي تم تمريرها إلى برنامج تشغيل التسجيل. سننظر في تسجيل السائقين في القسم التالي. القيم النموذجية المعروضة
--details
تتضمن تسميات الحاويات ومتغيرات البيئة.
يمكنك دمج هذه العلامات للحصول على سجلات بالتنسيق الذي تريده. و until
، since
و tail
سوف الأعلام نافذة المفعول إذا كنت تستخدم follow
لبيانات السجل لساحة باستمرار.
برامج تشغيل Docker Logging
يجمع Docker سجلات الحاويات ويخزنها باستخدام أحد برامج تشغيل التسجيل العديدة . يمكنك تعيين برنامج تشغيل التسجيل النشط على أساس كل حاوية. عندما لا يتم تحديد برنامج تشغيل التسجيل ، يستخدم Docker json-file
برنامج التشغيل.
يخزن برنامج التشغيل هذا سجلات الحاوية في ملف JSON. هذا التنسيق مقروء إلى حد ما ويمكن استخدامه بسهولة بواسطة أدوات الجهات الخارجية. إذا كنت لا تريد الوصول إلى ملفات السجل مباشرة ، فإن التبديل إلى local
برنامج التشغيل سيوفر لك بعض مساحة التخزين. يستخدم تنسيق تخزين سجل مخصص.
تتضمن برامج تشغيل السجل المضمنة الأخرى syslog
(الكتابة إلى البرنامج syslog
الخفي الذي يعمل على جهازك) ، journald
(استخدام journald
مثيل قيد التشغيل ) و fluentd
(لاستخدام برنامج fluentd
خفي). تتوفر برامج التشغيل أيضًا لـ Amazon CloudWatch و Google Cloud Platform و Event Tracing for Windows وغيرها من حلول مراقبة السجلات.
يدعم Docker برامج تشغيل تسجيل الطرف الثالث عبر المكونات الإضافية. يمكنك العثور على برامج تشغيل على Docker Hub. لتثبيت برنامج تشغيل البرنامج المساعد ، قم بتشغيل docker plugin install plugin-name
. ستتمكن بعد ذلك من الإشارة إليه على أنه برنامج تشغيل تسجيل باسم plugin-name
.
تحديد برنامج تشغيل التسجيل
يمكنك تحديد برنامج تشغيل التسجيل للحاوية عن طريق تمرير --log-driver
العلم إلى docker run
:
docker run --log-driver systemd my-image:latest
يمكنك تغيير برنامج تشغيل التسجيل الافتراضي بشكل عام عن طريق تحديث تكوين Docker daemon الخاص بك. تحرير (أو إنشاء) /etc/docker/daemon.json
. اضبط log-driver
المفتاح على اسم برنامج تشغيل التسجيل. سيستخدم Docker برنامج التشغيل هذا لجميع الحاويات التي تم إنشاؤها بدون --log-driver
علامة.
{ "log-driver": "systemd" }
تأتي العديد من برامج تشغيل التسجيل مع خيارات التكوين الخاصة بها. يتم تعيين هذه باستخدام --log-opts
علم الحاوية ، أو log-opts
في daemon.json
. فيما يلي مثال متعلق بالمشغل الافتراضي json-file
. يوجه Docker إلى تدوير ملفات السجل بمجرد أن يزيد حجمها عن 8 ميغا بايت. سيتم الاحتفاظ بخمسة ملفات فقط في أي وقت.
docker run
docker run --log-driver json-file --log-opts max-size=8M --log-opts max-file=5
/etc/docker/daemon.json
{ "log-driver": "json-file", "log-opts": { "max-size": "8M", "max-file": 5 } }
أوضاع توصيل السائق
يمكن تسليم السجلات إما في أوضاع الحظر أو عدم الحظر. يتم تعيين Docker افتراضيًا على حظر التسليم. سيتم إرسال السجلات من الحاوية إلى السائق على الفور. هذا يضمن تسليم السجل ولكن يمكن أن يؤثر على الأداء. سينتظر التطبيق حتى اكتمال كتابة السجل. يمكن أن يتسبب هذا في تأخير محسوس إذا كان برنامج تشغيل التسجيل مشغولاً.
عندما يكون Docker في وضع عدم الحظر ، يكتب السجلات في مخزن مؤقت في الذاكرة. لا تحتاج الحاوية إلى الانتظار حتى يكمل برنامج تشغيل التسجيل الكتابة. يمكن أن يؤدي ذلك إلى تحسين الأداء بشكل كبير على الأجهزة النشطة ذات التخزين البطيء.
تتمثل المقايضة مع وضع عدم الحظر في إمكانية فقدان السجلات. يمكن أن يحدث هذا عندما يتم إرسال السجلات بسرعة أكبر مما يمكن للسائق معالجتها. يمكن ملء المخزن المؤقت في الذاكرة ، مما يؤدي إلى مسح السجلات المخزنة مؤقتًا قبل تسليمها إلى السائق.
يمكنك تمكين التسليم بدون حظر عن طريق تعيين mode
خيار التسجيل ، إما باستخدام --log-opts
أو daemon.json
. يمكنك تعيين حجم المخزن المؤقت لسجل الذاكرة الداخلية باستخدام max-buffer-size
الخيار. يؤدي تعيين هذا المستوى المرتفع إلى تقليل مخاطر فقدان السجلات ، بشرط توفر ذاكرة وصول عشوائي كافية.
docker run --log-opt mode=non-blocking --log-opt max-buffer-size=8M my-image:latest
أفضل ممارسات التسجيل
يجب أن تعمل حاوياتك مع نظام تسجيل Docker حيثما أمكن ذلك. ينبعث منها السجلات إلى stdout
و stderr
يسمح عامل الميناء وغيرها من الأدوات تجميعها بطريقة موحدة.
لا يحتاج إخراج السجل إلى تضمين طوابع زمنية. سوف تقوم برامج تشغيل التسجيل في Docker تلقائيًا بتسجيل الوقت الذي وقع فيه الحدث.
في بعض الأحيان قد يكون لديك متطلبات تسجيل معقدة docker logs
لا يمكن أن تلبيها بمفردها. إذا كان الأمر كذلك ، فقد تحتاج إلى تنفيذ حل التسجيل الخاص بك داخل الحاوية الخاصة بك. يمكنك تخزين السجلات مباشرة على نظام الملفات ، باستخدام وحدة تخزين Docker ، أو استدعاء خدمة API خارجية.
تتطلب بعض الحزم وجود حاوية تسجيل مخصصة تقع بجانب حاويات التطبيق الخاصة بك. تقوم حاوية التسجيل ، التي يطلق عليها غالبًا “sidecar” ، بقراءة ملفات السجل المؤقتة التي تنشئها حاويات التطبيق في وحدة تخزين Docker مشتركة. يتعامل الجانب الجانبي مع تجميع هذه السجلات في تنسيق يمكن تحميله إلى خدمة مراقبة السجل.
يمكن أن يكون هذا الأسلوب مفيدًا لعمليات النشر الأكثر تعقيدًا ، على الرغم من صعوبة الإعداد والتوسيع. عادةً ما يتركك بدون الراحة الفورية لأوامر سجل Docker المدمجة.