جف بزوس برای حل مشکلات وب سرورهایی که در آمازون استفاده میشود، نیازمند این است که بتواند لاگ هر وب سرور را بصورت مرتب بررسی نماید. برای حل این مشکل او میخواهد سیستمی پیاده کند که خروجی لاگ وب سرور مورد نظر او، داخل سیستم Elasticsearch
ذخیره شود که هم به راحتی آنها را بخواند و هم سیستم لاگ عملکرد بهینهای داشته باشد. برای این منظور شما باید پاسخ سوالهای سوال دوم مسابقه و سوال پنجم مسابقه را خود را به این صورت با هم ترکیب کنید که هم api
خود در آن اجرا شود و هم اینکه درخواست ها توسط nginx
به سرور api
پروکسی شود. سپس کانتینر Filebeat
مسئولیت خواندن لاگهای وب سرور مورد نظر (nginx
) را بر عهده داشته باشد و در صورت اضافه شدن هر لاگ جدید آنرا برای کانتینر Elasticsearch
ارسال نماید.
برای دانلود پروژهی اولیه روی این لینک کلیک کنید.
کانتینرهای Elasticsearch
در ابتدای کار، برای پیاده سازی این سیستم، نیاز است که فایل docker-compose.yml
را تکمیل کنید. توجه داشته باشید که شما اجازهی build کردن یک Image جدید خواهید داشت. برای این سوال شما میتوانید از لیست زیر استفاده نمایید:
registry.gitlab.com/qio/standard/elasticsearch:7.16.1
registry.gitlab.com/qio/standard/filebeat:7.16.1
registry.gitlab.com/qio/standard/nginx:1.21-alpine
توجه داشته باشید که باید فایل docker-compose.yml
را به شکلی تکمیل کنید که پس از up
کردن آن، هر ۴ کانتینر (Elasticsearc, Filebeat , Nginx, Api) به درستی اجرا شوند. سپس با توجه به درخواستهایی که از سمت سیستم داوری برای وب سرور nginx
ارسال میشود، تعدادی لاگ در فایل مربوطه ذخیره میشود که در نهایت انتظار میرود با تنظیماتی که شما انجام دادهاید، این لاگهای جدید، به سیستم Elasticsearch منتقل شود.
شرایط containerها
۱. نام containerها باید حتماً به شکل زیر باشد:
elasticsearch
filebeat
nginx
api
۲. هریک از این containerها باید روی پورت مشخصی که مربوط به آنها میباشد قرار گیرند. دقیقاً به شکل زیر:
port of elasticsearch = 9200
port of nginx = 80
دقت کنید که تنظیمات پورتها به گونهای انجام شود که وقتی سیستم داوری دستور docker-compose up
را اجرا کرد، بتواند به هر دو پورت ۹۲۰۰ و ۸۰ دسترسی داشته باشد.
۳. نام ایندکس (index
) که لاگها باید در آن ذخیره شود log-index
میباشد.
۴. آدرسی که لاگهای nginx
باید در آن ذخیره شود، آدرس /var/log/nginx/access.log
میباشد.
۵. توجه کنید تمامی مواردی که برای ratelimit
در سوال ۵ پیاده کرده بودید باید حذف کنید و محدودیتی از بابت ارسال درخواست به سیستم وجود نداشته باشد.
۶. محتویات فایل docker-compose.yml
شما باید به گونهای باشد که در کمترین زمان ممکن کانتینرها آماده باشند و کار خود را انجام بدهند. برای این منظور حداکثر ۹۰ ثانیه در نظر گرفته شده است و در صورتی که زمان بیشتری طول بکشد، نمره کامل را نخواهید گرفت.
ایجاد Volume
در صورتیکه نیاز دارید فایل یا مسیری را به درون هریک از containerها Volume کنید، میتوانید از پوشههای api
و data
استفاده کنید.
services:
sample_container:
image: "registry.gitlab.com/qio/standard/filebeat:7.16.1"
volumes:
- ./api/somefile:/somefile
- ./data/somefile2:/somefile2
فراموش نکنید که فایل somefile
را درون پوشهی api
و فایل somefile2
را درون پوشهی data
قرارداده و آن را برای داوری ارسال نمایید. برای مثال، پوشهی ارسالی شما برای داوری کوئرا به شکل زیر میتواند باشد:
.
├── api
│ └── somefile
├── data
│ └── somefile2
├── docker-compose.yml
└── requirements.txt
**توجه:** سیستم داوری کوئرا بهصورت خودکار فایل docker-compose.yml
را با کامند up
اجرا میکند. شما نیازی به کد یا اسکریپتی برای اجرای این کار ندارید.
شرایط نمرهدهی
نمرهای که شما دریافت میکنید، مربوط به اجرای درست و دقیق کلاستر خواهد بود. به این صورت که هر ۴ کانتینر مورد نظر باید با نامی که در بالا توضیح داده شده باید بدون مشکل اجرا شوند و همچنین لاگی که توسط وب سرور nginx
ایجاد میشود، باید در ایندکس log-index
کانتینر Elasticsearch
ثبت شده باشد.
نحوه ارسال پاسخ
شما فقط میتوانید مسیرهای هایلایت شده را تغییر دهید:
.
├── data
│ └── ...
├── api
│ └── ...
├── docker-compose.yml
└── requirements.txt
در نهایت این پوشه را zip کرده و ارسال کنید. توجه کنید که پس از extract کردن فایل zip شما، باید فایل docker-compose.yml
را ببینیم.
ارسال پاسخ برای این سؤال