为了使得应用程序不需要自身实现日志记录的功能,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