1 rsyslog日志系统
linux上,应用程序和内核都需要记录日志。负责记录应用程序的是syslogd,记录内核的则是klogd。centos 5上使用的是syslog,但由于其功能过于薄弱和单一,在centos 6和7上被rsyslog所取代。事实上rsyslog是一个服务。
日志:历史事件的相关记录。早期时就有航海日志。
记录的内容:事件发生的时间、事件内容。
日志级别:事件的关键性程序,loglevel。
1.1 rsyslog的优势
1、支持多线程。
2、能够基于UDP, TCP, SSL, TLS, RELP等协议进行远程日志传输,并且还可以机密。
3、日志可以保存至MySQL, PGSQL, Oracle等多种关系数据库中。
4、支持非常强大的过滤器,可实现过滤系统信息中的任意部分。
5、自定义输出格式。
6、适用于企业级别日志记录需求。
但中等规模站点的日志信息放在数据库中已经不合适了,可能会放在Nosql,分布式系统。比如轻量的日志平台elk:elasticsearch, logstash, kibana。
日志生成方:应用程序和内核。而且每个应用程序都可自行记录日志。这样就会造成每个应用程序之间记录日志的格式并不相同,分析起来很不方便。因此,才诞生了syslog这样一个统一的日志服务。内核也可记录日志。
1.2 配置文件
rsyslog的配置文件:/etc/rsyslog.conf
定义在RULLS中的格式:
facility.priority target
设施.级别 何处
facility:设施,从功能或程序上对日志进行分类,并由专门的工具负责记录相应的日志信息。
auth:认证相关的
authpriv:权限,授权相关的
cron:任务计划相关的
daemon:守护进程相关的
kern:内核相关的
lpr:打印相关的
mail:邮件相关的
mark:标记相关的
news:新闻相关的
security:安全相关的,与auth相似
syslog:syslog自己的
user:用户相关的
uucp:unix to unix copy相关的
local0 - local7:用户自定义使用
priority:级别
debug:程序或系统的调试信息,最详细的记录。
info:一般信息
notice:不影响正常功能,需要注意的消息
warn, warning:可能影响系统功能,需要提醒用户的重要事件
err, error:错误信息
crit:比较严重的
alert:必须马上处理的
emerg, panic:会导致系统不可用的
指定级别的方式:
*:所有级别
none:没有级别
priority:比此级别高的(包含)所有级别的日志信息都会记录
=priority:仅记录指定级别
target:
文件路径:将日志记录于指定的文件中。在文件路径之前使用"-",表示异步写入。
用户:将日志信息通知给文件
*:所有用户
日志服务器:@SERVER
管道:| COMMAND
文本记录日志文件的格式:
事件产生的时间 主机 进程(PID): 事件
[root ~]# tail /var/log/messages
May 8 19:40:27 www kernel: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
May 8 19:56:44 www kernel: e1000: eth1 NIC Link is Down
May 9 00:00:30 www xinetd[1060]: START: telnet pid=2528 from=::ffff:172.16.250.130
特殊日志文件:
有些日志记录二进制格式,例如,两个日志文件:
成功登录系统的日志:/var/log/wtmp,查看命令:last
失败的登录的尝试:/var/log/btmp,查看命令:lastb
1 2 3 4
|
[root ~]# file /var/log/btmp /var/log/btmp: DBase 3 index file [root ~]# file /var/log/wtmp /var/log/wtmp: data
|
这两个命令可以实现过滤功能
lastlog命令:显示当前系统每个用户各自最近一次的登录信息。
1.3 模块
配置文件中$ModLoad表示装载模块。
允许从udp/tcp 514端口收集日志信息:
$ModLoad imtcp
$InputTCPServerRun 514
$ModLoad imudp
$UDPServerRun 514
一般使用udp,查看rsyslog支持哪些模块:man rsyslog.conf
1.4 搞个日志服务器收集其他主机的日志信息
1、启用本机成为日志服务器
使用udp 协议514端口传输
1 2 3
|
[root ~]# vim /etc/rsyslog.conf #$ModLoad imudp #$UDPServerRun 514
|
2、把日志存储于mysql
a. mysql已经准备就绪,安装rsyslog-mysql
1
|
[root ~]# yum install rsyslog-mysql
|
查看生成的文件:
1 2 3 4
|
[root ~]# rpm -ql rsyslog-mysql /lib64/rsyslog/ommysql.so # 就靠这个模块了 /usr/share/doc/rsyslog-mysql-5.8.10 /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql # 创建rsyslog依赖的数据库所需的脚本。里面就是创建数据库和表的命令。
|
b. 创建rsyslog依赖的数据库
1
|
[root ~]# mysql < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
|
进入数据库查看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
[root ~]# mysql MariaDB [(none)]> SHOW DATABASES; # 查看库 +--------------------+ | Database | +--------------------+ | information_schema | | Syslog | | mysql | | performance_schema | | test | +--------------------+ MariaDB [(none)]> use Syslog; # 此库就是脚本建立的了 MariaDB [Syslog]> SHOW tables; # 查看表 +------------------------+ | Tables_in_Syslog | +------------------------+ | SystemEvents | | SystemEventsProperties | +------------------------+ MariaDB [Syslog]> DESC SystemEvents; # 表的结构 +--------------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+------------------+------+-----+---------+----------------+ | ID | int(10) unsigned | NO | PRI | NULL | auto_increment | | CustomerID | bigint(20) | YES | | NULL | | | ReceivedAt | datetime | YES | | NULL | | | DeviceReportedTime | datetime | YES | | NULL | | | Facility | smallint(6) | YES | | NULL | | | Priority | smallint(6) | YES | | NULL | | | FromHost | varchar(60) | YES | | NULL | | | Message | text | YES | | NULL | | | NTSeverity | int(11) | YES | | NULL | | | Importance | int(11) | YES | | NULL | | | EventSource | varchar(60) | YES | | NULL | | | EventUser | varchar(60) | YES | | NULL | | | EventCategory | int(11) | YES | | NULL | | | EventID | int(11) | YES | | NULL | | | EventBinaryData | text | YES | | NULL | | | MaxAvailable | int(11) | YES | | NULL | | | CurrUsage | int(11) | YES | | NULL | | | MinUsage | int(11) | YES | | NULL | | | MaxUsage | int(11) | YES | | NULL | | | InfoUnitID | int(11) | YES | | NULL | | | SysLogTag | varchar(60) | YES | | NULL | | | EventLogType | varchar(60) | YES | | NULL | | | GenericFileName | varchar(60) | YES | | NULL | | | SystemID | int(11) | YES | | NULL | | +--------------------+------------------+------+-----+---------+----------------+
|
3、配置rsyslog启用ommysql模块。在rsyslog配置文件的MODULES字段中定义。
1 2 3
|
[root ~]# vim /etc/rsyslog.conf #### MODULES #### $ModLoad ommysql
|
4、定义某facility把日志记录至指定的数据库的指定表中,RULES段中定义。
1 2
|
#### RULES #### *.info;mail.none;authpriv.none;cron.none :ommysql:127.0.0.1,Syslog,rsyslog,rsyslog
|
5、数据库中创建rsyslog用户并授权
1 2 3
|
MariaDB [(none)]> GRANT ALL ON Syslog.* TO 'rsyslog'@'127.0.0.1' IDENTIFIED BY 'rsyslog'; MariaDB [(none)]> GRANT ALL ON Syslog.* TO 'rsyslog'@'localhost' IDENTIFIED BY 'rsyslog'; MariaDB [(none)]> FLUSH PRIVILEGES;
|
6、重启服务
1
|
[root ~]# service rsyslog restart
|
7、测试
1 2 3
|
[root ~]# yum install -y zsh [root ~]# tail -1 /var/log/messages May 9 05:44:07 www rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="924" x-info="http://www.rsyslog.com"] exiting on signal 15. # 没有yum的日志信息
|
进入数据库查看,测试OK
1 2
|
MariaDB [Syslog]> use Syslog; MariaDB [Syslog]> SELECT * FROM SystemEvents\G
|
1.5 使用loganalyzer(WebGUI)来展示日志信息
由于是web工具,所以依赖lamp。lamp已然就绪,并且php没有问题。config.php是该工具的主配置文件,如果第一次配置错误,将该文件内容清空即可。
1、解压程序包
1 2
|
[root ~]# tar xf loganalyzer-3.6.5.tar.gz -C /vhosts/a.com/htdocs/ [root ~]# cd /vhosts/a.com/htdocs/
|
2、搞定一些文件
1 2 3
|
[root htdocs]# mv loganalyzer-3.6.5/src/ log [root htdocs]# cd log [root log]# cp ../loganalyzer-3.6.5/contrib/* . # 两个脚本文件
|
3、执行脚本
1 2 3 4 5
|
[root log]# chmod +x configure.sh secure.sh [root log]# ./configure.sh [root log]# ./secure.sh [root log]# chmod 666 config.php # 此文件就是该工具的主配置文件 [root log]# chown -R daemon.daemon ./* 将所有文件的属主属组改为httpd进程的属主
|
4、浏览器访问 http://172.16.45.10/log/
点击here之后,一路下一步
就是这么个情况: