Linux日志系统-rsyslog

一、什么是rsyslog

是一个功能强大的和高度配置化的系统日志守护进程,可以配置成日志服务器和日志客户端两种环境。作为日志服务器,可以从其他主机收集日志;作为客户端,可以过滤并发送内部日志消息到本地文件或远程rsyslog服务器。

二、日志类型及等级

1.日志类型

类型 含义
kern 内核信息
user 用户程序产生的相关信息
mail 邮件系统信息
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容