rsyslog配置相关

配置文件:

/etc/rsyslog.conf,/etc/rsyslog.d/*.conf

库文件:

/lib64/rsyslog/*.so

配置文件格式:

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

facility 从功能或程序上对日志进行归类

auth, authpriv, cron, daemon,ftp,kern, lpr, mail,news, security(auth), user, uucp, local0-local7, syslog
auth        pam产生的日志 
authpriv    ssh,ftp等登录信息的验证信息 
cron        计划任务相关 
kerl        内核 
lpr         打印 
mail        邮件 
syslog      Rsyslog服务内部信息,时间标识 
news        新闻组 
user        用户程序产生的相关信息 
uucp        unix to unix copy;Unix主机之间相关的通信 
local 0-7   自定义的日志设备

其它的日志文件
/var/log/secure:系统安全日志,文本格式,应周期性分析
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
/var/log/dmesg:系统引导过程中的日志信息,文本格式
        文本查看工具查看
        专用命令dmesg查看
/var/log/messages :系统中大部分的信息
/var/log/anaconda : anaconda的日志

Priority 优先级别,从上到下级别越来越高

7 debug 调试信息的日志,日志信息最多 
6 info 一般信息的日志,最常用 
5 notice 最具有重要性的普通条件的信息 
4 warn 警告级别 
3 err 错误级别,阻止某个功能或者模块不能正常工作的信息 
2 crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息 
1 alert 需要立刻修改的信息 
0 emerg 内核崩溃等严重信息

如果在日志中设定了比如warn,那么日志将会记录warn(含)之后的级别日志

配置语法:

日志类别.日志级别 日志文件
cron.*                                                  /var/log/cron
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
mail.*                                                  -/var/log/maillog
local2.*                                                root

语法分别2部分
前面的部分

.       分隔日志类别.日志级别
*       全部
noen    不记录
,       指定的facility列表
;       语句分隔

后面文件路径的部分
-       异步写磁盘(非实时)
user:将日志事件通知给指定的用户,* 表示登录的所有用户。su - 切换用户无法接收
@host,把日志送往至指定的远程服务器记录
| COMMAND,管道,转发给其它命令处理

日志管理journalctl

Centos 7 Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/etc/systemd/journald.conf

查看所有日志(默认情况下 ,只保存本次启动的日志)

journalctl

查看内核日志(不显示应用日志)

journalctl -k

查看系统本次启动的日志

journalctl -b
journalctl -b -0

查看上一次启动的日志(需更改设置)

journalctl -b -1

查看指定时间的日志

journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2017-01-10" --until "2017-01-1103:00"
journalctl --since 09:00 --until "1 hour ago"

显示尾部的最新10行日志

journalctl -n

显示尾部指定行数的日志

journalctl -n 20

实时滚动显示最新日志

journalctl -f

查看指定服务的日志

journalctl /usr/lib/systemd/systemd

查看指定进程的日志

journalctl _PID=1

查看某个路径的脚本的日志

journalctl /usr/bin/bash

查看指定用户的日志

journalctl _UID=33 --since today

查看某个 Unit 的日志

journalctl -u nginx.service
journalctl -u nginx.service --since today

实时滚动显示某个 Unit 的最新日志

journalctl -u nginx.service -f

合并显示多个 Unit 的日志

journalctl -u nginx.service -u php-fpm.service --since today

查看指定优先级(及其以上级别)的日志,共有8级

0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
journalctl -p err -b

日志默认分页输出,--no-pager 改为正常的标准输出

journalctl --no-pager

以 JSON 格式(单行)输出

journalctl -b -u nginx.service -o json

以 JSON 格式(多行)输出,可读性更好

journalctl -b -u nginx.serviceqq -o json-pretty

显示日志占据的硬盘空间

journalctl --disk-usage

指定日志文件占据的最大空间

journalctl --vacuum-size=1G

指定日志文件保存多久

journalctl --vacuum-time=1years

Logrotate日志存储

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根
据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行

配置文件

/etc/logrotate.conf

配置项说明:

指定以时间为转储周期,与文件大小周期互斥

daily   每天
weekly  每周
monthly 第月

日志转储后多少天被删除

maxage 60

指定以文件大小为转储周期,与时间周期互斥

maxsize size
minsize  size

指定日志文件删除之前滚动的次数,每个转储周期为1次

rotate 4    保留4次
rotate 0    没有日志

达到多大时转储日志

size 100k
size 100M
size 100G

转储周期后使用指定的文件模式创建新的日志文件

create      创建空的文件
nocreate    不建立新的日志文件

create mode owner group  创建指定信息的空日志文件
create 600 root group1
create owner group       创建指定信息的空日志文件

对于空的日志文件的处理方法

ifempty     即使是空文件也转储,是缺省选项
notifempty  如果是空文件的话,不转储

日志不存在时的处理方法:

Missingok   如果日志不存在,提示错误
Nomissingok 如果日志不存在,继续下一次日志,不提示错误

旧的日志文件被转储后的后缀

dateext     日期格式:YYYYMMDD,使用dateformat指定的方法
dateformat format_string   指定格式。只支持%Y %m %d %s  默认 -%Y%m%d
nodateext    没有日期后缀,覆盖dateext选项

压缩方法:

compress        使用gzip
nocompress      不压缩
delaycompress   和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储并压缩

对于正在打开的日志的处理方法

copytruncate    把当前日志备份并截断
ocopytruncate   备份日志文件但是不截断

转储通知方法:

mail hunk    把转储的日志文件发送到指定的E-mail 地址
nomail              转储时不发送日志文件
errors hunk  转储时的错误信息发送到指定的E-mail 地址

转储目标路径

olddir directory    转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir            转储后的日志文件和当前日志文件放在同一个目录下

转储日志时指定操作

prerotate/endscript     在转储前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript    在转储后需要执行的命令可以放入这个对,这两个关键字必须单独成行

子配置文件路径

include /etc/logrotate.d

更多的选项请man logrotate

具体定义规则示例:

/var/log/wtmp {            > 定义了/var/log/wtmp的日专业转储规则
    monthly                 > 以月为周期
    create 0664 root utmp   > 达到周期后以创建的方式产生新的日志文件,并指定权限和所有者与所有组
        minsize 1M          > 最小转发储条件为1M
    rotate 1                > 保留一份转储
}

/usr/local/httpd/*.logs{
    daily
    olddir old_logs
    create 0664 root root
    minsize 1M
    maxsize 10M
    rotate 2
    maxage 3
    mail root

}

可以在一个配置文件里定义多个日志规则
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

应用案例

其他应用程序调用rsyslog

1.先在/etc/rsyslog.conf中RULES语句块中定义规则
local0.*                                              /var/log/ssh.log

2.在其他应用程序中定义,这里以sshd服务为例

# vim /etc/ssh/sshd_config
SyslogFacility local0

#service restart rsyslog
#service restart sshd

向远程主机发送日志消息

1.远程主机加载模快并监听端口
# vim /etc/rsyslog.conf

启用UDP方式
$ModLoad imudp
$UDPServerRun 514

启用TCP方式
$ModLoad imtcp
$InputTCPServerRun 514

2.#systemctl restart rsyslog.service

3.在发送日志主机上填写规则
# vim /etc/rsyslog.conf
local0.*                                                @192.168.5.103  > 使用UDP
local0.*                                                @@192.168.5.103 > 使用TCP

4. #service rsyslog restart

5.测试
#logger -p local0.info  "test logs"

6.在远程主机是可以看到消息了   
#tailf /var/log/messages
Mar  5 19:53:15 6-web-1 root: test logs

将日志存放于远程主机的Mysql中

环境说明

主机 描述 IP
Centos 6 Mysql数据库 192.168.5.102
Centos 7 rsyslog服务器 192.168.5.103

1.安装Mysql

参考CentOS 6.9 自定义单实例 二进制方式 安装mysql5.7.21

2.安装用于rsyslog连接mysql的模块

在Centos 7
# yum install rsyslog-mysql

#rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql

因为这里使用了不同的系统,yum安装的rsyslog-mysql版本不同,此时,必须将本机安装的脚本传送到mysql所在主机上执行,当然,如果可以远程连接mysql服务器也是可以的

#scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 192.168.5.102:/app/

3.创建用于rsyslog的数据库

在Centos 6
mysql> source /app/mysql-createDB.sql;
Query OK, 1 row affected (0.09 sec)

Database changed
Query OK, 0 rows affected (0.10 sec)
Query OK, 0 rows affected (0.03 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Syslog             |

4.创建用于访问数据库的账户

在Centtos 6
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on Syslog.* to 'rsyslog'@'192.168.5.103' identified by '12345678';
Query OK, 0 rows affected, 1 warning (0.06 sec)

5.测试远程连接mysql

在Centos 7

#mysql -ursyslog -h192.168.5.102 -p -D Syslog                > 数据库注意大小写
Enter password: 
MySQL [Syslog]>   成功

6.配置rsyslog

在Centos 7

#vim /etc/rsyslog.conf
#### MODULES #### 中
$ModLoad ommysql

#### RULES ####中
语法格式:
#:ommysql:数据库主机,数据库名,数据库用,数据库密码

*.info;mail.none;authpriv.none;cron.none                :ommysql:192.168.5.102,Syslog,rsyslog,12345678   > 注意大小写

重启rsyslog服务
#systemctl restart rsyslog

7.验证

在Centos 6

mysql> select ID,ReceivedAt,FromHost,Message,InfoUnitID from SystemEvents;

image

基于LAMP + Loganalyzer 日志管理

1.LAMP实现

参考Centos 6.9 编译安装 LAMP + Zend OPcach

2.官网下载loganalyzer

http://loganalyzer.adiscon.com/ ,可能需要科学上网。

3.复制loganalyzer源码目录至网站指定目录

# tar xvf loganalyzer-4.1.6.tar.gz
# cp -a loganalyzer-4.1.6/src/ /app/www/virtualhost/log
# cd /app/www/virtualhost/log
# touch config.php && chmod 666 config.php

4.安装loganalyzer

http://192.168.5.102/log/

image

image

image

image
image

image

5.修改权限

# chmod 644 config.php

效果演示

image

image

这个属于小型的日志管理WEB界面,数据量不大的时候,还凑合着。后面还有更加专业的日志引擎。