หลักการทำเครื่อง log server โดยใช้ syslog-ng (new-generation) ที่ใช้ตัวนี้เพราะมีลูกเล่นอะไรเยอะกว่า syslog ธรรมดามาก และมีหลาย app ที่รองรับในการเรียก log ไปดูที่หน้าเว็บ เช่นพวก cacti ไรงี้ครับ ตัวนี้ผมลง base on Freebsd6.2 น่ะครับ
สำหรับถ้าคนไหนทำโดย OS ตัวอื่นก็เอาหลักการไปประยุกต์เอาแล้วกันน่ะครับ หรือใครต้องการแชร์ประสบการณ์ก็ MSN :
golfreeze@packetlove.com ได้ครับ
ก่อนอื่นทำการลงพวก apache + mysql +php ก่อนครับ ก่อนครับ
เสร็จแล้วก็เริ่มลง apache ครับ
ลง apache 2.0.59
#cd /usr/ports/www/apache20
#make install clean
ลง php5
#cd /usr/ports/lang/php5
#make config
Check box เอา Apache + mysql แล้วก็ option อื่นที่ท่านต้องการใช้งาน
#make install clean
ลง php5-extension
#cd /usr/ports/land/php5-extension
#make install clean
Term of Junning optimize and Configuration
1.apache
#vi /usr/local/etc/apache2/httpd.conf
Timeout 30
KeepAlive Off
MaxKeepAliveRequests 1024
<IfModule prefork.c>
ServerLimit 512
StartServers 4
MinSpareServers 20
MaxSpareServers 40
MaxClients 512
MaxRequestsPerChild 0
</IfModule>
ServerAdmin
golfreeze@packetlove.comServerName localhost:80
DocumentRoot "/home/test/public_html" #เปลี่ยน directory root
<Directory /home/test/public_html> # กำหนด สิทธิ์ของ permission
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Directory "/home/test/public_html">
AddDefaultCharset tis-620 #ให้ support ภาษาไทย
AddType application/x-httpd-php .php .php3 #ให้ support file php
AddType application/x-httpd-php-source .phps #ให้ support file php
ลง Mysql-server Client ก็
#cd /usr/ports/databases/myqsl50-server
#make all install clean WITH_CHARSET=tis620 WITH_XCHARSET=all WITH_OPENSSL=yes WITH_NDB=yes
โดยที่
WITH_CHARSET=tis620 เป็นการบอกให้ MySQL เลือก Charset tis620 เป้น Default
WITH_XCHARSET=all บอกให้ mySQL support ทุก charset
WITH_OPENSSL=yes compile mysql ให้ support ssl ด้วย
Tip : ในการ install packet ผ่าน ports ถ้ามันไม่มี check box ให้เลือกให้เราทำการ
#make config ก่อนแล้วจะมี check box ขึ้นมาให้เลือกครับ เมื่อเลือกเสร็จค่อยสั่ง
#make install clean ครับ
ตอน install package ผ่าน port ถ้าต้องการโหลด package จากไทยก็
#make print-closest-mirrors >> /etc/make.conf
หรือเราจะใช้เครื่องอื่นโหลด แล้ว copy มาใส่ server ที่จะลง packalge นั้นโดย copy ไปที่
/usr/ports/distfiles ซึ่งเมื่อเราสั่ง make install มันจะไปเรียก package ในนั้นครับ
ขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขข
เสร้จแล้วมาเพิ่มให้ app เริ่มทำงานตอน boot ในไฟล์ /etc/rc.conf ครับ
#Apache
apache22_enable=”YES”
# MySQL
mysql_enable=”YES”
สั่งให้ mysql ทำงาน
# /usr/local/etc/rc.d/mysql-server.sh start
ทำการลง cacti
fetch
http://golfreeze.packetlove.com/download/Linux_packets/cacti-0.8.7a.tar.gz# จัดการ tar
tar xvf cacti-0.8.7a.tar.gz
# Put Cacti under your public web area document root
mv /usr/src/cacti-0.8.7 /home/test/public_html/cacti
# Create the MySQL database:
/usr/local/bin/mysqladmin --user=root -p create cacti
#อิมพอต database ลง cacti
/usr/local/bin/mysql --user=root -p cacti < /home/test/public_html/cacti/cacti.sql
#สร้าง ฐานข้อมูลของ cacti
/usr/local/bin/mysql --user=root -p mysql
GRANT ALL ON cacti.* TO cactiz@localhost IDENTIFIED BY 'cactipassword';
GRANT ALL ON cacti.* TO cactiz@"%" IDENTIFIED BY 'cactipassword';
flush privileges;
exit
# แก้ไข file config ให้ถูกกับ user + pass
vi /home/test/public_html/cacti/include/config.php
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiz";
$database_password = "cactipassword";
$config['url_path'] = '/cacti/';
# เพิ่ม config ให้กับ cacti บน crontab
#crontab -e
# Cacti
*/5 * * * * root /usr/local/bin/php /home/test/public_html/cacti/poller.php > /dev/null 2>&1
# เปลี่ยนสิทธิ์ ให้กับ cacti
chown -R www:www /home/test/public_html /htdocs/cacti/
ต่อไปทำการลง plugin ของ cacti ครับ
# Syslog
fetch
http://download.cactiusers.org/downloads/haloe.tar.gztar xvf haloe.tar.gz -C /opt/apache/htdocs/cacti/plugins/
# ทำการ config cacti Plug-ins
/usr/local/bin/mysql --user=cactiz -p cacti < /home/test/public_html/cacti/plugins/reports/reports.sql
cactipassword
#สร้าง database ให้เรียบร้อย
/usr/local/bin/mysqladmin --user=root -p create syslog
/usr/local/bin/mysql --user=root -p syslog < /home/test/public_html/cacti/plugins/haloe/syslog.sql
#กำหนดสิทธิ์ให้กับ user
/usr/local/bin/mysql --user=root -p mysql
GRANT ALL ON syslog.* TO cactiz@localhost IDENTIFIED BY 'cactipassword';
GRANT ALL ON syslog.* TO cactiz@"%" IDENTIFIED BY 'cactipassword';
flush privileges;
exit
#แก้ไข config ของ cacti-plugin
vi /home/test/public_html/cacti/plugins/haloe/config.php
$haloedb_username = "cactiz";
$haloedb_password = "cactipassword";
# แก้ไขemail $mail->From = "
golfreeze@packetlove.com"; ตามต้องการ
vi /home/test/public_html/cacti/plugins/haloe/functions.php
# แก้ไขให้ cacti load module เข้าใช้งาน
vi /home/test/public_html/cacti/include/global.php
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiz";
$database_password = "cactipassword";
$database_port = "3306";
$plugins = array();
$plugins[] = 'haloe';
$config['url_path'] = '/cacti/';
๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙๙
ทำการ install syslog-ng
# Install SyslogNG
#cd /usr/ports/sysutils/syslog-ng
#make install clean
# Copy ไฟล์ config ไปตามนี้
cp /usr/local/etc/syslog-ng/syslog-ng.conf.sample /usr/local/etc/syslog-ng/syslog-ng.conf
# แก้ไขให้ syslog-ng ทำงานตอน boot
vi /etc/rc.conf
syslogd_program="/usr/local/sbin/syslog-ng"
syslogd_flags=""
# แก้ไข ค่า config ตามต้องการ
vi /usr/local/etc/syslog-ng/syslog-ng.conf
#
# *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
#
log { source(src); filter(f_notice); filter(f_not_authpriv); destination(messages); };
log { source(src); filter(f_kern); filter(f_debug); destination(messages); };
log { source(src); filter(f_lpr); filter(f_info); destination(messages); };
log { source(src); filter(f_mail); filter(f_crit); destination(messages); };
log { source(src); filter(f_news); filter(f_err); destination(messages); };
# HERE IS THE NEW LINE YOU NEED TO ADD
log { source(src); filter(f_local7); destination(messages); };
# Shut down the standard FreeBSD syslogd
kill `cat /var/run/syslog.pid`
# Start the new syslog-ng:
/usr/local/sbin/syslog-ng
# Edit the Syslog-ng conf
vi /usr/local/etc/syslog-ng/syslog-ng.conf
destination d_mysql {
pipe("/var/log/mysql.pipe"
template("INSERT INTO syslog_incoming (host, date, time, message, priority, facility)
VALUES ( '$HOST', '$YEAR-$MONTH-$DAY', '$HOUR:$MIN:$SEC', '$MSG', '$PRIORITY', '$FACILITY' );\n") template-escape(yes)); };
log { source(src); destination(d_mysql); };
# Create the fifo pipe for syslog-ng to export out logs
mkfifo /var/log/mysql.pipe
# Restart syslog-ng process
killall syslog-ng
/usr/local/sbin/syslog-ng
# This script is used to pipe syslog-ng to mysql
vi /opt/apache/htdocs/cacti/plugins/haloe/syslog-ng-to-mysql.sh
# Make the new script executable
chmod a+x /opt/apache/htdocs/cacti/plugins/haloe/syslog-ng-to-mysql.sh
# Run the script - Syslog messages should now be dumped into the database as they come in
/opt/apache/htdocs/cacti/plugins/haloe/syslog-ng-to-mysql.sh &
# Create a startup script so logging to the database restarts after each reboot
vi /usr/local/etc/rc.d/syslog-ng-fifo-mysql.sh
# Make the new script executable
chmod a+x /usr/local/etc/rc.d/syslog-ng-fifo-mysql.sh
ขั้นตอนสุดท้ายสั่ง syslog-ng restart ด้วยคำสั่ง
# pkill -HUP syslog-ng
ขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขข
ฝั่ง client ที่ต้องการให้ ส่ง log มายังเครื่อง server ก็
ให้เข้าไปแก้ไข ใน
#vi /etc/syslog.conf
ยกตัวอย่างเช่น
ให้ maillog ส่ง log มาที่เครื่อง log server(xxx.yyy.zzz.100) ก็เพียงแค่
# Log all the mail messages in one place.
#mail.* -/var/log/maillog
mail.* @xxx.yyy.zzz.100
แล้วจัดการ save
แล้วสั่งให้ syslog ที่เครื่อง client restart 1 ครั้ง
#ตระกูล RH
/etc/init.d/syslog restart
แค่นั้นแล้วไปรอดูที่ cacti_syslog ครับ
ขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขขข
Lab by
golfreeze@packetlove.comสำหรับเครื่อง RH ส่ง log มายังเครื่อง log server ผ่าน syslog-ng
[root@smtp0 syslog-ng]# more syslog-ng.conf
options {
use_fqdn(no);
sync(0);
};
source s_maillog { unix-stream("/dev/log" max_connections(1000)); pipe("/proc/kmsg"); internal(); };
source s_file { unix-stream("/dev/log"); pipe("/proc/kmsg"); internal(); };
destination d_maillog { file("/var/log/maillog"); };
destination d_backup { tcp("10.20.0.252" port(20245)); };
destination d_tools { tcp("116.68.146.13" port(20245)); };
#destination d_tools_1 { tcp("116.68.146.13" port(21245)); };
log { source(s_maillog); destination(d_backup); };
log { source(s_maillog); destination(d_tools); };
#log { source(s_file); destination(d_tools_1); };
log { source(s_maillog); destination(d_maillog); };
สั่งให้ start ดังนี้
#/usr/local/sbin/syslog-ng
ที่ฝั่ง syslog-ng server
OS Freebsd 6.2
#vi /usr/local/etc/syslog-ng/syslog-ng.conf
source s_maillog_smtp { tcp(ip(116.68.146.13) port(20245)); };
#source s_maillog_file { tcp(ip(116.68.146.13) port(21245)); };
#source s_maillog_pop0 { tcp(ip(116.68.146.13) port(20247)); };
########total#########
destination d_maillog_total { file("/var/log/customer-maillog/maillog-total"); };
#log { source(info_src); destination(d_maillog_total); };
log { source(s_maillog_smtp); destination(d_maillog_total); };
######################
### nttdata.co.th ####
#filter nttdata { match("nttdata.co.th"); };
#destination d_maillog_nttdata { file("/var/log/customer-maillog/maillog-nttdata.co.th"); };
#log { source(s_maillog_smtp); filter(nttdata); destination(d_maillog_nttdata); };
######################
########queue#########
#destination d_maillog_queue { file("/var/log/customer-maillog/maillog-queue"); };
#log { source(s_maillog_file); destination(d_maillog_queue); };
######################
########pop0#########
#destination d_maillog_pop0 { file("/var/log/customer-maillog/maillog-pop0"); };
#log { source(s_maillog_pop0); destination(d_maillog_pop0); };
สั่ง start ดังนี้
#/usr/local/etc/rc.d/syslog-ng restart
install syslog-ng + cacti on Freebsd