Nov
14
[原]使用php-syslog-ng查看syslog-ng的信息
五、scripts中的脚本
对scripts目录中其他的文件讲解以下:
请留意,.sh结尾的是bash脚本,可直接执行;而.pl的是perl脚本,使用perl执行;而.php结尾的是php脚本,需使用php命令执行。(很奇怪,干嘛要这样做?)
1、logrotate.php
对php-syslog-ng中的表进行日志循环,其与系统的logrotate不同。该脚本的执行结果,是把每天的日志表备份起来,并创建一个新的日志表供读写。在crontab下,每天自动执行一次。
2、syslog2mysql.sh
该脚本是用于创建mysql的pipe管道,让syslog-ng可通过该管道写入mysql中。在crontab下,系统系统的时候自动运行。
3、reloadcache.php
该脚本的作用是,当有新的host加入syslog-ng后,更新mysql中的信息。在crontab下,每5分钟运行一次。
4、resetusers.sh
用于重置用户表,当忘记admin密码的时候,可运行它。重置后,管理员用户名和密码都是admin。
5、drop-old-tables.php
当php-syslog-ng运行一段时间后,由logrotate.php可能会产生大量的旧日志表。使用这个脚本,可删除具有相同前缀的表,例如logs_*等,可方便管理。
6、dbgen.pl
该脚本用于产生一些演示数据,在测试php-syslog-ng是否正常时可以运行,其会插入大量数据到mysql中。
因其使用perl编写,故需要使用Net::MySQL模块。
安装模块及运行:
# mkdir /usr/lib/perl5/site_perl/5.8.5/Net
# cp MySQL.pm /usr/lib/perl5/site_perl/5.8.5/Net/
# /var/www/html/php-syslog-ng/scripts/dbgen.pl
# cp MySQL.pm /usr/lib/perl5/site_perl/5.8.5/Net/
# /var/www/html/php-syslog-ng/scripts/dbgen.pl
示例:
※注意:这个脚本只是演示而已,实际没什么用的。而官方提供的crontab文件里是每小时执行一次的,应把它删掉。
五、其他
1、不能显示图形
点击"Graph"的时候,报错:
引用
JpGraph Error Font file "/usr/share/fonts/corefonts/verdana.ttf" is not readable or does not exist.
原因是,新版的php-syslog-ng考虑到旧版字库版权的问题,使用了verdana.ttf字库。而当前系统目录该字库。
解决办法:
1)从Windows\Fonts目录中拷贝到上述的路径即可;
2)从下面下载,并放到上述目录下:
下载文件
执行:
# mkdir -p /usr/share/fonts/corefonts
# cd /usr/share/fonts/corefonts/
# wget http://www.linuxfly.org/attachment/verdana.ttf.zip
# unzip verdana.ttf.zip
# rm -f verdana.ttf.zip
# cd /usr/share/fonts/corefonts/
# wget http://www.linuxfly.org/attachment/verdana.ttf.zip
# unzip verdana.ttf.zip
# rm -f verdana.ttf.zip
图例:
2、Web安全问题
若您配置虚拟主机的时候,使用php-syslog-ng的根目录作为Web根目录,请小心scripts的安全问题。
应增加类似:
引用
<Directory "/var/www/phpsyslogng/scripts">
Deny from all
</Directory>
<Directory "/var/www/phpsyslogng/config">
Deny from all
</Directory>
Deny from all
</Directory>
<Directory "/var/www/phpsyslogng/config">
Deny from all
</Directory>
※User Manual原文中有错,请不要把"/var/www/phpsyslogng/includes"屏蔽,否则会导致网页中调用日期函数错误的。
3、命令行执行php脚本的时候报错
报错信息如下:
引用
# php /var/www/html/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/oci8.so' - /usr/lib/php/modules/oci8.so: undefined symbol: OCINlsCharSetNameToId in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/oci8.so' - /usr/lib/php/modules/oci8.so: undefined symbol: OCINlsCharSetNameToId in Unknown on line 0
原因是oci8.so(php和Oracle的接口)不能在未定义前执行,这里也不会使用到该模块。
所以,请修改/etc/php.d/oci8.ini,改为:
引用
; extension=oci8.so
重启httpd服务即可。
◎若一定要使用该模块,可把执行命令的报错信息去掉,即改为:
# php /var/www/html/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log 2>/dev/null
但这样就不能看到错误信息了。
六、参考资料
php-syslog-ng自带的INSTALL-STEPS和TROUBLESHOOTING-INSTALL
Help里提供的php-syslog-ng User Manual
http://www.mail-archive.com/php-syslog-ng-support@lists.sourceforge.net/msg00131.html
http://www.mail-archive.com/php-syslog-ng-support@lists.sourceforge.net/msg00126.html
http://blog.mllm.org/node/184
原文备份:
下载文件
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
没法,又得请教楼主了。