Golfreeze.packetlove.com: Life style of Golfreeze Canon400D Family kammtan.com Jazz Freebsd Unix Linux System Admin guitar Music
All about unix linux freebsd and FAQ for Packetlove.com Web hosting , Mail hosting , VoIP + IP PBX server => all application on unix knowledges by golfreeze => Topic started by: golfreeze on มกราคม 24, 2011, 01:33:13 pm
-
หลักการทำเครื่อง 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.com
ServerName 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.gz
tar 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
-
ในกรณี ของ syslog-ng ทำงานกับ mailgraph นะครับผม
ถ้า mailgraph มีปัญหาให้
#ps auxw | grep mailgraph
แล้ว kill process ทั้งสามไปก่อนจากนั้น
สั่ง รัน mailgraph ใหม่โดย
วิธีรันให้สร้างเป็น bg process แบบนี้
/usr/bin/perl /usr/local/sbin/mailgraph.pl --logfile /var/log/customer-maillog/maillog-total --daemon-rrd=/var/log/ --ignore-localhost --daemon-pid=/var/log/mailgraph.pid &
/usr/bin/perl /usr/local/sbin/mailgraph.pl --logfile /var/log/customer-maillog/maillog-smtp0 --daemon-rrd=/var/db/mailgraph/ --daemon-pid=/var/db/mailgraph/mailgraph8.pid &
/usr/bin/perl /usr/local/sbin/mailgraph.pl --logfile /var/log/customer-maillog/maillog-smtp1 --daemon-rrd=/var/db/mailgraph/ --daemon-pid=/var/db/mailgraph/mailgraph9.pid &
แค่นี้ แล้วก็ลองเช๊คที่
http://tools1.ntt.co.th/cgi-bin/mailgraph.cgi
-
ปัญหาต่อมาที่ เคยเจอกับการใช้งาน Cacti + syslog ครับ
เนื่องจาก ในส่วนของ network ต้องส่ง log ที่จำเป็นเข้ามาเก็บไว้ใน cacti แล้วทำการ generate ข้อมูลแสดงผ่าน หน้าเว็บ cacti
ปริมาณข้อมูลซึ่งมีมากๆ ต่อวัน ประมาณ 300-4xx MB สำหรับ database syslog ใน table = syslog_incoming
การแก้ไขปัญหาเบื้องต้นของผม ก็เลยทำเป็น shell script ที่ทำการ dump database = syslog นี่มาเก็บไว้
ทุกวันแล้วทำการ drop table & create table = syslog_incoming ใหม่ทุกวัน ครับ
แล้วก็สร้างให้ทำงาน บน crontab ครับ ซึ่งมีรายละเอียดประมาณนี้
// Begin PHP script drop_create_db.php //
<?php
$con = mysql_connect("localhost","config","config");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Create database
if (mysql_query("CREATE DATABASE syslog",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
//
// Create table
mysql_select_db("syslog", $con);
$sql_del = "DROP TABLE syslog_incoming";
$sql = "CREATE TABLE syslog_incoming
(
facility varchar(10) default NULL,
priority varchar(10) default NULL,
date date default NULL,
time time default NULL,
host varchar(128) default NULL,
message text,
seq int(10) unsigned NOT NULL auto_increment,
status tinyint(4) NOT NULL default '0',
PRIMARY KEY (`seq`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=tis620 AUTO_INCREMENT=1 ";
$sql_flush = "flush privileges";
// Execute query
mysql_query($sql_del,$con);
mysql_query($sql,$con);
mysql_query($sql_flush,$con);
mysql_close($con);
?>
// End PHP script drop_create_db.php //
-
#!/bin/sh
######################################
# Backup_script By golfreeze V0.8 ############
# Backup all database by "tar" and "dump" ##############
# Then FTP to "log" server and keep in local disk for 2 date #
###############################################################
export PATH=/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin
###Folder Link
DATE=`date "+%Y%m%d"`
DATE_2=`date "-v-2d" "+%Y%m%d"`
SRCDIR="/var/db/mysql/syslog"
DESTDIR="/var/backup_db"
HOMEWWW="/var/home/golf/public_html"
###Backup tar style
tar cfz $DESTDIR/backup_mysql_${DATE}.tar.gz $SRCDIR
tar cfz $DESTDIR/backup_homewww_${DATE}.tar.gz $HOMEWWW
###Backup dump style
mysqldump --user xxx --password=123456 syslog > /var/backup_db/backup_database_syslog_${DATE}.sql
mysqldump --user xxx --password=123456 radius > /var/backup_db/backup_database_radius_${DATE}.sql
mysqldump --user xxx --password=123456 cacti > /var/backup_db/backup_database_cacti_${DATE}.sql
mysqldump --user xxx --password=123456 mysql > /var/backup_db/backup_database_mysql_${DATE}.sql
### Clear table "syslog_incoming" in DB=syslog
php /var/home/golf/backup_script/drop_create_db.php
###FTP to Bu-mbox
USERd=config
PASSd=config
HOME_WWW="/var/backup_db/backup_homewww_${DATE}.tar.gz"
HOME_FILE="/var/backup_db/backup_mysql_${DATE}.tar.gz"
HOME_FILE1="/var/backup_db/backup_database_syslog_${DATE}.sql"
HOME_FILE2="/var/backup_db/backup_database_radius_${DATE}.sql"
HOME_FILE3="/var/backup_db/backup_database_cacti_${DATE}.sql"
HOME_FILE4="/var/backup_db/backup_database_mysql_${DATE}.sql"
hostname="192.168.0.1"
remotenameWWW="/backup_radius_server_db/backup_homewww_${DATE}.tar.gz"
remotename="/backup_radius_server_db/backup_mysql_${DATE}.tar.gz"
remotename1="/backup_radius_server_db/backup_database_syslog_${DATE}.sql"
remotename2="/backup_radius_server_db/backup_database_radius_${DATE}.sql"
remotename3="/backup_radius_server_db/backup_database_cacti_${DATE}.sql"
remotename4="/backup_radius_server_db/backup_database_mysql_${DATE}.sql"
ftp -n $hostname <<EOF
quote USER $USERd
quote PASS $PASSd
binary
put $HOME_WWW $remotenameWWW
put $HOME_FILE $remotename
put $HOME_FILE1 $remotename1
put $HOME_FILE2 $remotename2
put $HOME_FILE3 $remotename3
put $HOME_FILE4 $remotename4
quit
EOF
### Finish FTP
### Delete old backup after 2 date
cd /var/backup_db/
rm backup_homewww_${DATE_2}.tar.gz
rm backup_mysql_${DATE_2}.tar.gz
rm backup_database_syslog_${DATE_2}.sql
rm backup_database_radius_${DATE_2}.sql
rm backup_database_cacti_${DATE_2}.sql
rm backup_database_mysql_${DATE_2}.sql