برنامه نویسی

راهنمای نظارت و اشکال‌زدایی با Docker Compose Logs

Docker Compose فرآیند ساخت و اجرای برنامه های کاربردی چند کانتینری را ساده می کند. Compose به شما امکان می دهد از یک دستور واحد برای شروع یک پشته از کانتینرهایی که در یک فایل پیکربندی اعلامی تعریف شده اند استفاده کنید. این سریعتر و تکرارپذیرتر از بالا آوردن دستی هر ظرف با استفاده از دستورات Docker مستقل است.

Compose همچنین تجربه گزارش‌های کانتینر Docker را بهبود می‌بخشد. یک دستور اختصاصی (docker compose logs) جریان گزارش یکپارچه را برای همه کانتینرهای پشته شما در یک پنجره ترمینال نمایش می دهد. نظارت منظم گزارش در طول توسعه به شما امکان می دهد خطاها را شناسایی کنید، اصلاحات را آزمایش کنید و در مورد فعالیت در کانتینرهای خود اطلاعات کسب کنید، بنابراین یادگیری گزینه های گزارش Docker Compose یک راه آسان برای بهبود گردش کار شما است.

در این مقاله به بررسی این موضوع می پردازیم docker compose logs دستور داده و نحوه استفاده از ویژگی های اصلی آن را توضیح دهید. سپس با برخی از بهترین روش‌ها که به شما کمک می‌کند از جلسات نظارت بر گزارش خود بیشترین بهره را ببرید، پایان می‌دهیم.

دستور docker compose logs چیست؟

را docker compose logs دستور خروجی گزارش از کانتینرهای پشته های Docker Compose شما را نمایش می دهد. به طور مشابه با Docker CLI کار می کند docker logs فرمان اما به شما امکان می دهد خروجی ترکیبی پشته را در یک پنجره ترمینال مشاهده کنید.

docker compose logs چندین مزیت را برای توسعه دهندگان و اپراتورهای کانتینر ارائه می دهد:

  • به راحتی خروجی ورود به سیستم را از چندین کانتینر در حال اجرا مرتبط کنید، و بررسی دقیق مسائلی را که باعث ایجاد اثرات ضربه ای در چندین سرویس می شوند، تسهیل می کند.
  • هنگام عیب‌یابی مشکلات کانتینر Docker Compose، گزارش‌ها را مشاهده کنید و هرگونه پیام خطایی را که ممکن است بینشی در مورد پیکربندی‌های نادرست در کانتینرها و دستگاه میزبان ارائه دهد، شناسایی کنید.
  • با ارائه شواهدی مبنی بر عملیات صحیح، از ممیزی انطباق و سایر ابتکارات حاکمیت کانتینر حمایت کنید.
  • با گزارش‌های پخش زنده مستقیماً به ترمینال خود، تجربه توسعه خود را ساده کنید.
  • برای شروع نیازی به نصب ابزار اضافی نیست – گزارش‌ها به‌طور خودکار توسط Docker جمع‌آوری و ذخیره می‌شوند، بنابراین می‌توانید از یک گردش کار مدیریت گزارش واحد در همه میزبان‌ها و برنامه‌های خود استفاده کنید.

در حال دویدن docker compose logs فقط گزارش‌های منتشر شده توسط برنامه‌ها در کانتینرهای شما را نشان می‌دهد – به‌ویژه، خروجی از فرآیند پیش‌زمینه هر ظرف. آن را نمی کند رویدادهای Docker داخلی سطح، مانند موارد ثبت شده برای ایجاد کانتینر، راه اندازی مجدد، و بررسی سلامت. برای بازیابی آن لاگ ها، باید از جداگانه استفاده کنید docker compose events فرمان

فایل‌های گزارش Docker Compose کجا ذخیره می‌شوند؟

Docker به طور پیش‌فرض فایل‌های گزارش کانتینر را در داخل ذخیره می‌کند /var/lib/docker/containers دایرکتوری سیستم هر کانتینر فهرست فرعی خود را دارد که با شناسه کامل کانتینر نامگذاری شده است.

می توانید استفاده کنید docker ps فرمان با --no-trunc برای بازیابی شناسه صحیح یک کانتینر:

$ docker ps -a --no-trunc
CONTAINER ID                                                       IMAGE          COMMAND              CREATED         STATUS                     PORTS     NAMES
0047e0d8e4500efe8394f03981ee0e8338149fe86f2ae8a66a6ffc828c732528   httpd:alpine   "httpd-foreground"   9 minutes ago   Exited (0) 9 minutes ago             agitated_boyd
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای مثال بالا، لاگ های کانتینر در دایرکتوری قرار می گیرند /var/lib/docker/containers/0047e0d.... در این دایرکتوری، یک فایل JSON به نام شناسه کانتینر ضمیمه شده پیدا خواهید کرد -json.log. این فایل شامل تمام ورودی‌های گزارش جمع‌آوری‌شده از ظرف به‌عنوان اشیاء JSON، هر کدام در یک خط جداگانه است.

می توانید ابزار خود را برای مصرف محتوای این فایل بنویسید یا از آن استفاده کنید docker compose logs به راحتی آن را در ترمینال خود بازرسی کنید.

💡 همچنین ممکن است دوست داشته باشید:

چگونه از لاگ های Docker Compose استفاده کنیم؟

مثل بقیه docker compose دستورات، بهتر است اجرا شود logs در دایرکتوری حاوی فایل docker-compose.yml برای پروژه شما. از طرف دیگر، می توانید از CLI استفاده کنید --project-directory پرچم برای ارجاع به فایل ذخیره شده در یک فهرست کاری خاص.

1. یک پروژه آزمایشی را شروع کنید

برای دنبال کردن این آموزش، Docker's را شبیه سازی کنید awesome-compose مخزن نمونه نوشتن پشته ها:

$ git clone https://github.com/docker/awesome-compose.git
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما از پشته nginx-nodejs-redis برای نمایش یک برنامه Node.js استفاده می کنیم که از یک سرویس پروکسی NGINX و یک پایگاه داده Redis استفاده می کند:

$ cd awesome-compose/nginx-nodejs-redis

$ docker compose up -d
[+] Running 5/5
 ✔ Network nginx-nodejs-redis_default    Created                                                                                                                                                                                                                                     0.1s
 ✔ Container nginx-nodejs-redis-web1-1   Started                                                                                                                                                                                                                                     1.1s
 ✔ Container nginx-nodejs-redis-web2-1   Started                                                                                                                                                                                                                                     1.1s
 ✔ Container nginx-nodejs-redis-redis-1  Started                                                                                                                                                                                                                                     1.1s
 ✔ Container nginx-nodejs-redis-nginx-1  Started

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. سیاهههای مربوط به پشته نسخه ی نمایشی را مشاهده کنید

حالا می توانید بدوید docker compose logs برای مشاهده سیاهههای مربوط به کانتینرهای موجود در پشته:

گزارش‌های مربوط به تمام کانتینرهای پشته بر اساس ترتیب زمانی که در آن هر خط ثبت شده است در هم می‌آمیزند. هویت ظرفی که هر خط به آن تعلق دارد در سمت چپ صفحه نمایش داده می‌شود و ظروف مختلف نیز از نظر رنگی از هم متمایز می‌شوند.

3. گزارش های یک سرویس خاص را دریافت کنید

برای دریافت گزارش‌ها از یک سرویس خاص در پشته، نام سرویس را به عنوان اولین آرگومان برای docker compose logs دستور:

docker compose tail logs

در این مثال، فقط خطوط ورود به سیستم از redis خدمات نمایش داده می شود. این تکنیک می‌تواند به شما کمک کند تا مشکلاتی را که در سرویس‌های خاص ذکر شده‌اند به طور کارآمدتر رفع اشکال کنید.

4. گزارش‌های Docker Compose را در زمان واقعی مشاهده کنید (–دنبال کنید)

Compose معمولاً کل محتویات گزارش‌های جمع‌آوری‌شده را قبل از خروج و بازگرداندن شما به ترمینال نشان می‌دهد. اما در طول جلسات طولانی توسعه و اشکال‌زدایی، اغلب ترجیح داده می‌شود که به‌طور مداوم گزارش‌ها را در ترمینال خود پخش و مشاهده کنید، زیرا خطوط جدید ثبت می‌شوند.

را -f یا --follow flag این رفتار را فعال می کند. Compose گزارش‌های موجود را طبق معمول خروجی می‌دهد و سپس به پخش جریانی گزارش‌های جدید در زمان واقعی ادامه می‌دهد، زیرا آنها توسط کانتینرهای پشته شما منتشر می‌شوند.

$ docker compose logs --follow
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Ctrl+C را فشار دهید تا دنبال کردن گزارش ها متوقف شود و به ترمینال خود بازگردید.

5. Docker را فیلتر کنید ثبت گزارش‌ها بر اساس مُهر زمانی (–از زمان و -تا)

اگر می دانید به دنبال رویدادهایی هستید که در یک بازه زمانی خاص رخ داده اند، می توانید از آن استفاده کنید --since و --until پرچم‌ها برای فیلتر کردن خروجی گزارش‌های نگارش docker که نمایش داده می‌شود. هر پرچم یک مهر زمانی دقیق را می پذیرد (مانند 2024-08-01T12:00:00Z) یا یک مرجع نسبی مناسب، مانند 1hبه معنی یک ساعت.

در اینجا چند مثال مفید آورده شده است:

  • دریافت همه گزارش‌های منتشر شده در یک ساعت گذشته
$ docker compose logs --since 1h
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • گزارش هایی را دریافت کنید که بیش از 5 دقیقه پیش منتشر شده اند
$ docker compose logs --until 5m
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • گزارش هایی را دریافت کنید که 1-2 ساعت قبل منتشر شده اند
$ docker compose logs --since 2h --until 1h
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • گزارش های منتشر شده از تاریخ خاصی را دریافت کنید
$ docker compose logs --since 2024-08-01
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • گزارش‌های منتشر شده را قبل از یک مهر زمانی خاص دریافت کنید
$ docker compose logs --until 2024-08-01T12:00:00Z
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

6. تعداد مشخصی از خطوط را از گزارش‌های Docker Compose دریافت کنید (–tail)

Compose یک جایگزین ساده تر برای آن ارائه می دهد --since برای مواردی که فقط می خواهید یک عکس فوری از آخرین گزارش های منتشر شده توسط پشته خود را ببینید. را docker compose logs فرمان با --tail flag به شما امکان می دهد تعداد خطوط نمایش داده شده را از انتهای گزارش کنترل کنید.

# Get the 10 most recent logs
$ docker compose logs --tail 10
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پرچم 0 را به عنوان یک مقدار می پذیرد، به این معنی که هیچ گزارش موجود منتشر نخواهد شد. این زمانی ایده آل است که در ترکیب با آن استفاده شود --follow. نوشتن گزارش‌های جدید را بدون نمایش خروجی نامطلوب قدیمی در ترمینال شما آغاز می‌کند.

7. مُهرهای زمانی را با گزارش‌های Docker Compose اضافه کنید (–مهر زمانی)

به‌طور پیش‌فرض، «نوشتن» مهرهای زمانی را در کنار پیام‌های گزارش نشان نمی‌دهد – فرض بر این است که برنامه‌های حاوی کانتینر شما، مهرهای زمانی را در کنار ورودی‌های گزارشی که به آنها نیاز دارند، می‌نویسند. با این حال، همه برنامه ها این کار را انجام نمی دهند، بنابراین --timestamps flag به شما امکان می‌دهد تا زمان ذخیره‌سازی گزارش را برای شروع هر خط از قبل تنظیم کنید.

docker compose logs stamp

اسکرین شات بالا نشان می دهد که چگونه Compose مهر زمانی دقیق را به هر ورودی گزارش نمایش داده شده اضافه می کند. این در مورد سرویس‌های وب مفید است — که مُهرهای زمانی خود را نمی‌نویسند — اما باعث تکرار در گزارش‌های redis و nginx می‌شود، جایی که مُهرهای زمانی ارائه‌شده توسط برنامه را می‌توان بلافاصله پس از درج پیش‌فرض Compose مشاهده کرد. .

به دنبال محتوای بیشتر درباره Docker Compose هستید؟ راهنمای شروع ما نمونه‌هایی از نحوه استفاده از Compose برای استقرار برنامه‌های خود و پشته‌های انجمن محبوب شما دارد.

همچنین می‌توانید مقایسه Docker Compose و Kubernetes ما را بررسی کنید تا توصیه‌های بیشتری برای عملکرد کانتینرها در تولید دریافت کنید، از جمله اینکه چگونه ترکیب Kubernetes با مدیریت خودکار IaC Spacelift می‌تواند تجربه ساده‌تری را در مقیاس ارائه دهد.

Docker Compose logs و Docker Swarm

Docker Compose به شما امکان می دهد چندین نسخه از کانتینرهای پشته خود را برای بهبود افزونگی اجرا کنید. این معمولاً فقط زمانی استفاده می شود که حالت Swarm توزیع شده Docker فعال باشد.

با استفاده از docker compose logs با یک سرویس تکراری معمولاً خروجی گزارش ترکیبی از همه کپی ها را نمایش می دهد. با این حال، می‌توانید به Compose دستور دهید که فقط گزارش‌های یک ماکت خاص را با تنظیم کردن نشان دهد --index پرچم مقدار داده شده به پرچم باید شاخص عددی ماکت ظرف برای نمایش گزارش‌ها باشد، جایی که 1 اولین نسخه است.

# Get the logs from the third replica of the "web" service
$ docker compose logs web --index 3
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

گزارش‌های Docker Compose: بهترین روش‌ها

بهترین روش‌های زیر به شما کمک می‌کند تا به طور موثر از گزارش‌های Docker Compose برای نظارت بر برنامه‌های کانتینری خود استفاده کنید:

  • گزارش های برنامه خود را ارسال کنید stdout و stderr: داکر فقط می تواند سیاهه هایی را جمع آوری کند که کانتینرها به خروجی استاندارد خود منتشر می کنند (stdout) و خطا (stderr) جریان ها. مطمئن شوید که برنامه شما گزارش‌های خود را در این جریان‌ها می‌نویسد تا در آن نشان داده شوند docker compose logs خروجی فرمان
  • استفاده کنید --since، --until، و --tail برای حذف گزارش‌های بی‌ربط: در حال اجرا docker compose logs در یک پشته شلوغ بزرگ می تواند خروجی بسیار پر سر و صدایی تولید کند. اعمال --since، --until، یا --tail پرچم‌ها به فیلتر کردن پیام‌های نامربوط کمک می‌کنند و تمرکز روی بازه زمانی رویداد مورد نظرتان را آسان‌تر می‌کنند.
  • Pipe به دستورات دیگر برای اعمال فیلترهای پیچیده تر ثبت می شود: Docker Compose هیچ گزینه ای برای فیلتر کردن یا مرتب سازی ارائه نمی دهد. محتوا از لاگ های جمع آوری شده، اما می توانید خروجی گزارش را به دستورات استاندارد یونیکس مانند grep و sort برای دستیابی به این موارد استفاده
  • تنظیم یک درایور گزارش خاص برای نگهداری طولانی‌مدت گزارش متمرکز: Docker Compose به شما امکان می‌دهد تا درایور گزارش Docker را برای استفاده در هر سرویس تنظیم کنید. را logging کلید در شما docker-compose.yaml فایل را می توان برای تعیین یک درایور خاص، از جمله گزینه های ذخیره سازی خارجی استفاده کرد. Docker با درایورهای Logstash، Fluentd، Splunk، AWS CloudWatch و GCP Logging ارسال می‌شود که به شما امکان می‌دهد گزارش‌ها را به صورت متمرکز در پلتفرم ابری انتخابی خود برای نگهداری طولانی‌مدت ذخیره کنید.

این نکات تضمین می کند که می توانید به طور موثر لاگ های Docker خود را در فرآیند DevOps خود مصرف کنید. با این وجود، مهم‌ترین نکته این است که اطمینان حاصل کنید که گزارش‌ها به طور منظم نظارت می‌شوند – در غیر این صورت، اشکالات، خطاها و هشدارهایی که در محیط‌های شما رخ می‌دهند ممکن است بدون توجه باقی بمانند.

نکات کلیدی

ما یک تور از طریق آن گرفته ایم docker compose logs فرمان، مکانیزمی برای مرور خروجی گزارش از پشته های Docker Compose شما. این دستور گزارش‌هایی را که کانتینرها در خود نوشته‌اند نمایش می‌دهد stdout و stderr جریان‌ها، به شما امکان می‌دهد دلایل خطاها را بررسی کنید و فعالیت کانتینر را به طور موثر بررسی کنید.

از آنجایی که Docker Compose به سادگی بر اساس سیستم گزارش دهی Docker ساخته می شود، می توانید از تنظیمات درایور Docker برای پیکربندی نحوه ذخیره و تحویل گزارش ها استفاده کنید. این یک عامل مهم در هنگام استفاده از Docker Compose در تولید است زیرا هدایت گزارش‌ها به یک سرویس خارجی جستجو، پشتیبان‌گیری و اشتراک‌گذاری آن‌ها را با سایر اعضای تیم آسان‌تر می‌کند.

ما شما را تشویق می‌کنیم تا راه‌هایی را که Spacelift انعطاف‌پذیری کامل ارائه می‌دهد، هنگام سفارشی‌سازی گردش کار خود، کشف کنید. می‌توانید تصویر Docker خود را بیاورید و از آن به‌عنوان رانر برای سرعت بخشیدن به استقرارهایی که از ابزارهای شخص ثالث استفاده می‌کنند استفاده کنید. تصویر رسمی دونده اسپیس لیفت را می توانید در اینجا بیابید.

اگر می‌خواهید درباره کارهایی که می‌توانید با Spacelift انجام دهید بیشتر بدانید، این مقاله را بررسی کنید، همین امروز یک حساب کاربری رایگان ایجاد کنید یا با یکی از مهندسان ما یک نسخه نمایشی رزرو کنید.

نوشته جیمز واکر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا