一、什么是rsyslog
是一个功能强大的和高度配置化的系统日志守护进程,可以配置成日志服务器和日志客户端两种环境。作为日志服务器,可以从其他主机收集日志;作为客户端,可以过滤并发送内部日志消息到本地文件或远程rsyslog服务器。
二、日志类型及等级
1.日志类型
类型 | 含义 |
---|---|
kern | 内核信息 |
user | 用户程序产生的相关信息 |
邮件系统信息 | |
daemon | 守护进程产生的信息 |
auth | pam认证系统信息 |
syslog | 日志系统自身信息 |
authpriv | ssh、ftp等登录信息 |
cron | 系统执行定时任务产生的信息 |
lpr | 打印相关信息 |
mark | 服务内部的信息,时间标识 |
uucp | Unix-to-Unix Copy 两个ynix之间的相关通信 |
local0-local7 | 保留,本地使用 |
2.日志等级
级别从低到高,记录信息越来越少
等级 | 含义 | |
---|---|---|
0 | debug | 包含详细的开发情报的信息,通常只在调试一个程序时使用 |
1 | info | 通用性信息,一般用来提供有用信息 |
2 | notice | 正常信息,但是较为重要,可能需要处理 |
3 | warning | 警告信息 |
4 | error/err | 错误信息,某个功能或者模块不能正常工作的信息 |
5 | crit | 严重级别,系统或整个软件不能正常工作的信息 |
6 | alert | 需要立刻修改的信息,如系统数据库被破坏,ISP连接丢失 |
7 | emerg | 紧急情况,内核奔溃等重要信息 |
none | 什么也不记录 |
三、搭建rsyslog
1.服务端
检查是否安装rsyslog
[root@work1 ~]# ps -ef | grep rsyslog
[root@work1 ~]# rsyslogd -v
编辑rsyslog配置文件,开启允许接收通过udp或者tcp转发来的日志
[root@work1 ~]# cat /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
可以全局添加配置模板,来单独接收远端传来的日志
[root@work1 ~]# cat /etc/rsyslog.conf
#### GLOBAL DIRECTIVES ####
$template RemoteLogs,"/var/log/rsyslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
*.* ?RemoteLogs
#创建相应目录
[root@work1 ~]# mkdir /var/log/rsyslog
重启服务
[root@work1 ~]# systemctl restart rsyslog.service
2.客户端
编辑配置文件,添加日志服务器的地址加端口,@是udp协议,@@是tcp协议
[root@work1 ~]# cat /etc/rsyslog.conf
#udp protocol
*.* @10.0.0.100:514
#tcp protocol
*.* @@10.0.0.100:514
重启服务
[root@work1 ~]# systemctl restart rsyslog.service
3.测试
客户端手动添加日志测试,服务端在日志文件查看
[root@node1 ~]# logger -t kern -p err "test00001"
四、rsyslog同步history日志
1.服务端配置
添加将local类型5的日志存放到/var/log/history.log
[root@work1 ~]# grep "local5" /etc/rsyslog.conf
local5.* /var/log/history.log
#创建相应文件
[root@work1 ~]# touch /var/log/history.log
#重启服务
[root@work1 ~]# systemctl restart rsyslog.service
2.客户端配置
添加将local类型5的日志发送到远程服务端
[root@node1 cron.d]# grep "local5" /etc/rsyslog.conf
local5.* @10.0.0.100:514
#重启服务
[root@node1 cron.d]# systemctl restart rsyslog.service
添加环境变量,用来实时输出history日志;如果想也收集服务端的history,服务端也进行配置
HISTFILESIZE 是历史文件中包含的最大行数
HISTSIZE 命令历史记录中要记住的命令数量
HISTTIMEFORMAT 添加时间戳
PROMPT_COMMAND 实时记录历史命令
[root@node1 cron.d]# vim /etc/bashrc
HISTFILESIZE=2000
HISTSIZE=2000
export HISTTIMEFORMAT="%F %T: "
#多个终端同时操作,避免覆盖,采用追加的方式
shopt -s histappend
#logger 的用法,-p指定输入消息日志级别;-t 指定标记记录;-i 记录进程id
export PROMPT_COMMAND='{ command=$(history 1 | { read x y; echo $y; }); logger -p local5.notice -t bash -i "user=$USER, ppid=$PPID, from=$SSH_CLIENT, pwd=$PWD, command: $command"; }'
#生效
[root@node1 cron.d]# source /etc/bashrc
3.测试
#客户端执行命令
[root@node1 ~]# touch file
#服务端验证,远端执行命令的详细信息已保存到history.log文件中
[root@work1 log]# cat history.log
2024-10-31T09:37:41+08:00 node1 bash[10441]: user=root,ppid=9001,from=10.0.0.1 49898 22,pwd=/root,command:20241031-093741: touch file