Author Topic: install syslog-ng + cacti on Freebsd by golfreeze[at]packetlove.com  (Read 11144 times)

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2141
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
install syslog-ng + cacti on Freebsd by golfreeze[at]packetlove.com
« 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

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2141
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
Re: install syslog-ng + cacti on Freebsd by golfreeze[at]packetlove.com
« Reply #1 on: พฤษภาคม 25, 2011, 09:26:56 AM »
ในกรณี ของ 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

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2141
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
Re: install syslog-ng + cacti on Freebsd by golfreeze[at]packetlove.com
« Reply #2 on: มิถุนายน 16, 2011, 05:32:21 PM »
ปัญหาต่อมาที่ เคยเจอกับการใช้งาน 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 //

« Last Edit: มิถุนายน 16, 2011, 05:35:14 PM by golfreeze »

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2141
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
Re: install syslog-ng + cacti on Freebsd by golfreeze[at]packetlove.com
« Reply #3 on: มิถุนายน 16, 2011, 05:34:36 PM »
#!/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