بهروزرسانی:
دستهبندی: مبانی لینوکس، اوبونتو، بهینهسازی سرور، لاگگیری، 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 به شکل زیر است:
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 دارد که یکی از رایجترین فرمتها در سرورهاست. اگر بخواهیم این قالب را بهصورت دستی تعریف کنیم، نمونه آن به شکل زیر خواهد بود:
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 است و با تجربه بیشتر میتوانید تنظیمات پیشرفتهتری را پیادهسازی کنید.

