内容:
1、rsyslog日志服务简介
2、rsyslog的配置详解
3、实现日志服务器收集日志及last、lastb、dmseg命令的使用
4、实现日志存储在mysql中
一、rsyslog日志服务简介
日志的概念好理解,日志作用可用于排障和追溯审计的等
1、rsyslog是一个C/S架构的服务,可监听于某套接字,帮其它主机记录日志信息,在linux系统中可以分类两个日志:
klogd:kernel,记录内核相关的日志
syslogd:service,记录应用程序的日志
rsyslog:是CentOS 6以后的系统使用的日志系统,与之前的syslog日志系统相比,具有以下优点:
支持多线程
支持TCP、SSL、TLS、RELP等协议
强大的过滤器,可实现过滤日志信息中的任意部分
支持自定义输出格式
适用于企业级别日志记录需求
模块化
2、日志的记录格式
日期时间 主机进程[pid]:事件内容
二、rsyslog配置
1、程序包:rsyslog
程序环境:
配置文件:/etc/rsyslog.conf, /etc/rsyslog.d/
主程序:/usr/sbin/rsyslogd
模块路径:/usr/lib64/rsyslog/
Unit File:/usr/lib/systemd/system/rsyslog.service
2、rsyslog中的术语:
facility:设施、信道;
auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, user, uucp, syslog, local0-local7
priority:记录日志的等级,如果等级是info,代表包含了info以及以上的所有等级事件日志都记录
debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
3、配置文件:
由三部分组成:严格按照配置段位置添加配置
[12:58 [email protected]~]# grep "####" /etc/rsyslog.conf #### MODULES #### #### GLOBAL DIRECTIVES #### #### RULES ####
MODULES:定义了模块的选修,如接下来的使用mysql模块记录日志则需要在这里配置
GLOBAL DIRECTIVES:定义了全局的环境
RULES:定义了记录日志的设施以及等级等信息
其格式为:
日志定义格式: facility.priority Target facility: 设施,从功能或程序上对日志进行分类,并由专门的工具负责记录日志; 常用的facility: lpr: 打印相关的日志 auth:认证相关的日志 user:用户相关的日志 cron:计划任务相关的日志 kern:内核相关的日志 mail:邮件相关的日志 mark:标记相关的日志 news:新闻相关的日志 uucp:文件copy相关的日志 daemon:系统服务相关的日志 authpri: 授权相关的日志 security:安全相关的日志 local0-local7:自定义相关的日志信息(自定义时可以使用通配符) 通配符: *:所有 f1,f2,f3......:列表 !:取反 priority:日志级别 常用的日志级别: debug: 调试 info: 消息 notice: 注意 warn,warning: 警告 err,error: 错误 crit: 严重级别 alert: 需要立即修改该的信息 emerg,panic: 内核崩溃,内核恐慌等严重的信息 通配符: *:所有日志级别 none:没有任何级别,也就是不记录日志信息 Target:文件路径 可以使用的有: /var/log/messages 用户:*当前登录系统的所有用户 日志服务器:@SERAVER_IP 管道:| COMMAND
举例: mail.info /var/log/maillog: 比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中 mail.=info /var/log/maillog: 明确指定日志级别为info,保存至/var/log/maillog mail.!info /var/log/maillog: 除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog *.info /var/log/maillog: 所有facility的info级别,保存至/var/log/maillog mail.* /var/log/maillog: mail的所有日志级别信息,都保存至/var/log/maillog mail.notice;news.info /var/log/maillog: mail的notice以上记得日志级别和news的info以上的级别保存至/var/log/maillog mail,news.crit -/var/log/maillog: mail和news的crit以上的日志级别保存/var/log/maillog中;“-”代表异步模式
三、实现日志服务器收集日志
前面已经介绍,rsyslog是一个C/S架构,可以通过套接字来进行监听记录工作,起可以基于TCP和UDP工作,默认的监听端口是514,只需要在modules打开即可:
1、修改服务端配置,打开服务监听端口,并重启服务:
#### modules #### ………… # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 [13:05 [email protected]~]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
2、在客户端的配置中,定义将日志发往服务端:
#### RULES #### *.* @10.1.252.109
3、服务端已经收到日志:
[13:15 [email protected]~]# tail /var/log/messages Oct 16 12:48:36 centos6 kdump: started up Oct 16 12:48:39 centos6 abrtd: Init complete, entering main loop Oct 16 13:05:50 centos6 kernel: Kernel logging (proc) stopped. Oct 16 13:05:50 centos6 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1547" x-info="http://www.rsyslog.com"] exiting on signal 15. Oct 16 13:05:50 centos6 kernel: imklog 5.8.10, log source = /proc/kmsg started. Oct 16 13:05:50 centos6 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2418" x-info="http://www.rsyslog.com"] start Oct 18 10:20:43 localhost kernel: imklog 5.8.10, log source = /proc/kmsg started. Oct 18 10:20:43 localhost rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2205" x-info="http://www.rsyslog.com"] start Oct 18 10:26:20 localhost root: Oct 18 10:26:20 localhost root:
4、其它几个日志文件:
last -num:记录登录系统成功的记录
lastb -num :记录登录系统失败的记录
命令的读取日志文件:
/var/log/btmp:登录当前系统的所有的失败的尝试;
/var/log/wtmp:所有成功登录至当前系统的相关信息;
dmesg:系统引导过程中的日志信息;
/var/log/dmesg:系统引导过程中的日志信息;
文本查看工具;
也可以使用dmesg命令;
四、实现日志存储在mysql中
前提:准备好msql server或mariadb server;
1、安装rsyslog连接至mysql server的驱动模块;
[13:24 [email protected]~]# yum install -y rsyslog-mysql [13:24 [email protected]~]# 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模块提供的启动mysql的模块还有createDB.sql,它的作用就是定义了日志的记录表格式,可以直接导入该sql语句到mysql即可
2、在mysql server准备rsyslog专用的用户账号;
mysql>GRANT ALL ON Syslog.* TO 'rsyslog'@'127.0.0.1' IDENTIFIED BY 'rsyslogpass'; mysql>GRANT ALL ON Syslog.* TO 'rsyslog'@'local' IDENTIFIED BY 'rsyslogpass'; mysql> FLUSH PRICVILEGES
3、导入该sql语句到mysql即可,生成所需要的数据库和表;
[13:24 [email protected]~]# mysql -ursyslog -h127.0.0.1 -p123456 < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql mysql> USE Syslog Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> SHOW TABLES; +------------------------+ | Tables_in_Syslog | +------------------------+ | SystemEvents | | SystemEventsProperties | +------------------------+ 2 rows in set (0.00 sec) mysql> 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 | | +--------------------+------------------+------+-----+---------+----------------+ 24 rows in set (0.00 sec)
4、配置rsyslog加载ommysql模块
#### MODULES #### ...... $ModLoad ommysql
5、配置RULES,将所期望的日志信息记录于mysql中;
其格式为:
facility.priority :ommysql:DBHOST,DB,DBUSER,DBUSERPASS
所以添加以下信息:
*.* :ommysql:127.0.0.1,Syslog,rsyslog,123456
6、启动mysql服务,并重启rsyslog服务,mysql已经记录日志,到此为止,日志信息已经成功的存储于数据库中;
mysql> SELECT * FROM SystemEvents\G *************************** 1. row *************************** ID: 1 CustomerID: NULL ReceivedAt: 2016-10-16 13:35:46 DeviceReportedTime: 2016-10-16 13:35:46 Facility: 0 Priority: 6 FromHost: centos6 Message: imklog 5.8.10, log source = /proc/kmsg started. NTSeverity: NULL Importance: NULL EventSource: NULL EventUser: NULL EventCategory: NULL EventID: NULL EventBinaryData: NULL MaxAvailable: NULL CurrUsage: NULL MinUsage: NULL MaxUsage: NULL InfoUnitID: 1 SysLogTag: kernel: EventLogType: NULL GenericFileName: NULL SystemID: NULL *************************** 2. row *************************** ID: 2 CustomerID: NULL ReceivedAt: 2016-10-16 13:35:46 DeviceReportedTime: 2016-10-16 13:35:46 Facility: 5 Priority: 6 FromHost: centos6 Message: [origin software="rsyslogd" swVersion="5.8.10" x-pid="3081" x-info="http://www.rsyslog.com"] start NTSeverity: NULL Importance: NULL EventSource: NULL EventUser: NULL EventCategory: NULL EventID: NULL EventBinaryData: NULL MaxAvailable: NULL CurrUsage: NULL MinUsage: NULL MaxUsage: NULL InfoUnitID: 1 SysLogTag: rsyslogd: EventLogType: NULL GenericFileName: NULL SystemID: NULL *************************** 3. row *************************** ID: 3 CustomerID: NULL ReceivedAt: 2016-10-16 13:35:50 DeviceReportedTime: 2016-10-18 10:48:37 Facility: 18 Priority: 6 FromHost: localhost Message: nidhai NTSeverity: NULL Importance: NULL EventSource: NULL EventUser: NULL EventCategory: NULL EventID: NULL EventBinaryData: NULL MaxAvailable: NULL CurrUsage: NULL MinUsage: NULL MaxUsage: NULL InfoUnitID: 1 SysLogTag: root: EventLogType: NULL GenericFileName: NULL SystemID: NULL *************************** 4. row *************************** ID: 4 CustomerID: NULL ReceivedAt: 2016-10-16 13:35:52 DeviceReportedTime: 2016-10-18 10:48:39 Facility: 18 Priority: 6 FromHost: localhost Message: D NTSeverity: NULL Importance: NULL EventSource: NULL EventUser: NULL EventCategory: NULL EventID: NULL EventBinaryData: NULL MaxAvailable: NULL CurrUsage: NULL MinUsage: NULL MaxUsage: NULL InfoUnitID: 1 SysLogTag: root: EventLogType: NULL GenericFileName: NULL SystemID: NULL 4 rows in set (0.00 sec)
OK,更多文章请关注我的博客。