رفتن به محتوای اصلی
دیدگاه کلود | ارائه‌کننده سرورهای ابری و اختصاصی
راهنمای پیکربندی لاگ‌ و چرخش لاگ‌ها در Nginx روی سرور مجازی اوبونتو

راهنمای پیکربندی لاگ‌ و چرخش لاگ‌ها در Nginx روی سرور مجازی اوبونتو

برای مدیریت بهتر سرور و عیب‌یابی سریع، Nginx قابلیت لاگ‌گیری از خطاها و درخواست‌ها را دارد. با استفاده از دستورات error_log و access_log می‌توان مسیر، سطح و قالب لاگ‌ها را تنظیم کرد، و با ابزارهایی مانند logrotate فایل‌های لاگ را چرخاند و از پر شدن دیسک جلوگیری نمود. تنظیم اصولی لاگ‌ها به شما امکان می‌دهد مشکلات سرور را سریع‌تر شناسایی و رفع کنید و امنیت و پایداری وب‌سایت را حفظ کنید.

به‌روزرسانی: 
دسته‌بندی: مبانی لینوکس، اوبونتو، بهینه‌سازی سرور، لاگ‌گیری، Nginx


مقدمه

برای اینکه در زمان مدیریت وب‌سرور با دردسر کمتری روبه‌رو شوید، لازم است سیستم لاگ‌گیری را به‌درستی تنظیم کنید. ثبت لاگ‌ها روی سرور به شما این امکان را می‌دهد که در صورت بروز مشکل، اطلاعات کافی برای بررسی، عیب‌یابی و تحلیل وضعیت در اختیار داشته باشید.

در این آموزش از دیدگاه، قابلیت‌های لاگ‌گیری Nginx را بررسی می‌کنیم و یاد می‌گیریم چطور آن‌ها را به شکلی تنظیم کنیم که بیشترین کارایی را برای نیازهای ما داشته باشند. در مثال‌ها از یک سرور مجازی اوبونتو 22.04 استفاده شده است، اما همین مراحل روی اکثر توزیع‌های مدرن لینوکس نیز به شکل مشابه عمل می‌کند.


پیش‌نیازها

برای اجرای این راهنما به موارد زیر نیاز دارید:

  • یک سرور اوبونتو 22.04 با کاربر غیر روت که دسترسی sudo داشته باشد و فایروال روی آن فعال باشد.

  • نصب بودن Nginx روی سرور.

پس از اطمینان از فعال بودن Nginx روی سرور اوبونتو، می‌توانید مراحل را آغاز کنید.


آشنایی با دستور error_log

Nginx برای کنترل لاگ‌های سیستمی از چند دستور مختلف استفاده می‌کند. یکی از مهم‌ترین آن‌ها که در هسته اصلی Nginx قرار دارد، دستور error_log است.

ساختار دستور error_log

این دستور برای ثبت خطاهای عمومی استفاده می‌شود و اگر با وب‌سرور Apache کار کرده باشید، عملکردی مشابه ErrorLog دارد.

error_log log_file log_level;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید
  • log_file مسیر فایل لاگ را مشخص می‌کند.

  • log_level حداقل سطح خطاهایی است که قرار است ثبت شوند.

سطوح لاگ‌گیری

سطوح مختلفی برای ثبت خطا وجود دارد که می‌توان بسته به نیاز از آن‌ها استفاده کرد:

  • emerg: وضعیت بحرانی که سیستم عملاً غیرقابل استفاده است.

  • alert: شرایط بسیار جدی که نیاز به اقدام فوری دارد.

  • crit: خطاهای مهم و حیاتی.

  • error: بروز خطا و عدم موفقیت یک عملیات.

  • warn: اتفاق غیرعادی اما نه نگران‌کننده.

  • notice: رویداد عادی اما قابل توجه.

  • info: پیام‌های اطلاع‌رسانی.

  • debug: اطلاعات جزئی برای عیب‌یابی دقیق.

اگر یک سطح مشخص شود، تمام پیام‌های همان سطح و سطوح بالاتر از آن ثبت خواهند شد. مثلاً اگر سطح error انتخاب شود، پیام‌های error، crit، alert و emerg در لاگ ذخیره می‌شوند.

نمونه‌ای از تنظیمات پیش‌فرض در فایل اصلی Nginx به شکل زیر است:

2 خط
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

در صورتی که بخواهید ثبت خطاها کاملاً غیرفعال شود، می‌توانید خروجی را به /dev/null ارسال کنید:

error_log /dev/null crit;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

بررسی دستورات لاگ‌گیری HttpLogModule

در حالی که error_log بخشی از هسته Nginx است، دستور access_log در ماژول HttpLogModule قرار دارد و امکان شخصی‌سازی بیشتری را فراهم می‌کند.

دستور log_format

دستور log_format قالب نمایش هر رکورد لاگ را با استفاده از متن ساده و متغیرها مشخص می‌کند.

Nginx به‌صورت پیش‌فرض قالبی به نام combined دارد که یکی از رایج‌ترین فرمت‌ها در سرورهاست. اگر بخواهیم این قالب را به‌صورت دستی تعریف کنیم، نمونه آن به شکل زیر خواهد بود:

3 خط
log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

متغیرهایی که با $ شروع می‌شوند، اطلاعات پویا را نمایش می‌دهند و سایر کاراکترها به‌صورت ثابت در لاگ ثبت می‌شوند.

ساختار کلی این دستور به شکل زیر است:

log_format format_name string;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

آشنایی با دستور access_log

دستور access_log از نظر ساختار شبیه error_log است اما انعطاف‌پذیری بیشتری دارد و برای ثبت درخواست‌های ورودی استفاده می‌شود.

access_log /path/to/log/location [format buffer_size];
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

به‌طور پیش‌فرض از قالب combined استفاده می‌شود، اما می‌توان هر قالبی که با log_format تعریف شده را به کار برد.

همچنین امکان فشرده‌سازی لاگ‌ها با gzip وجود دارد:

access_log /path/to/log/location format gzip;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اگر بخواهید لاگ‌گیری درخواست‌ها را غیرفعال کنید، کافی است مقدار آن را off قرار دهید:

access_log off;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

مدیریت چرخش لاگ‌ها (Log Rotation)

با بزرگ شدن فایل‌های لاگ، مدیریت آن‌ها برای جلوگیری از پر شدن فضای دیسک ضروری می‌شود. فرآیند تعویض و آرشیو لاگ‌ها با نام Log Rotation شناخته می‌شود.

Nginx ابزار داخلی برای این کار ندارد، اما از مکانیزم‌هایی پشتیبانی می‌کند که این فرآیند را ساده‌تر می‌سازد.

چرخش دستی لاگ‌ها

در روش دستی، ابتدا فایل لاگ فعلی را تغییر نام می‌دهیم:

mv /path/to/access.log /path/to/access.log.0
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

سپس با ارسال سیگنال USR1 به پردازش اصلی Nginx، به آن اعلام می‌کنیم که فایل لاگ جدید را ایجاد کند:

kill -USR1 `cat /var/run/nginx.pid`
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

پس از آن می‌توان فایل‌های قدیمی را فشرده یا آرشیو کرد.


چرخش لاگ‌ها با logrotate

ابزار logrotate به‌صورت پیش‌فرض روی اوبونتو نصب است و Nginx نیز فایل تنظیمات اختصاصی خود را برای آن دارد.

این فایل معمولاً در مسیر زیر قرار دارد:

/etc/logrotate.d/nginx
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

در این تنظیمات مشخص می‌شود که لاگ‌ها به‌صورت روزانه چرخش پیدا کنند و چند نسخه قدیمی نگه‌داری شود. در بخش postrotate نیز دستوری برای ارسال سیگنال به Nginx قرار دارد تا پس از چرخش، لاگ‌ها دوباره بارگذاری شوند.


جمع‌بندی

تنظیم صحیح و مدیریت اصولی لاگ‌ها می‌تواند در زمان بروز مشکل، از اتلاف وقت و انرژی شما جلوگیری کند. دسترسی به اطلاعات دقیق، تفاوت بین یک رفع مشکل ساده و یک دردسر طولانی‌مدت را رقم می‌زند.

در دیدگاه توصیه می‌کنیم همواره لاگ‌های سرور را بررسی کنید تا هم عملکرد سایت پایدار بماند و هم از افشای اطلاعات حساس جلوگیری شود. این راهنما تنها نقطه شروعی برای آشنایی با لاگ‌گیری در Nginx است و با تجربه بیشتر می‌توانید تنظیمات پیشرفته‌تری را پیاده‌سازی کنید.