首页 > 代码库 > rsyslog

rsyslog

为了使得应用程序不需要自身实现日志记录的功能,linux实现了系统日志服务。Rsyslog是syslog的升级版本, 其在RHEL5的版本中, 名称为syslog.在RHEL6/7其升级为Rsyslog。

Rsyslog的特性:
支持多线程
支持加密的方式记录传输远程主机日志同时支持tcp/udp
将日志可存储在mysql,pgsql,oracle等数据库管理系统中,便于筛选查询
强大的自定义过滤器,实现过滤日志信息中任何部分内容,实现选择性记录
自定义输出格式

syslog中含有两个服务进程,sysylogd 用户空间记录日志,klogd 内核日志记录。rsyslog中统一为syslogd

但是在一些访问并发量大的应用程序,是自身实现日志记录功能的。如httpd就是应用程序自己完成日志记录功能。

对于日志产生量巨大的服务程序,无论是存储在磁盘还是数据库都(插入新数据都要查找所有是否满足关系约束)不合适,所以一般基于分布式存储,或者非关系型数据库。

强大的日志收集及展示平台ELK:elasticsearch(存储、分析),logstash(收集),kibana(前端展示)

facility

一个主机上有多个程序都需要记录日志,对这些程序按照一定的定义进行归类,通过统一的管道向rsyslog发送日志。这样rsyslog就不需要单独处理每种应用程序的日志,分类记录提高速率。这样的收集管道叫做日志生成器(facility),收集到的日志按照级别(priority)记录在不同处。

facility:auth authpriv cron daemon kern lpr mail mark news security syslog user uucp local0~local7(自定义)

技术分享

priority:debug  info   notice   warning(warn)   error(err)   crit   alert  emerg

技术分享

配置文件

在配置文件/etc/rsyslog.conf中定义哪个facility的哪个级别记录在何处。使用格式:facility.priority  target

priority:

* : 所有级别

none : 没有级别,不记录

PRIORITY : 此级别以及高于此级别的所有级别

=PRIORITY : 仅此级别

!PRIORITY:在此级别之外的其他级别

target:指定日志记录的位置,有以下几种方式。

文件: 记录日志事件于指定的文件中,通常应用位于/var/log目录下,文件路径之前的"-"表示异步写入

用户: 将日志事件通知给指定的用户, 是通过将信息发送给登陆到系统上的用户的终端上

日志服务器: 使用@host,把日志送往指定的服务器主机 。host : 即日志服务器地址,默认监听在tcp/udp的514端口,@@host表示用tcp

管道: |COMMAND

关系型数据库: 例如: ommysql:localhost:Syslog:log:log

用户: 将日志事件通知给指定的用户, 是通过将信息发送给登陆到系统上的用户的终端上。* 表示所有登陆到系统上的用户

-  :表示异步写入

~  :表示丢弃

远程日志服务

rsyslog服务器:加载模块,打开监听即可。

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

模块名称 imXXX表示输入模块,omXXX表示输出模块。

日志记录在mysql中

rsyslog支持将日志存储于MySQL服务器中:
1)安装配置好mysql数据库服务;
2)安装rsyslog-mysql包;
3)创建rsyslog依赖的数据库:
    #mysql < /usr/share/doc/rsyslog-5.8.10/createDB.sql
4)配置rsyslog启用模块
    在#### Modules #####启用模块:
    $ModLoad ommysql
5)在####rules####段中定义记录日志信息于数据库中
    facility.priority :ommysql:SERVER_IP,DATABASE,USERNAME,PASSWORD

图形展示日志

下载loganalyzer软件包

# yum -y install httpd php php-mysql php-gd
# tar xf loganalyzer-3.6.5.tar.gz
# mkdir /var/www/html/loganalyzer
# cp loganalyzer-3.6.5/src/* /var/www/html/loganalyzer/
# cp loganalyzer-3.6.5/contrib/* /var/www/html/loganalyzer/
# cd /var/www/html/loganalyzer/
# chmod +x configure.sh secure.sh
# ./configure.sh
# ./secure.sh
# chmod 666 config.php
# chown -R apache.apache ./*

通过URL访问并配置http://host/loganalyzer

 

日志相关命令

/var/log/dmesg  系统启动时的日志信息  kern.* /dev/console 即dmesg命令

/var/log/wtmp  成功登陆日志,即last命令

/var/log/btmp  失败登陆日志,即lastb命令

过滤保存指定的日志

基于设施/优先级的过滤器(如:  mail.info         /var/log/maillog)
基于属性的过滤器(如:  :msg, contains, "message want to be dropped"  ~  #将一个在一直写日志的kernel报错,把包含这条报错信息的内核日志丢弃)
基于表达式的过滤器(使用了rsyslog自定义的脚本语言RainerScript构建复杂的filter)
关于日志过滤器及模板的使用可以查看Linux环境下使用rsyslog管理日志

参考:Linux日志rsyslog      rsyslog和logrotate

rsyslog