کنترل و مدیریت فایلهای Log در سیستمعاملهای مبتنیبر لینوکس بهعهدهی Rsyslog Server است که بهشکل پیشفرض روی بیشتر نسخههای توزیعشدهی لینوکس نصب است. این فایلها در مسیر var/log/ ذخیره میشوند و نقش اساسی در تجزیه و تحلیل و خطایابی مشکلات سیستم و سرویسهای در حال اجرا روی آن دارند.
در این راهنما، به شیوهی پیکربندی این سرویس روی سیستمعامل Debian میپردازیم.
سرویس Rsyslog
چون Rsyslog میتواند نقش کلاینتی و هم سروری داشته باشد، قادر است تا پیامهای Log را بهوسیلهی TCP/UDP ارسال یا از دستگاههای دیگر موجود در شبکه همانند سرورها، روترها، سوییچها یا هر دستگاه تولیدکنندهی Log دریافت کند.
Rsyslog اگر در نقش سرور پیکربندی شود، به پورت پیشفرض 514 TCP/UDP گوش میدهد و پیامهای Log ارسالی بهوسیلهی سایر دستگاهها روی ساختار را جمعآوری میکند. در حالتیکه Rsyslog بهعنوان Client پیکربندی شود، پیامهای Log را به Rsyslog سروری روی ساختار بهوسیلهی TCP/UDP و روی پورت 514 ارسال میکند.
فیلترهای Rsyslog در یکی از سه دستهی زیر قرار میگیرند:
- فیلترهای Priority
- فیلترهای Property-based
- فیلترهای Expression-based
Priority filterها مشخصکنندهی فرآیندهای داخلی لینوکس تولیدکنندهی Log هستند:
- auth/authpriv: پیامهای تولید شده بهوسیلهی فرآیند احراز هویت
- cron: پیامهای مرتبط با وظایف corn
- Daemon: پیامهای مرتبط با سرویسهای در حال اجرای سیستم
- Kernel: پیامهای مرتبط با کرنل لینوکس
- Mail: پیامهای مرتبط با ایمیل سرور
- Syslog: پیامهای مرتبط با syslog
- Lpr: پیامهای مرتبط با پرینتر یا print server
- local0 – local7: پیامهای سفارشی تحت کنترل مدیریت سیستم
به سطوح مختلف فیلترهای Priority یک عدد و یک کلمهی کلیدی اختصاص پیدا میکند که عبارتاند از:
- emerg, panic (Level 0): چنین لاگی نشاندهندهی آن است که سیستم بهشکل کامل از کار افتاده و امکان استفاده ندارد.
- alert (Level 1): به معنای آن است که بلافصله باید اقدامی انجام شود.
- err (Level 3): بیانگر وضعیت بحرانی است.
- warn (Level 4): بیانگر هشدار است.
- notice (Level 5): بیانگر آن است که وضعیت نرمال است اما نیاز به بررسیهای بیشتری است.
- info (Level 6): صرفن اطلاعی از یک رویداد است.
- debug (Level 7): پیامهای دیباگ
نصب Rsyslog
همانطور که در ابتدای این متن گفته شد، این سرویس بهشکل پیشفرض روی سیستمعاملهای جدید مبتنیبر لینوکس نصب است اما اگر نصب نبود، میتوانید با استفاده از دستور زیر آن را نصب کنید:
sudo apt-get install rsyslog
با کمک دستور زیر میتوان از نصب و فعال بودن این سرویس مطمین شد:
systemctl status rsyslog.service
برای پیکربندی Rsyslog در نقش سرور نیاز به تغییر تنظیمات فایل /etc/rsyslog.conf. است. برای دسترسی به این فایل از دستور زیر استفاده کنید:
sudo vi /etc/rsyslog.conf
در مرحلهی بعد، با فشردن حرف I روی صفحه کلید، به حالت ویرایش رفته و علامت # را از قبل نوشتههای زیر عبارات provides TCP syslog reception و provides UDP syslog reception، حذف کنید تا از حالت Comment خارج شوند:
شما میتوانید بهکمک دستور زیر و افزودن آن پس از عبارت input(type=”imtcp” port=”514”)، محدودیت دسترسی برای یک زیرشبکه، IP یا دامنه خاص مشخص کنید (بهجای x.x.x.x باید IP موردنظر خود را وارد کنید).
AllowedSender TCP, 127.0.0.1, x.x.x.x/24, *.yourdomain.com
ایجاد Template
Template شیوهی ذخیرهسازی Logها را برای Rsyslog مشخص میکند. دستورات تعریف Template را پس از دستور بالا وارد کنید.
template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?Incoming-logs & ~
با ارایهی Rsyslog Serverهای نسخهی 7 به بعد میتوان Templateها را به قالب زیر تعریف کرد:
template(name="MyTemplate" type="string" string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log" )
همچنین این قالب را میتوان بهشکل زیر نیز به کار برد:
template(name="MyTemplate" type="list") { constant(value="/var/log/") property(name="fromhost-ip") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") }
با افزودن دستور بالا به فایل تنظیمات Rsyslog، پیامهای Log در مسیر /var/log و به فرم مشخص شده در دستور ثبت میشوند. در دستور بالا افزونبر متغیرهای گفته شده، میتوان موارد زیر را نیز به کار برد:
%syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$year%, %$month%, %$day%
برای ثبت تغییرات انجام شده در فایل تنظیمات Rsyslog نیاز است تا این سرویس Restart شود. برای انجام این عمل از دستورات زیر استفاده کنید:
sudo service rsyslog restartsudo systemctl restart rsyslog
نهایتن برای بررسی اینکه آیا Rsyslog به دو پورت TCP و UDP بهدرستی گوش میدهد از دستور زیر استفاده کنید:
sudo netstat -taupn | grep rsyslog