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