rsyslog及loganalyzer
系统日志服务:
CentOS5:
syslog:
syslogd: system klogd: kernel
CentOS6及7:
rsyslog: syslogd klogd
rsyslog特性:
多线程 UDP,TCP,SSL,TLS,RELP Mysql,PGSQL,Oracle实现日志存储 强大的过滤器,可实现过滤日志信息中任何部分 自定义输出格式
很多中大型互联网公司用的比较多的分布式日志存储分析系统:elk
分布式日志存储和搜索系统:elasticsearch 分布式日志收集器:logstash 前端日志展示工具:kibana
日志收集方:
从功能或程序上对日志进行分类:
facility: //把具有相同特性的由各个应用程序产生的日志数据流归类到同一个数据收集管道中
auth,aurhpriv,cron,daemon,kern,lpr,mail,mark,news,security,user,uucp,local0-local7,syslog //常用facility
日志级别:
priority: debug,info,notice,warn(warning),err(error),crit(critical),alert,emerg(panic)
日志收集定义:
facility.priority /var/log/messages //哪个facility所产生的哪个级别的日志存储在哪个文件中
指定级别:
*: 所有级别 none: 没有级别 priority: 此级别及更高级别的日志信息 =priority: 此级别
rsyslog相关程序文件:
主程序:rsyslogd 配置文件:/etc/rsyslog.conf 服务脚本:/etc/rc.d/init.d/rsyslog
举例: # vim /etc/ssh/sshd_config 自定义日志分类:SyslogFacility local2 # vim /etc/rsyslog.conf 指明local2分类的日志所有级别下:local2.* /var/log/sshd.log //文件路径前:-表示异步写入,* 表示通知所有用户
# service sshd restart
# service rsyslog restart
重新登录ssh后可以在/var/log/sshd.log看到登录日志
rsyslog.conf配置文件:
RULES: facility.priority target target: 文件路径: 记录于指定日志文件中,通常应该在/var/log目录下,文件路径前的"-"表示异步写入 用户: 将日志通知给指定用户 *: 所有用户 日志服务器:@host //可以不是本地主机,而是另一台日志服务器收集系统 host: 必须监听在tcp或udp协议514端口上提供服务 管道: |COMMAND //日志也可以送给管道命令来处理
文件记录的日志的格式 事件产生的日期时间 主机 进程pid:日志事件(事件内容)
有些日志记录二进制格式:/var/log/wtmp,/var/log/btmp
/var/log/wtmp:当前系统上成功登陆的用户的日志:
查看日志: last
/var/log/btmp:当前系统上失败的登录的用户的尝试
查看日志: lastb
lastlog命令: 显示当前系统上每一个用户最近一次的登录时间,NEVER。。。:表示从来没有登陆过系统
rsyslog服务器:
日志信息存储目标指向TARGET为一台主机:
1. MODULES中启用模块:udp和tcp都可以,这里都启动好了
# vim /etc/rsyslog.conf
$ModLoad imudp //udp的模块,启用这两个模块的支持
$UDPServerRun 514
$ModLoad imtcp //tcp的模块 $InputTCPServerRun 514
# netstat -tunl //514在监听
2. 另一台电脑以本机作为日志服务器
# vim /etc/rsyslog.conf
比如就指定这个吧
*.info;mail.none;authpriv.none;cron.none @192.168.2.104 //指向另一台主机作为日志服务器
将日志记录于mysql数据库中
1. rsyslog服务器安装驱动:rsyslog-mysql
# yum install rsyslog-mysql
2. mysql服务器授权就可以了
MariaDB [(none)]> GRANT ALL ON Syslog.* TO 'syslog'@'192.168.2.%' IDENTIFIED BY 'syslogpass';
MariaDB [(none)]> FLUSH PRIVILEGES;
顺便查看一下mysql的配置文件有没有跳过名称解析,没有的话加上下面两行
# vim /etc/my.cnf skip_name_resolve = on innodb_file_per_table = on
# service mysqld restart
3. rsyslog服务器以输入重定向的方式导入Syslog数据库及表,当然也可以自己去手动创建
# mysql -usyslog -h192.168.2.105 -p < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
4. 修改rsyslog服务器配置文件让rsyslog能够支持mysql:
1.Modules这一个条目下面添加: $ModLoad ommysql //加载连接mysql模块 2. RULES下面添加: *.info;mail.none;authpriv.none;cron.none :ommysql:192.168.2.105,Syslog,syslog,syslogpass//将日志发往ommysql输出过滤器,服务器地址,数据库,连接数据库的用户名,密码
5.测试
现在在rsyslog服务器/var/log/messages下已经看不到日志了,在数据库中可以查看
连接数据库后: USE Syslog; SELECT * FROM SyslogEvents\G
6. 使用日志分析前端工具:loganalyzer
安装服务器环境
# yum install httpd php php-mysql -y
下载loganalyzer:http://download.adiscon.com/loganalyzer/loganalyzer-4.1.5.tar.gz
安装analyzer
# tar xf loganalyzer-4.1.5.tar.gz
拷贝src和contrib下的脚本到loganalyzer下
# tar xf loganalyzer-4.1.5.tar.gz -C /var/www/html/
# mv loganalyzer-4.1.5 /var/www/html/log
# cd /var/www/html
# mv log/src loganalyzer
# cp log/contrib/*.sh loganalyzer
# cd loganalyzer
执行下脚本,没问题的话修改配置文件权限
# chmod +x *.sh
# ./configure.sh
# ./secure.sh
# chmod 666 config.php //没有的话会自动创建一个
浏览器中访问:192.168.2.10/loganalyzer/install.php, 按步骤设置好loganalyzer第一次登陆设置
这里例如根据上面mysql的设置: source type: mysql
database host: 192.168.2.20
database name: Syslog
database tablename: SystemEvents
database user:syslog
database password:syslogpass
安装php-gd显示mysql数据图形
# yum install php-gd -y //loganalyzer统计中支持图形
# service httpd reload