日志统一扫描工具:mysclog

1.mysclog介绍
此脚本主要是用来扫描我们的一些应用的log,比如说oracle的alert log,mysql的error log,通过我们定义关键字,如果log里出现相应关键字,此脚本扫描到后,会记录下相应的信息,然后以邮件或者短信的信息进行通知(这个自己可以修改)。

采用perl脚本定制开发,可任意部署于任何一台可连接至集群的机器(最好不要用集群中的机器做监控机),可以管理多台机器。

2.mysclog的特性
1. 只需在管理机上安装模块
2.被监控机需要一个统一用户和统一目录
3.增加机器只需增加一行配置
4.详细的日志输出

3.mysclog所需条件
1.SSH公钥验证

mysclog管理节点通过ssh连接服务器,进行验证和一些管理操作。为了使这些过程自动化,推荐使用SSH公钥验证密码(也可以使用密码模式进行)。

2.操作系统

目前只测试过Linux系统

3.依赖模块

Net::OpenSSH
Log::Dispatch
Parallel::ForkManager

4.mysclog构建步骤
以如下结构作为说明:
192.168.0.1 mysclog Manager 节点
192.168.0.23 被监控节点
192.168.0.53 被监控节点
192.168.0.55 被监控节点

4.1 第一步:监控机安装模块
Parallel::ForkManager
IO-Tty-1.10.tar.gz
Test-Simple-0.98_05.tar.gz
Net-OpenSSH-0.61_10.tar.gz
yum install perl-Log-Dispatch

以上步骤一般都是:
perl Makefile.PL
make
make install

4.2 第二步:ssh互信(也可以选择直接password登录)
安装完成后,所有节点配置用户下 ssh 互信,注意这里不能禁止password登陆,否则会出现错误,另外按正常步骤下来如果有问题,请检查权限问题:

mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa
ssh-keygen -t dsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

ssh db-64 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh db-64 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh db-24 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh db-24 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

scp ~/.ssh/authorized_keys db-64:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys db-24:~/.ssh/authorized_keys

4.3 被监控节点操作
在192.168.0.23,192.168.0.53,192.168.0.55上建立用户如oracle等和一个工作目录如/home/oracle/mysclog。

必须保证该用户对所要扫描的log具有读取权限,同时对目录具有读写权限。
如果要扫描/var/log/messages的话,可以查看:
http://anonexp.blogspot.com/2013/04/acl-how-to-enable-read-permission-for.html

4.4 管理机部署脚本
新建工作目录如/home/oracle/mysclog(这个要求跟被监控节点一致)

注意:必须保证该用户对所要扫描的log具有读取权限,同时对目录具有读写权限。另外管理机和被监控节点需要的目录是相同的。

一共包括如下三个文件:
mysclog.cnf
mysclog.pl
sclog.pl

其中mysclog.cnf为配置文件
mysclog.pl为主控脚本
sclog.pl为扫描脚本

4.5 mysclog.cnf说明
mysclog.cnf的格式如下:
ip,logs,keys,skip_keys,server,from,to,phonelist
一级分割符为”,”,二级分割符为”|”,参考如下:

192.168.0.23,/data/app/diag/rdbms/teststd01/test/trace/alert_test.log|/home/oracle/mysclog/tmpalert.log,ORA-|Corrupt|Deadlock|start|logon denied,ORA-3136,mail.aaaa.com,dba\@aaaa.com,dba\@aaaa.com|dba\@aaaa.com,13813800000|13813800000
192.168.0.53,/home/oracle/11.2.0/diag/rdbms/testadg03/test/trace/alert_test.log,ORA-|Corrupt|Deadlock|start|logon denied,ORA-3136,mail.aaaa.com,dba\@aaaa.com,dba\@aaaa.com|dba\@aaaa.com,13813800000|13813800000
192.168.0.55,/home/oracle/11.2.0/diag/rdbms/testadg04/test/trace/alert_test.log,ORA-|Corrupt|Deadlock|start|logon denied,ORA-3136,mail.aaaa.com,dba\@aaaa.com,dba\@aaaa.com|dba\@aaaa.com,13813800000|13813800000

拿第一条说明下:

192.168.0.23,/data/app/diag/rdbms/teststd01/test/trace/alert_test.log|/home/oracle/mysclog/tmpalert.log,ORA-|Corrupt|Deadlock|start|logon denied,ORA-3136,mail.aaaa.com,dba\@aaaa.com,dba\@aaaa.com|dba\@aaaa.com,13813800000|13813800000

ip: 192.168.0.23
logs(有两个log要扫描,以|分割了): /data/app/diag/rdbms/teststd01/test/trace/alert_test.log|/home/oracle/mysclog/tmpalert.log
keys(有多个key要扫描,以|分割了): ORA-|Corrupt|Deadlock|start|logon denied
skip_keys:ORA-3136 (可以有多个,以|分割)
from:dba\@aaaa.com
to:dba\@aaaa.com|dba\@aaaa.com (可以有多个,以|分割)
phonelist:13813800000|13813800000 (可以有多个,以|分割)

4.6监控
可以以crontab的形式,或者后台形式(需要稍微修改代码)运行

调试模式:
perl mysclog.pl -u oracle -p dddddddddd -c 2 -f /home/oracle/mysclog/mysclog.cnf -up 1 -l debug
其中
-c是并发度;
-up 1表示把脚本sclog.pl上传或者更新到被监控节点上,一般用默认值就行了
-l 表示日志输出等级,默认就行,调式时可以用debug

一般运行模式:
perl mysclog.pl -u oracle -p dddddddddd -c 2 -f /home/oracle/mysclog/mysclog.cnf

可通过如下命令获取帮助:

 [oracle@MHA-monitor mysclog]$ perl mysclog.pl

===============================================================================
Info  :
        Created By noodba (www.noodba.com) .
Usage :
Command line options :

   -h,--help           Print Help Info. 
   -i,--interval       Time(second) Interval(default 120). 
   -d,--workdir        workdir(default "/home/oracle/mysclog").
   -l,--level          log level(default "info").   
   -u,--user           user name.
   -p,--pswd           user password.
   -f,--conf           scan host config file.
   -c,--concurrency    Parallel process(default 5).
   -up,--updatepl      update scan pl(default 0). 
Sample :
   shell> perl mysclog.pl -u mcheck -p 123456 
===============================================================================

5.7 第七步:错误处理
下面这个错误时因为list of known hosts里面没有,可以先手工ssh一下:

Sat Oct 12 10:49:51 2013 - [warning] ssh to 192.168.2.24 err. error_count:1
Sat Oct 12 10:49:58 2013 - [warning] ssh to 192.168.2.24 err. error_count:2
Sat Oct 12 10:50:04 2013 - [warning] ssh to 192.168.2.24 err. error_count:3
Sat Oct 12 10:50:04 2013 - [error][/home/oracle/dgha/dgha_reverse.pl, ln65] ssh check error,exit.
Killed by signal 1.
Killed by signal 1.
[oracle@MHA-monitor dgha]$ ssh 192.168.2.24
The authenticity of host '192.168.2.24 (192.168.2.24)' can't be established.
DSA key fingerprint is 0d:dd:12:8b:ed:6a:e8:26:dc:a1:00:97:de:d1:bd:98.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.24' (DSA) to the list of known hosts.
oracle@192.168.2.24's password: 
Permission denied, please try again.
oracle@192.168.2.24's password:

5.参考资料1 http://search.cpan.org/~salva/Net-OpenSSH-0.60/lib/Net/OpenSSH.pm
2 MHA mha4mysql-manager-0.55\samples\scripts\power_manager.pl