یک اسکریپت bash بنویسید که یک فایل لاگ وب (مثلاً access.log) را گرفته و یک گزارش خلاصه تولید کند: تعداد درخواست‌ها به‌ازای هر کد وضعیت HTTP و فهرست ۵ آدرس IP پرتکرار همراه با تعداد هر کدام.

15.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 00:19

0.0

با استفاده از ابزارهای خط فرمان مانند awk برای استخراج فیلدهای مورد نظر (معمولاً فیلد وضعیت HTTP و آدرس IP)، سپس استفاده از sort و uniq -c برای شمارش و sort -nr برای مرتب‌سازی می‌توانید این خلاصه را بسازید؛ برای فایل‌های فشرده از gzip -dc یا zcat برای پخش محتوا استفاده کنید. نکات: در فرمت لاگ Apache/Nginx کد وضعیت معمولاً فیلد ۹ است و آدرس IP فیلد ۱؛ خروجی‌ها را با head -n 5 محدود کنید و از پردازش خط به خط برای جلوگیری از بار زیاد حافظه استفاده نمایید.

توسط پژوهشگر در 198 روز قبل ساعت 00:19
دسته بندی ها: Bash Scripting Bash Scripting for beginner
sara در 198 روز قبل ساعت 00:20

توجه کنید که فرمت لاگ‌ها می‌تواند متفاوت باشد (مثلاً combined vs common) و شماره فیلدها در awk ممکن است تغییر کند، پس قبل از اجرا نمونه‌ای از خطوط را بررسی و awk را مطابق آن تنظیم کنید. برای فایل‌های فشرده از gzip -dc یا zcat استفاده کنید و لاگ را خط‌به‌خط با awk پردازش کنید تا از مصرف زیاد حافظه جلوگیری شود و خطوط نامعتبر را با چک ساده‌ای نادیده بگیرید. اگر سرور پشت پراکسی یا CDN است آدرس واقعی کلاینت ممکن است در هدر X-Forwarded-For یا مشابه قرار داشته باشد که باید استخراج شود و همچنین به IPv6 توجه کنید. برای سرعت بالاتر LC_ALL=C را قبل از sort تنظیم کنید و در دیتاست‌های خیلی بزرگ از ابزارهای streaming یا GNU parallel برای تقسیم بار استفاده کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری