تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه تنظیم لاگ و rotation در Nginx در سرور مجازی لینوکس


۴ بهمن ۱۴۰۳

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

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

پیش‌نیازها

برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:

با اجرای Nginx روی سرور مجازی تست خود، آماده شروع خواهید بود. در ادامه بخوانید:

درک دستور error_log در Nginx

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

سینتکس دستور error_log

دستور error_log برای مدیریت و ثبت پیام‌های خطای عمومی استفاده می‌شود. اگر با Apache آشنا هستید، این دستور، مشابه دستور ErrorLog در Apache است. ساختار دستور error_log به صورت زیر است:

/etc/nginx/nginx.conf
error_log log_file log_level

در دستور فوق، log_file مشخص می‌کند که لاگ‌ها در کدام فایل نوشته شوند. log_level نیز مشخص می‌کند پایین‌ترین سطح لاگ‌گیری که می‌خواهید ثبت شود، چه باشد.

سطوح لاگ‌گیری (Logging Levels)

دستور error_log را می‌توان به‌گونه‌ای پیکربندی کرد که بسته به نیاز، اطلاعات بیشتر یا کمتری را ثبت کند. سطح لاگ‌گیری می‌تواند یکی از موارد زیر باشد:

  • emerg: موقعیت‌های اضطراری، که سیستم در وضعیت غیرقابل استفاده‌ای قرار دارد.
  • alert: شرایط بحرانی که نیاز به اقدام فوری دارند.
  • crit: مشکلات مهمی که باید برطرف شوند.
  • error: خطایی رخ داده و چیزی موفقیت‌آمیز نبوده است.
  • warn: چیزی غیرعادی رخ داده، اما نگران‌کننده نیست.
  • notice: رویدادی عادی رخ داده است که ارزش ثبت شدن را دارد.
  • info: پیام‌های اطلاعاتی که ممکن است دانستن‌شان مفید باشد.
  • debug: اطلاعات عیب‌یابی که می‌تواند برای شناسایی محل بروز مشکل مفید باشد.

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

در فایل اصلی تنظیمات Nginx، می‌توانید مثالی از دستور error_log را ببینید. با ویرایشگر متن موردنظرتان، فایل پیکربندی زیر را باز کنید. در این مثال از nano استفاده می‌شود:

sudo nano /etc/nginx/nginx.conf

در فایل، به بخش # Logging Settings اسکرول کنید تا دستورات زیر را مشاهده کنید:

. . .
##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
. . .

اگر نمی‌خواهید error_log چیزی را ثبت کند، می‌توانید خروجی آن را به /dev/null تغییر دهید:

. . .
error_log /dev/null crit;
. . .

در ادامه این مقاله، در مورد دستور access_log نیز، بحث خواهد شد.

درک دستورات لاگ‌گیری HttpLogModule در Nginx

در حالی که دستور error_log بخشی از ماژول اصلی است، دستور access_log بخشی از HttpLogModule (ماژول لاگ‌گیری HTTP) است. این ماژول، امکان شخصی‌سازی لاگ‌ها را فراهم می‌کند و شامل چند دستور دیگر برای پیکربندی لاگ‌های سفارشی است.

دستور log_format

دستور log_format برای تعریف فرمت یک فایل لاگ استفاده می‌شود. این دستور از plain text و متغیرها برای توصیف فرمت لاگ، استفاده می‌کند.

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

در ادامه، یک مثال از فرمت combined قرار گرفته است (با فرض اینکه این فرمت از قبل توسط Nginx تعریف نشده و باید با دستور log_format، تعریف شود):

log_format combined '$remote_addr - $remote_user [$time_local]  '
		    '"$request" $status $body_bytes_sent '
		    '"$http_referer" "$http_user_agent"';

تعریف فوق شامل چند خط است و تا زمانی که به نقطه‌ویرگول (;) برسد، ادامه دارد. خطوطی که با علامت دلار ($) شروع می‌شوند نشان‌دهنده متغیرها هستند. کاراکترهایی مانند - و [ و ] به صورت ثابت و بدون تغییر، در لاگ‌ها، نمایش داده می‌شوند.

سینتکس کلی دستور log_format در فایل /etc/nginx/nginx.conf به صورت زیر است:

log_format format_name string_describing_formatting;

شما می‌توانید از متغیرهای پشتیبانی‌شده توسط Core Module برای ایجاد رشته‌های لاگ‌گیری استفاده کنید.

درک دستور access_log در Nginx

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

access_log /path/to/log/location [ format_of_log buffer_size ];

در دستور فوق، /path/to/log/location مسیر فایل لاگ است و لاگ‌ها در آن ذخیره خواهند شد. مقدار format_of_log فرمت لاگ را مشخص می‌کند و می‌تواند یکی از فرمت‌های تعریف‌شده توسط دستور log_format باشد اما به صورت پیش‌فرض، فرمت combined است. مقدار buffer_size حداکثر اندازه داده‌ای است که Nginx قبل از نوشتن، در فایل لاگ نگه می‌دارد.

می‌توانید با اضافه کردن کلمه کلیدی gzip به دستور فوق، فایل لاگ را فشرده کنید:

access_log /path/to/log/location format_of_log gzip;

بر خلاف دستور error_log، اگر نمی‌خواهید لاگ‌گیری انجام شود، می‌توانید access_log را در فایل تنظیمات غیرفعال کنید:

. . .
##
# Logging Settings
##

access_log off;
error_log /var/log/nginx/error.log;

. . .

در این حالت، نیازی به ارسال خروجی به /dev/null نیست.

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

با رشد و حجیم‌تر شدن اندازه فایل‌های لاگ، استفاده از مکانیزم‌های لاگ‌گیری برای جلوگیری از پر شدن فضای دیسک، امری ضروری است. چرخش لاگ (Log Rotation) فرآیندی است که در آن، فایل‌های لاگ جابه‌جا شده و ممکن است فایل‌های قدیمی برای مدت زمان مشخصی، آرشیو شوند.

Nginx ابزار مستقیمی برای مدیریت فایل‌های لاگ ارائه نمی‌دهد، اما شامل مکانیزم‌هایی برای کمک به log rotation است.

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

برای چرخش لاگ‌ها به‌صورت دستی، می‌توانید یک اسکریپت برای این کار بنویسید. به عنوان مثال، فایل لاگ فعلی را به یک فایل جدید منتقل کنید تا آرشیو شود. یک روش رایج این است که جدیدترین فایل را با پسوند .0 نام‌گذاری کرده و فایل‌های قدیمی‌تر را با .1 و … نام‌گذاری کنید:

mv /path/to/access.log /path/to/access.log.0

دستوری که عملیات Log Rotation را اجرا می‌کند، kill -USR1 /var/run/nginx.pid است. این دستور فرآیند Nginx را kill نمی‌کند، بلکه باعث بارگذاری مجدد فایل‌های لاگ می‌شود و درخواست‌های جدید، در فایلی جدید، ثبت می‌شوند:

kill -USR1 `cat /var/run/nginx.pid`

فایل /var/run/nginx.pid شامل PID فرآیند اصلی Nginx است. این فایل، در ابتدای فایل پیکربندی /etc/nginx/nginx.conf قرار گرفته و با دستور pid مشخص شده است:

sudo nano /etc/nginx/nginx.conf

خروجی:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
...

پس از اجرای عملیات Log Rotation، دستور sleep 1 را اجرا کنید تا فرآیند انتقال، کامل شود. سپس، می‌توانید فایل‌های قدیمی را فشرده کرده یا هر عملیات دیگری را روی آن‌ها انجام دهید:

sleep 1
[ post-rotation processing of old log file ]

چرخش لاگ با استفاده از logrotate

ابزار logrotate، یک ابزار برای چرخش خودکار لاگ‌ها است. این برنامه به طور پیش‌فرض روی Ubuntu نصب شده و Nginx در اوبونتو، دارای یک اسکریپت سفارشی logrotate است. برای دسترسی به اسکریپت rotation، از ویرایشگر متن موردنظر خود استفاده کنید. این مثال از nano استفاده می‌کند:

sudo nano /etc/logrotate.d/nginx

اولین خط این فایل مشخص می‌کند که دستورات خطوط بعدی بر روی کدام مسیر اعمال شوند. اگر مکان لاگ‌گیری را در تنظیمات Nginx تغییر دادید، این مورد را در این فایل نیز، به‌روزرسانی کنید. سایر خطوط مشخص می‌کنند که لاگ‌ها روزانه rotate شوند و 52 نسخه قدیمی‌تر نگهداری شود.

در این فایل، بخش postrotate شامل دستوری است که به Nginx می‌گوید پس از تکمیل rotation، فایل‌های لاگ را مجدداً بارگذاری کند:

. . .
postrotate
	[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
. . .

دستور فوق، مشابه مکانیزم عملیات rotation به‌صورت دستی است و تضمین می‌کند که فایل‌های لاگ جدید، به درستی بارگذاری شوند.

نتیجه‌گیری

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

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

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

برای کسانی که نیاز به سرورهایی با هزینه پایین دارند، س سرور مجازی ارزان قیمت لیارا گزینه مناسبی هست. علاوه بر این، قابلیت سرور مجازی ساعتی به شما اجازه می‌دهد که سرور خود را تنها برای زمان نیاز، استفاده کنید. این ویژگی‌ها باعث می‌شود که سرویس‌های ابری لیارا یکی از بهترین گزینه‌ها برای کسب‌وکارهای مختلف باشند.

ســــــــــــــــــــــال‌هاست که هستیم

۶ سال در کنار شما تجربه جمع کردیم. تازه در ابتدای مسیر هستیم، مسیر ساخت آینده.

sixth

جمع‌مـــــــــــان، جمع است

بیش از ۴۰ هزار توسعه‌دهنده و صاحبان کسب و کار در جمع ما هستند. جای شما خالی‌ست...

usersnumberusers

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگانسرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماهارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایتهاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

همراه شما هستیم

در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
تلفن واحد فروش:
۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
call
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)