راهنمای نظارت و اشکالزدایی با 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
دستور:
در این مثال، فقط خطوط ورود به سیستم از 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 به شما امکان میدهد تا زمان ذخیرهسازی گزارش را برای شروع هر خط از قبل تنظیم کنید.
اسکرین شات بالا نشان می دهد که چگونه 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 انجام دهید بیشتر بدانید، این مقاله را بررسی کنید، همین امروز یک حساب کاربری رایگان ایجاد کنید یا با یکی از مهندسان ما یک نسخه نمایشی رزرو کنید.
نوشته جیمز واکر