PHPSYSLOG-NG - آموزش آسان - آموزش phpsyslog-ng

PHP-Syslog-NG آموزش phpsyslog-ng
ز رسانی: Feb 13 2008


Tool
Tutorial
Ergonomy
Forum



جزئیات

phpsyslog-ng چیست؟
نمایی از برنامه
پیش نیازها
آموزش phpsyslog-ng
سرویس گیرنده های Syslog

Farsi/Persian translation by Mohammad Hossein Karvan .




⚠️⚠️⚠️
Please check our page about COVID-19!!
100 Questions and answers about Coronavirus.

⚠️⚠️⚠️
Merci de consulter notre page sur la COVID-19 !!
227 questions et réponses sur le Coronavirus.


به صورت پیش فرض syslog بر روی ماشین های دبیان یا اوبونتو نصب است.
نخستین کاری که ما انجام خواهیم داد نصب syslog-ng به جای syslog است و سپس نصب اسکریپت php-syslog-ng .



۱- نصب SYSLOG-NG

دو مورد از فواید syslog-ng در قیاس با syslog ،امنیت بهینه شده‌ی ابزار و امکان انتخاب منابع برای ثبت وقایع هستند.
بیایید syslog-ng را نصب کنیم ، این کار باعث حذف syslog خواهد شد.

#apt-get install syslog-ng



۲-نصب PHP-SYSLOG-NG

php-syslog-ng را از اینجا پایین گذاری نمایید:

http://code.google.com/p/php-syslog-ng/downloads/list

پرونده‌ی tar.gz را از حالت فشرده خارج نمایید

#tar -xvf phpsyslogng-2.8.tar.gz

پوشه‌ی ایجاد شده را به پوشه ی سرویس دهنده‌ی آپاچی ۲ منتقل کنید ، به عنوان مثال :

#mv /home/po/Desktop/phpsyslogng-2.8 /var/www/



۳-پیکربندی SYSLOG-NG

نخستین کاری که باید انجام شود ساخت پایگاه داده MySQL برنامه‌ی syslog است .

#mysql -u root -p syslog < /var/www/phpsyslogng-2.8/scripts/scripts/dbsetup.sql

در همین زمان ، سه کاربر جدید MySQL خواهیم ساخت:

- syslogadmin، که برای پشتیبان گیری مورد نیاز است.
- sysloguser
- syslogfeeder، که برای ارسال اطلاعات به پایگاه داده مورد نیاز است.

برای syslogadmin و syslogfeeder یک گذرواژه اضافه کنید:

mysql -u root -p
SET PASSWORD FOR syslogfeeder@localhost = PASSWORD ('syslogfeederpassword');
SET PASSWORD FOR syslogadmin@localhost = PASSWORD ('syslogadminpassword');

حالا برای پیکربندی ابزار باید پرونده‌ی تنظیمات /etc/syslog-ng/syslog-ng.conf را وارد کنیم .
خط زیر را از حالت توضیح خارج کنید، این کار برای دریافت پروندهّ‌های ثبت رخداد از میزبان راه دور مورد نیاز است:

udp();

ما نیاز به ارسال پرونده‌ی ثبت رخداد به پایگاه داده‌ی MySql داریم.

خطوط زیر را اضافه کنید تا به syslog-ng بفهمانید که اطلاعات را به کجا ارسال کند:

# pipe messages to /var/log/mysql.pipe to be processed by mysql

destination d_mysql { pipe("/var/log/mysql.pipe" template("INSERT INTO logs
(host, facility, priority, level, tag, datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC',
'$PROGRAM', '$MSG' );\n") template-escape(yes)); };

# Below, all the log sources are forwarded to the MySQL database.

log { source(s_all); destination(d_mysql); };

خطوط تنظیمات بالا را می‌توانید در /phpsyslog-ng_directory/scripts/syslog.conf بیابید.


۴-اسکریپت ها و اعمال CRON ( کارهای زمان بندی شده )

حالا ، باید پرونده‌ی درج موقت MySQL (پرونده‌ی پایپ) را ایجاد کنیم :

#mkfifo /var/log/mysql.pipe

باید اطلاعات ثبت رخداد را با استفاده از یک اسکریپت bash در داخل پایگاه داده وارد کنیم :

پرونده‌ی جدیدی را ایجاد نمایید و خطوط زیر را در آن وارد کنید، دقت کنید که حتما پرونده را با پسوند sh. ذخیره کنید.
در صورتی که مایل به ایجاد این پرونده نیستید ، می‌توانید آن را در پوشه‌ی phpsyslog بیابید، سپس /scripts/syslog2mysql.sh (فراموش نکنید کلمه‌ی عبور و گذرواژه‌ی MySQL را تعویض کنید)

#!/bin/bash

if [ ! -e /var/log/mysql.pipe ]
then
mkfifo /var/log/mysql.pipe
fi
while [ -e /var/log/mysql.pipe ]
do mysql -u syslogfeeder --password=syslogfeederpassword syslog < /var/log/mysql.pipe >/dev/null
done

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

اسکریپت را اجرا کنید. برای ما:

/var/www/phpsyslogng-2.8/scripts/syslog2mysql.sh

اضافه کردن یک خط به crontab کاربر ریشه برای اجرای این اسکریپت به صورت خودکار زمانی‌که سرویس دهنده راه اندازی مجدد می‌شود ، کاری هوشمندانه به نظر می‌رسد.

# crontab -e -u root
@reboot root /var/www/phpsyslogng-2.8/scripts/syslog2mysql.sh >> /var/log/mysql.log 2>&1

فرمان crontab پرونده‌ی /var/spool/cron/crontabs/root را به روز می‌کند.

همانند دیگر برنامه های جمع آوری کننده‌ی ثبت رخداد، سیاستی جهت مدیریت میزان اطلاعات ثبت رخداد باید ایجاد شود.
بدین منظور ،یک اسکریپت بسیار خوب logrotate.php در مسیر پوشه‌ی .../phpsyslogng-2.8/scripts فراهم شده است.

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

پرونده‌ی .../phpsyslogng-2.8/scripts/logrotate.php را باز کنید و خط ۶ را بررسی کنید، که متغیر $APP_ROOT با چیزی که شما دارید مطابقت داشته باشد. در پرونده‌ی پیکربندی ، اینگونه تغییر می‌دهیم:

$APP_ROOT = '/var/www/phpsyslogng-2.8';

در قسمت "MISC FUNCTIONALITY" از پرونده‌، باید گذرواژه‌ی کاربر syslogadmin مربوط به پایگاه داده‌ی MySQL را تنظیم کنیم. این تنظیم را در بالای
این صفحه انجام دادیم. این کاربر MySQL مجوز کافی برای پشتیبان گیری از جداول MySQL را خواهد داشت.

define('DBADMINPW', 'syslogadminpassword');

سپس نیاز داریم تا خط extension=mysql.so را در پرونده‌ی /etc/php5/cli/php.ini فعال نماییم.
به دنبال خط extension=mysql.so بگردید و علامت(;) را از ابتدای آن حذف کنید.

extension=mysql.so

اسکریپت logrotate.php را اجرا نمایید:

#php5 /var/www/phpsyslogng-2.8/scripts/logrotate.php

اگر چیزی شبیه به این داشتید:

Starting logrotate
No DB link


بدین معنی است که خط extension=mysql.so در فایل php.ini هنوز از حالت توضیح خارج نشده است.

اگر همه چیز درست باشد، چیزی شبیه به این را باید ببینید:

Starting logrotate
2006-07-29 22:42:50
Log rotate ended successfully


آخرین کاری که باید انجام شود این است که این اسکریپت را به یک cron ماهیانه اضافه کنید، مثلا:
دقت کنید فقط کاربر ریشه (root) به این پرونده دسترسی دارد:

# chmod 700 /var/www/phpsyslogng-2.8/scripts/logrotate.php
# chown root:root /var/www/phpsyslogng-2.8/scripts/logrotate.php

#crontab -e -u root
00 30 1 * * /var/www/phpsyslogng-2.8/scripts/logrotate.php

اسکریپت در اولین روز هر ماه ، ساعت ۰۰:۳۰ بامداد اجرا خواهد شد.