Nov
14
[原]使用php-syslog-ng查看syslog-ng的信息
7、配置syslog-ng
其配置文件在:/etc/syslog-ng.conf,加入:
引用
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));
};
log {
source(s_sys);
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));
};
log {
source(s_sys);
destination(d_mysql);
};
或使用scripts的脚本:
# cat syslog.conf >> /etc/syslog-ng/syslog-ng.conf
※注意:需把源驱动器的s_all修改为s_sys。
8、创建mysql的pipe通道
首先确认一下scripts目录中,syslog2mysql.sh脚本来的配置文件路径是否正确,若没问题,运行它:
# /var/www/html/php-syslog-ng/scripts/syslog2mysql.sh >> /var/log/php-syslog-ng/mysql.log 2>&1 &
若日志没有报错,即可。
9、重启syslog-ng服务
若syslog未关闭,请执行:
# service syslog stop
# service syslog-ng start
# chkconfig syslog off
# chkconfig --level 2345 syslog-ng on
# service syslog-ng start
# chkconfig syslog off
# chkconfig --level 2345 syslog-ng on
从Web进入php-syslog-ng,应可正常使用:
四、配置计划任务
若使用php-syslog-ng对日志进行集中管理,其数据量可能是相当巨大的,必须考虑日志循环的问题。可以使用计划任务实现。
1、配置计划任务
使用crontab -e加入:
引用
# PHP-Syslog-NG
@daily php /var/www/html/php-syslog-ng/scripts/logrotate.php >> /var/log/php-syslog-ng/logrotate.log
@daily find /var/www/html/php-syslog-ng/html/jpcache/ -type f -atime 1 -exec rm -f '{}' ';'
@reboot /var/www/html/php-syslog-ng/scripts/syslog2mysql.sh >> /var/log/php-syslog-ng/mysql.log 2>&1
0,5,10,15,20,25,30,35,40,45,50,55 * * * * php /var/www/html/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log
@daily php /var/www/html/php-syslog-ng/scripts/logrotate.php >> /var/log/php-syslog-ng/logrotate.log
@daily find /var/www/html/php-syslog-ng/html/jpcache/ -type f -atime 1 -exec rm -f '{}' ';'
@reboot /var/www/html/php-syslog-ng/scripts/syslog2mysql.sh >> /var/log/php-syslog-ng/mysql.log 2>&1
0,5,10,15,20,25,30,35,40,45,50,55 * * * * php /var/www/html/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log
或确认scripts脚本中的crontab文件路径正确后,运行:
# cat crontab >> /var/spool/cron/root
※注意:
1、请把运行dbgen.pl的命令删除,该脚本只是用于产生演示数据,详见后面说明。
2、执行php脚本的时候可能会包oci8.so错误,后面也有说明。
3、原find语句存在Bug,请加入-type f选项,否则会报如下的错误:
rm: cannot remove `/var/www/html/php-syslog-ng/html/jpcache/': Is a directory
2、配置日志循环
# cp logrotate.d /etc/logrotate.d/php-syslog-ng
至此,php-syslog-ng已经全部配置完成。后面讲解其他的一些脚本的功能。
mcg840107@126.com
options { stats_freq (0);
flush_lines (1);
keep_hostname (yes);
time_reopen (10);
log_fifo_size (1024);
long_hostnames (off);
use_dns (no);
use_fqdn (no);
create_dirs (yes);
owner(root);
group(root);
perm(0640);
dir_perm(0755);
};
source s_sys {
file ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
internal();
udp(ip(0.0.0.0) port(514));
};
这个是我的syslog-ng.conf中的options和source的设置,然后增加了你的那个配置内容。还望版主能够指点一下~~谢谢阿
我的linux版本是FC11的,然后使用yum安装好了syslog-ng和php-syslog-ng,一切都通过了。但是在web界面中没有数据,显示There appear to be no hosts in the Database yet,You can generate fake ones using scripts/dbgen.pl
查看数据库中的syslog,select * from logs,显示是空的。应该是syslog-ng没有将日志导入mysql吧?但我确实是在syslog-ng.conf中按照你的文档加入了数据库的配置。配置上唯一跟您有出入的就是6.配置脚本,他显示的是test是个目录。
还望版主指点指点。
php-syslog-ng的版本是2.9.8的~~
P.S.我在crontab上並沒有設定清除日誌的drop-old-tables.php,真令人不解阿...
sql(type(mysql)
host("127.0.0.1") username("root") password("")
database("filter_logs")
table("messages_${R_YEAR}${R_MONTH}${R_DAY}")
columns("datetime", "facility", "level", "host", "program", "pid", "message")
values("$R_DATE", "$FACILITY", "$LEVEL", "$HOST", "$PROGRAM", "$PID", "$MSGONLY")
indexes("datetime", "host", "program", "pid", "message"));
};
我手功插入了2000多W条记录,但是数据库里只插入了400多W条,有没有可能是插入太快了,而syslog-ng来不及写入mysql里?
你提到的2000W记录,在messages中也是2000W吗?messages中的数量应该与mysql中的相同。我觉得不会是插入太快的问题,但有可能存在缓存、UDP丢失等问题。
最近要装一个syslog-ng服务。
目的很简单,就是把服务器的日志文件,放入到MySQL数据库中就可以了。
然后自己写java代码和jsp页面显示出来就可以了。
但是,由于本人能力有限,弄了两个星期都没有弄成功啊。
您能不能简单的给指导一下,我应该怎么做啊。
只要把服务器的日志文件存入数据库中就可以了。
谢谢您啊。
之前问到的问题,我没管它了,直接在 login.php中调用html_header.php的部分将其注释掉。能够出现其plain的登陆页面了,但用admin登陆时,返回的消息却是:
Query failed: Table 'syslog.test_users' doesn't exist
没法,又得请教楼主了。