لاگ وب‌سرور


جف بزوس برای حل مشکلات و‌ب سرورهایی که در آمازون استفاده می‌شود، نیازمند این است که بتواند لاگ هر وب سرور را بصورت مرتب بررسی نماید. برای حل این مشکل او می‌خواهد سیستمی پیاده کند که خروجی لاگ وب سرور مورد نظر او، داخل سیستم 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
Plain text

توجه داشته باشید که باید فایل docker-compose.yml را به‌ شکلی تکمیل کنید که پس از up کردن آن، هر ۴ کانتینر (Elasticsearc, Filebeat , Nginx, Api) به درستی اجرا شوند. سپس با توجه به درخواست‌هایی که از سمت سیستم داوری برای وب سرور nginx ارسال می‌شود، تعدادی لاگ در فایل مربوطه ذخیره می‌شود که در نهایت انتظار می‌رود با تنظیماتی که شما انجام داده‌اید، این لاگ‌های جدید، به سیستم Elasticsearch منتقل شود.

شرایط containerها🔗

۱. نام containerها باید حتماً به شکل زیر باشد:

elasticsearch
filebeat
nginx
api
Plain text

۲. هریک از این containerها باید روی پورت مشخصی که مربوط به آن‌ها می‌باشد قرار گیرند. دقیقاً به شکل زیر:

port of elasticsearch = 9200
port of nginx = 80
Plain text

دقت کنید که تنظیمات پورت‌ها به گونه‌ای انجام شود که وقتی سیستم داوری دستور 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
Plain text

فراموش نکنید که فایل somefile را درون پوشه‌ی api و فایل somefile2 را درون پوشه‌ی data قرارداده و آن را برای داوری ارسال نمایید. برای مثال، پوشه‌ی ارسالی شما برای داوری کوئرا به شکل زیر می‌تواند باشد:

.
├── api
│   └── somefile
├── data
│   └── somefile2
├── docker-compose.yml
└── requirements.txt
Plain text

*توجه:* سیستم داوری کوئرا به‌صورت خودکار فایل docker-compose.yml را با کامند up اجرا می‌کند. شما نیازی به کد یا اسکریپتی برای اجرای این کار ندارید.

شرایط نمره‌دهی🔗

نمره‌ای که شما دریافت می‌کنید، مربوط به اجرای درست و دقیق کلاستر خواهد بود. به این صورت که هر ۴ کانتینر مورد نظر باید با نامی که در بالا توضیح داده شده باید بدون مشکل اجرا شوند و همچنین لاگی که توسط وب سرور nginx ایجاد می‌شود، باید در ایندکس log-index کانتینر Elasticsearch ثبت شده باشد.

نحوه ارسال پاسخ🔗

شما فقط می‌توانید مسیرهای های‌لایت شده را تغییر دهید:

.
├──  data 
│   └── ...
├──  api 
│   └── ...
├──  docker-compose.yml 
└── requirements.txt
Plain text

در نهایت این پوشه را zip کرده و ارسال کنید. توجه کنید که پس از extract کردن فایل zip شما، باید فایل docker-compose.yml را ببینیم.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.