| LOG_DB_DAEMON(8) | User Contributed Perl Documentation | LOG_DB_DAEMON(8) |
نام (NAME)
log_db_daemon - دیمن ثبت گزارش در پایگاهداده برای Squid
نسخه 0.5.
خلاصه دستور (SYNOPSIS)
log_db_daemon DSN [گزینهها]
توضیحات (DESCRIPTION)
این برنامه مدخلهای access.log مربوط به Squid را در یک پایگاهداده مینویسد. در حال حاضر تنها قالب لاگ بومی squid پشتیبانی میشود.
این اسکریپت در محیطهای زیر توسعه یافته و آزمایش شده است:
گزینهها (OPTIONS)
- DSN
- شناسه منبع
داده (DSN)
پایگاهداده
که به صورت
یک مسیر
کدگذاری
شده است.
این مقدار
به عنوان
مسیر فایل
access_log ارسال
میشود.
پیکربندی نمونه:
access_log daemon:/host/database/table/username/password squid
برای تعیین نکردن یک پارامتر، از دو اسلش متوالی استفاده کنید:
access_log daemon://database/table/username/password squid
مقدار پیشفرض "DBI:mysql:database=squid"
- --debug
- نوشتن اطلاعات اشکالزدایی در خروجی خطای استاندارد (stderr).
پیکربندی (CONFIGURATION)
پیکربندی Squid (Squid configuration)
دستورالعمل access_log
مسیر فایل گزارش دسترسی (access log) برای ارائه پارامترهای اتصال به پایگاهداده استفاده میشود.
access_log daemon:/mysql_host:port/database/table/username/password squid
پیشوند 'daemon' الزامی است و به Squid اعلام میکند که باید به جای ثبت گزارش معمولی در فایل، از برنامه کمکی logfile_daemon استفاده شود.
آخرین پارامتر به Squid مشخص میکند که هنگام نوشتن خطوط برای دیمن گزارشگیری، از چه قالب لاگی استفاده کند. در حال حاضر قالب squid پشتیبانی میشود.
- mysql_host:port
- میزبانی که سرور mysql روی آن در حال اجراست. در صورت خالی گذاشتن، 'localhost' در نظر گرفته میشود.
- database
- نام پایگاهدادهای که باید به آن متصل شد. در صورت خالی گذاشتن، 'squid_log' در نظر گرفته میشود.
- table
- نام جدول پایگاهداده که خطوط گزارش در آن ذخیره میشوند. در صورت خالی گذاشتن، 'access_log' در نظر گرفته میشود.
- username
- نام کاربری برای اتصال به پایگاهداده. در صورت خالی گذاشتن، 'squid' در نظر گرفته میشود.
- password
- گذرواژه مورد استفاده برای اتصال به پایگاهداده. در صورت خالی بودن، هیچ گذرواژهای استفاده نخواهد شد.
برای باقی گذاشتن تمام فیلدها روی مقادیر پیشفرض آنها، میتوانید از یک اسلش تکی استفاده کنید:
access_log daemon:/ squid
برای مشخص کردن تنها گذرواژه پایگاهداده (که به صورت پیشفرض خالی است)، باید تمام پارامترهای دیگر را با استفاده از رشتههای تهی (null) خالی بگذارید:
access_log daemon://///password squid
دستورالعمل logfile_daemon
این روش کنونی اعلام محل قرارگیری دیمن فایل گزارش به Squid است.
logfile_daemon /path/to/squid/libexec/logfile-daemon_mysql.pl
اسکریپت باید در مکانی که در دستورالعمل مشخص شده است کپی شود.
پیکربندی پایگاهداده (Database configuration)
فرض کنید نام پایگاهداده را 'squid_log' و نام جدول گزارش را 'access_log' بگذاریم. نام کاربری و گذرواژه برای اتصال به پایگاهداده هر دو 'squid' خواهند بود.
پایگاهداده (Database)
ایجاد پایگاهداده:
CREATE DATABASE squid_log;
کاربر (User)
ایجاد کاربر:
GRANT INSERT,SELECT,CREATE ON squid_log.* TO 'squid'@'localhost' IDENTIFIED BY 'squid'; FLUSH PRIVILEGES;
توجه داشته باشید که تنها دسترسیهای CREATE، INSERT و SELECT به کاربر 'squid' اعطا شده است. این کار تضمین میکند که اسکریپت دیمن فایل گزارش نتواند مدخلهای گزارش را تغییر دهد یا اصلاح کند.
جدول (Table)
اگر هنگام شروع دیمن چنین جدولی وجود نداشته باشد، دیمن تلاش خواهد کرد آن را مقداردهی اولیه کند.
جدول ایجادشده باید شبیه به ساختار زیر باشد:
CREATE TABLE access_log ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, time_since_epoch DECIMAL(15,3), time_response INTEGER, ip_client CHAR(15), ip_server CHAR(15), http_status_code VARCHAR(10), http_reply_size INTEGER, http_method VARCHAR(20), http_url TEXT, http_username VARCHAR(20), http_mime_type VARCHAR(50), squid_hier_status VARCHAR(20), squid_request_status VARCHAR(20) );
استخراج دادهها (DATA EXTRACTION)
پرسوجوهای نمونه (Sample queries)
- کلاینتهای دسترسییافته به حافظه موقت (کَش)
-
SELECT DISTINCT ip_client FROM access_log;
- تعداد درخواستها در روز
-
SELECT DATE(FROM_UNIXTIME(time_since_epoch)) AS date_day, COUNT(*) AS num_of_requests FROM access_log GROUP BY 1 ORDER BY 1;
- شمارش وضعیت درخواستها
- برای به دست
آوردن
تعداد خام
هر وضعیت
درخواست:
SELECT squid_request_status, COUNT(*) AS n FROM access_log GROUP BY squid_request_status ORDER BY 2 DESC;
برای محاسبه درصد هر وضعیت درخواست:
SELECT squid_request_status, (COUNT(*)/(SELECT COUNT(*) FROM access_log)*100) AS percentage FROM access_log GROUP BY squid_request_status ORDER BY 2 DESC;
برای تفکیک فقط میان وضعیتهای HIT و MISS:
SELECT 'hits', (SELECT COUNT(*) FROM access_log WHERE squid_request_status LIKE '%HIT%') / (SELECT COUNT(*) FROM access_log)*100 AS percentage UNION SELECT 'misses', (SELECT COUNT(*) FROM access_log WHERE squid_request_status LIKE '%MISS%') / (SELECT COUNT(*) FROM access_log)*100 AS percentage;
- محدودههای زمان پاسخ
-
SELECT '0..500', COUNT(*)/(SELECT COUNT(*) FROM access_log)*100 AS percentage FROM access_log WHERE time_response >= 0 AND time_response < 500 UNION SELECT '500..1000', COUNT(*)/(SELECT COUNT(*) FROM access_log)*100 AS percentage FROM access_log WHERE time_response >= 500 AND time_response < 1000 UNION SELECT '1000..2000', COUNT(*)/(SELECT COUNT(*) FROM access_log)*100 AS percentage FROM access_log WHERE time_response >= 1000 AND time_response < 2000 UNION SELECT '>= 2000', COUNT(*)/(SELECT COUNT(*) FROM access_log)*100 AS percentage FROM access_log WHERE time_response >= 2000;
- ترافیک بر اساس نوع MIME
-
SELECT http_mime_type, SUM(http_reply_size) as total_bytes FROM access_log GROUP BY http_mime_type ORDER BY 2 DESC;
- ترافیک بر اساس کلاینت
-
SELECT ip_client, SUM(http_reply_size) AS total_bytes FROM access_log GROUP BY 1 ORDER BY 2 DESC;
مسائل شناختهشده (KNOWN ISSUES)
مسائل مربوط به سرعت (Speed issues)
موتور ذخیرهسازی MyISAM سریعتر از InnoDB شناخته میشود؛ بنابراین با این که از تراکنشها و یکپارچگی ارجاعی (referential integrity) پشتیبانی نمیکند، ممکن است در این سناریو مناسبتر باشد. شاید بخواهید "ENGINE=MYISAM" را در انتهای کد ایجاد جدول در اسکریپت SQL بالا اضافه کنید.
شاخصها (ایندکسها) باید مطابق با پرسوجوهایی که بیشتر اجرا میشوند ایجاد گردند. اسکریپت DDL تنها یک ایندکس ضمنی برای ستون کلید اصلی ایجاد میکند.
پاکسازی جدول (Table cleanup)
این اسکریپت در حال حاضر تنها دستور "L" (یعنی «افزودن یک خط به گزارش») را پیادهسازی کرده است؛ بنابراین خطوط گزارش هرگز از جدول پاک نمیشوند. این رویکرد مشکل مقیاسپذیری آشکاری دارد.
یک راهحل میتواند پیادهسازی دستوری مانند "rotate log" (چرخش گزارشها) باشد، بهگونهای که مقادیر خلاصهشدهای را محاسبه کرده، در یک «جدول خلاصه» قرار دهد و سپس خطوطی را که برای محاسبه آن مقادیر استفاده شدهاند حذف نماید.
کد پاکسازی مشابهی را میتوان در یک اسکریپت خارجی پیادهسازی کرد و به صورت دورهای و مستقل از دستورات گزارشگیری Squid اجرا نمود.
آزمایش (Testing)
این اسکریپت تنها در سناریوهای کمحجم (یک کلاینت منفرد، کمتر از ۱۰ درخواست در ثانیه) آزمایش شده است. آزمایش در محیطهای پرحجم ممکن است گلوگاههای عملکردی و باگهایی را آشکار سازد.
نویسندگان (AUTHORS)
این برنامه توسط Marcello Romani <marcello.romani@libero.it> و Amos Jeffries <amosjeffries@squid-cache.org> نوشته شده است.
حق نشر (COPYRIGHT)
* Copyright (C) 1996-2026 The Squid Software Foundation and contributors * * Squid software is distributed under GPLv2+ license and includes * contributions from numerous individuals and organizations. * Please see the COPYING and CONTRIBUTORS files for details.
حق نشر (C) 2008 متعلق به Marcello Romani
این کتابخانه نرمافزار آزاد است؛ شما میتوانید آن را تحت همان شرایط خود Perl، یعنی چه Perl نسخه 5.8.8 یا (به انتخاب خودتان) هر نسخه بعدی Perl 5 که در دسترس دارید، بازتوزیع کرده یا تغییر دهید.
پرسشها (QUESTIONS)
پرسشها درباره استفاده از این برنامه را میتوانید به فهرست پستی کاربران Squid <squid-users@lists.squid-cache.org> ارسال کنید.
گزارش باگها (REPORTING BUGS)
گزارشهای باگ باید به زبان انگلیسی ارسال شوند. برای جزئیات مواردی که باید در گزارش باگ خود بگنجانید، نشانی https://wiki.squid-cache.org/SquidFaq/BugReporting را ببینید.
گزارش باگها یا اصلاحیهها با استفاده از نشانی https://bugs.squid-cache.org
گزارش باگهای امنیتی جدی به Squid Bugs <squid-bugs@lists.squid-cache.org>
گزارش ایدهها برای بهبودهای تازه به فهرست پستی توسعهدهندگان Squid <squid-dev@lists.squid-cache.org>
همچنین ببینید (SEE ALSO)
ویکی پرسشهای متداول Squid در نشانی https://wiki.squid-cache.org/SquidFaq
راهنمای پیکربندی Squid در نشانی http://www.squid-cache.org/Doc/config
| 2026-08-25 | perl v5.42.2 |