آپاچی؛ شب ۴۶: مانیتورینگ خصوصی، خطا و چرخش لاگ
فهرست نوشته
پاسخ 200 لحظهای برای بهرهبرداری کافی نیست. امشب ظرفیت، خطاهای backend، تاریخ گواهی و رشد لاگ را به چند شاهد قابل پیگیری تبدیل میکنیم.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: سایت www، ماژول status فقط در صورت نیاز، access log شب نهم. مسیر status عمومی یا از طریق proxy منتشر نمیشود.
وضعیت فقط از همتای محلی#
در Debian sudo a2enmod status و در RHEL خروجی -M را بررسی کن. در میزبان www:
<Location /server-status>
SetHandler server-status
Require expr "%{CONN_REMOTE_ADDR} == '127.0.0.1' || %{CONN_REMOTE_ADDR} == '::1'"
</Location>
این شرط به همتای واقعی اتصال نگاه میکند، حتی اگر remoteip آدرس اعلامشدهٔ کلاینت را تغییر داده باشد. ExtendedStatus On اطلاعات بیشتر میدهد و باید اثر و دادهٔ قابل مشاهدهاش ارزیابی شود.
روی وبسرور با CA محلی و resolve به loopback:
curl --cacert ~/apache-lab/pki/ca.crt \
--resolve www.example.test:443:127.0.0.1 \
'https://www.example.test/server-status?auto'
باید اطلاعات وضعیت بگیری؛ همان درخواست از .20 باید رد شود. BusyWorkers و IdleWorkers، شمارندههای اتصال و نرخ خطا را با workload تفسیر کن؛ کم بودن کارگر idle بهتنهایی تشخیص قطعی کمبود ظرفیت نیست.
شاخصهای عملی#
زمان %D در access log، نسبت پاسخ 5xx، صف FPM، مصرف حافظه، فضای دیسک و روزهای تا انقضای گواهی را ثبت کن. endpoint سلامت برنامه باید موارد لازم مانند اتصال دیتابیس را با هزینهٔ محدود بررسی کند. لاگ شامل token، cookie یا Authorization نشود.
sudo logrotate -d /etc/logrotate.d/apache2
df -h
sudo journalctl -u "$APACHE_SERVICE" -n 50 --no-pager
در RHEL فایل logrotate معمولاً /etc/logrotate.d/httpd است؛ مسیر بسته را بررسی کن. -d حالت تشخیص بدون چرخاندن واقعی است. چون لاگهای دوره زیر مسیر معمول همان توزیعاند، الگوی package را بررسی کن تا نامهای تازه هم پوشش داده شوند؛ اگر پوشش ندارند، stanza مناسب با reopen سرویس بساز.
تمرین و بازگشت: backend را کوتاه متوقف کن و از افزایش 5xx تا هشدار مانیتورینگ شواهد را دنبال کن. status را در صورت بینیازی حذف و ماژول را غیرفعال کن؛ debug log دائمی جای مانیتورینگ هدفمند نیست.
منبع: mod_status ، متغیرهای عبارت Apache ، logrotate .