rsyslog

在日常生活中如果您是一个生活有条理的人,一定会记录一下每天发生的事情,方便自己回看。CentOS系统中也是这样工作的,当我们在某时发生了错误时,这时日志就给我们起到了举足轻重的作用;我们可以查看日志并分析错误产生的原因等等。

一、rsyslog基本介绍

1、rsyslog基本概念

Rsyslog是用于UNIX和类Unix的计算机系统上用于转发IP 网络中的日志消息的开源软件实用程序。它实现了基本的syslog协议,扩展了基于内容的过滤,丰富的过滤功能,灵活的配置选项,并添加了使用TCP进行传输的功能

2、rsyslog构成

CentOS 5之前版本:sysklogd

CentOS 5之后版本:

syslogd:记录系统日志
klogd:记录内核日志

事件记录格式:

日期时间  主机   进程[PID]: 事件内容

示例:

Sep 18 11:10:33 localhost rz[3487]: [root] xcache-3.2.0.tar.bz2/ZMODEM: 148392 Bytes, 1037300 BPS

3、rsyslog工作模式

基于C/S架构:通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理。

4、rsyslog特性

(1)支持多协议;UDP,TCP,SSL,TLS,RELP等
(2)实现日志存储;MySQL,gpsql,oracle等
(3)强大的过滤器,可实现过滤日志信息中任何部分
(4)自定义输出格式

5、rsyslog配置文件

主程序:

/usr/sbin/rsyslogd

库文件

/lib64/rsyslog/*.so

主配置文件

/etc/rsyslog.conf和/etc/rsyslog.d/*.conf

[root@localhost~]#grep "^###" /etc/rsyslog.conf

#### MODULES ####   相关模块配置
#### GLOBAL DIRECTIVES #### 全局配置
#### RULES #### 日志记录相关的规则配置

(1)MODULES格式

$ModLoad ModulesName

(2)GLOBAL DIRECTIVES格式

$WorkDirectory /var/lib/rsyslog 定义工作目录
$ActionFileDefaultTemplate  使用时间戳格式 RSYSLOG_TraditionalFileFormat   
$ActionFileEnableSync on  
$IncludeConfig /etc/rsyslog.d/*.conf      其他配置文件位置
$OmitLocalLogging on       
$IMJournalStateFile imjournal.state

(3)RULES格式

facility.priority target

facility 设施,从功能或程序上对日志进行分类

选项 说明
auth 授权日志信息
authpriv 认证日志信息
cron 任务计划日志信息
daemon 进程日志信息
kern 内核日志信息
lpr 打印机日志信息
mail 邮件日志信息
mark 标签日志信息
news 新闻日志信息
security 安全日志信息
user 用户日志信息
uucp uucp日志信息
syslog 系统日志信息
local0-local7 自定义日志信息

priority 优先级

选项 说明
debug 只要发生就记录下来
info 一些基本的信息说明,无任何严重性
notice 系统进程,但有发生要注意的事项
warn(warning) 系统发生警告信息,但还不至于影响Daemon的正常工作
err(error) 发生重大的错误信息,这些信息通畅可以是说明无法启动的原因
crit(critical) 系统发生比err还严重的错误信息,通畅表示到达系统临界点
emerg(panic) 最严重的等级,通畅表示系统已经瘫痪

如何指定级别?

选项 说明
* 指定所有级别
none 没有级别
PRIORITY 此级别及更高的级别日志信息
=PRIORITY 只指定此级别

target

文件路径:通常在/var/log目录下定义,文件路径前的“-”表示异步写入,可以提升系统性能
用户:将日志事件通知给指定的用户,*表示登录的所有用户
日志服务器:@HOST,把日志发送至指定的远程服务器中记录;这些可以将日志集中管理。默认监听在TCP/UDP的514端口上。
管道:|COMMAND,转发给其他命令处理

6、其他日志文件

/var/log/secure:系统安装日志,文本格式,应周期性分析此日志文件
/var/log/btmp:当前系统上,用户的失败尝试登陆相关的日志信息,二进制格式。可以使用lastb命令查看,再日常工作中可以查看是否有人尝试破解密码登录,然后截取除IP地址丢进防火墙中即可。

注意:如果想清楚文件中的内容不能直接把文件删除可以使用>/var/log/wtmp进行清楚。

[root@localhost~]#lastb

root     :0           :0               Wed Sep 20 11:45 - 11:45  (00:00)    

btmp begins Wed Sep 20 11:45:14 2017

/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,可以使用last命令查看

[root@localhost~]#last

root     pts/1        192.168.4.1      Thu Oct 12 08:43   still logged in   
root     pts/0        192.168.4.1      Thu Oct 12 08:20   still logged in   
root     :0           :0               Thu Oct 12 08:20   still logged in 

/var/log/lastlog:每一个用户最近一次的登陆信息,二进格式,可以使用lastlog命令查看。

[root@localhost~]#lastlog

Username         Port     From             Latest
root             pts/1    192.168.4.1      Thu Oct 12 08:43:58 +0800 2017
bin                                        **Never logged in**
daemon                                     **Never logged in**

/var/log/dmesg:系统引导过程中的日志信息,文本格式,可以使用专用命令dmesg命令查看,如果系统出错可以查看是否启动过程哪里出错

/var/log/anaconda:存放anaconda的日志目录

二、日志服务器

环境准备

|
|主机|主机名|角色
|192.168.31.205|master|日志服务器
|192.168.31.139|node2|client

(1) master上修改配置文件

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514

可以启动tcp或者udp,这个看网络的问题

~]# systemctl restart rsyslog

~]# ss -unlp |grep 514

UNCONN     0      0            *:514                      *:*                   users:(("rsyslogd",pid=120004,fd=3))
UNCONN     0      0           :::514                     :::*                   users:(("rsyslogd",pid=120004,fd=4))

(2) 客户端进行配置

~]# vim /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none                @192.168.31.205

~]# service rsyslog restart

(3)测试

~]# ~]# logger "这是一条测试日志" 在node2上测试

看看master 上查看是否能收到

~]#tail -f /var/log/messages

Mar 11 10:45:31 node2 root: 这是一条测试日志

三、如何将日志存储到mysql服务器上

将日志存储到日志服务器上这样的好处是集中管理日志,但是当我们某天遇到问题时,不可能一个一个的去查询,这样显然增加了我们的工作量,如果可以直接搜索查询多好,mysql就为我们解决了这个问题。

(1)在node2安装mysql模块相关的程序包

~]#yum install -y rsyslog-mysql

~]#rpm -ql rsyslog-mysql #查看文件

/usr/lib64/rsyslog/ommysql.so    #模块
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql    #表结构

~]# scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql master:/root/

(2)master创建表结构

~]# mysql -uroot -p < mysql-createDB.sql #为rsyslog创建数据库及表

(3)授权

grant all privileges on Syslog.* to 'syslog'@'192.168.31.%' identified by '123456';

(4)在node2修改配置文件

   $ModLoad ommysql
*.info;mail.none;authpriv.none;cron.none                :ommysql:192.168.31.205,Syslog,syslog,123456

~]# systemctl restart rsyslog #重启服务

(4)node2测试

~]# logger "这是一个测试日志"

~]#mysql -u root -p #登陆mysql日志服务器查看

MariaDB [(none)]> use Syslog
MariaDB [Syslog]> SELECT count(*)  FROM SystemEvents;
+----------+
| count(*) |
+----------+
|        10 |
+----------+
10 row in set (0.00 sec)

四、模块imfile

该模块提供将任何标准文本文件转换为系统日志消息的功能。逐行读取,并将任何读取的行传递给rsyslog规则引擎。规则殷勤应用过滤条件并选择需要执行的操作。

(1) 参数

$InputFileName 待监控的文件路径
$InputFileTag 文件唯一表示tag,最好保持唯一,用于接受端区分原始log文件
$InputFileStateFile 需要保证发送端唯一,记录读取到哪,状态文件保存在$WorkDirectory,默认为/var/lib/rsyslog;如果某个要监控的文件名变化了,一定要重新设置该值
$InputFileFacility log类型,默认为local0
$InputFileSeverity log级别
$InputRunFileMonitor 启动监控当前的文件
$InputFilePollInterval 全局设置,默认轮询10s
$InputFilePersistStateInterval 没多少行更新state文件状态

示例

$InputFileName /var/log/nginx/access.log
$InputFilePollInterval 5
$InputFileTag nginx
$InputFileStateFile /var/lib/rsyslog/nginx.access-test.log
$InputFileSeverity info
$InputFileFacility local5
$InputRunFileMonitor

local5.* ommysql:192.168.31.205,Rsyslog,syslog,123456

五、日志图形化管理工具

(1)解压缩

~]#tar xf loganalyzer-4.1.7.tar.gz

(2)配置nginx

conf.d]# cat loganalyzer.conf

server {
    listen 80;
    server_name www.testloganalyzer.com;
    location /log {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/php/$fastcgi_script_name;
        include fastcgi_params;
    }
}

~ #] cp -r src/* /data/php/

~ #] cp contrib/* /data/php/

~]# chmod +x secure.sh

~]# chmod +x configure.sh

~]#./configure.sh

~]#./secure.sh

~ ]# chown -R nginx.nginx ./*

(3)启动nginx

修改配置文件

server {
        server_name www.testloganalyzer.com;
        root /data/;
        location /php {
                index index.php index.html;
        }
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

~]# systemctl start nginx php-fpm

注意,在刚开始我使用php5.4的时候,出现版本不兼容问题。换一个高版本就解决了。

(4)测试是否成功

如果想生成图表可以安装yum install -y php-gd,然后重新启动httpd服务即可。


logrotate

(1)logrotate配置项

daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
compress 通过gzip压缩
nocompress 不需要压缩
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份但不截断
missingok 如果文件不存在,继续下一个文件,不报异常
nomissingok 如果文件不存在,报异常
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
delaycompress 和compress一起使用时,转储日志文件到下一次转储时才压缩
errors address 转储时错误信息发送到指定的email地址
ifempty 即使是空文件也转储
mail address 把转储日志文件发送到指定email地址
olddir directory 转储后的日志文件放入指定的目录
prerotate postrotate 转储前或者后执行的脚本
rotate count 指定日志文件删除之前转储的次数 
size SIZE 当日志文件到达指定大小时才转储

(2)示例

/var/log/nginx/access.log{
    daily
    create 0644 root root
    rotate 5
    missingok
    compress
    noifempty
    postrotate 
        systemctl restart rsyslog > /dev/null
    endscript
}

#
postrotate
systemctl restart rsyslog > /dev/null
endscript

必须加上上面三句,因为在logrotate中,在rsyslog中还是持有这个文件句柄,会继续往原文件中写,即使已经被重命名了。


  转载请注明: Joah rsyslog

 上一篇
DokuWiKi DokuWiKi
DokuWIKIDokuWIKI是一个用途多样的开源WIKI软件,并且不需要数据库。 一、DokuWIKI配置文件acl.auth.php.dist acl.auth.php的默认发布 acronyms.conf 用于定义首字母缩写词 d
2019-03-12
下一篇 
openvpn openvpn
一、OpenVPNOpenVPN的技术核心是虚拟网卡,它是由一个底层编程技术实现的一个驱动软件,安装之后多出一块网卡。 OpenVPN提供了tun和tap两种工作模式。tap模式是桥接模式,通过软件在系统中模拟一个tap设备,一个二层设备,
2019-02-20