Linux中的系统日志(Rsyslog)
一、实验环境 | |||
---|---|---|---|
主机名 | 系统 | 网络适配器 | IP地址 |
servera | rhel9 | NAT模式 | 172.25.254.11/24 |
serverb | rhel9 | NAT模式 | 172.25.254.22/24 |
二、Rsyslog的基本参数
(1)安装rsyslog
(2)rsyslog的服务名称
(3)rsyslog的主配置文件
rsyslog
的主配置文件通常位于 /etc/rsyslog.conf
,并包含其他子配置(如 /etc/rsyslog.d/*.conf
)。
(4)tcp/udp的514端口(默认未开启)
在 rsyslog 中,TCP/UDP 的 514 端口默认未开启,若要开启可通过修改 rsyslog 配置文件来实现,具体操作如下:
1. 打开 rsyslog 配置文件,命令如下:
vim /etc/rsyslog.conf
2. 在文件中添加以下内容以启用 UDP 514 端口监听:
module(load="imudp")
input(type="imudp" port="514")
3. 添加以下内容以启用 TCP 514 端口监听:
module(load="imtcp")
input(type="imtcp" port="514")
4. 保存并关闭配置文件,然后重启 rsyslog 服务使配置生效,命令如下:
systemctl restart rsyslog
此外,还需注意检查防火墙设置,确保防火墙允许 TCP 和 UDP 的 514 端口流量通过,否则可能无法正常使用该端口进行日志传输。
三、自定义日志路径
默认日志路径
/var/log/boot.log #系统启动信息
/var/log/cron #系统中周期化任务日志
/var/log/maillog #邮件日志
/var/log/messages #服务常规信息,服务启动报错
/var/log/secure #系统认证日志
如何更改日志存放路径
#1.设置日志存储位置为/var/log/timinglee[root@servera ~]# vim /etc/rsyslog.conf
#### RULES ##### Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console#下一行命令的作用是,所有类型的所有级别日志存放到/var/log/timinglee 第一个*标识日志类型 第二个*标识日志级别
*.* /var/log/timinglee[root@servera ~]# systemctl restart rsyslog.service#测试1:
[root@servera ~]# > /var/log/timinglee #清空日志文件
[root@servera ~]# logger test message #生成测试日志的内容
[root@servera ~]# cat /var/log/timinglee #查看日志内容
Jul 14 12:09:09 servera root[4118]: test message#2.设定采集日志的种类,(把系统中除服务认之外的日志记录在/var/log/timinglee)
[root@servera ~]# vim /etc/rsyslog.conf
#### RULES ##### Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console#authpriv.none 的作用是指定服务认证类型的日志不采集
*.*;authpriv.none /var/log/timinglee#测试2:
[root@serverb ~]# ssh -l root 172.25.254.11
#默认在/var/log/timinglee中有认证信息
[root@servera ~]# tail -f /var/log/timinglee
Jul 14 12:09:09 servera root[4118]: test message
Jul 14 12:15:15 servera sshd[4155]: Accepted password for root from 172.25.254.22 port 41582 ssh2
Jul 14 12:15:15 servera systemd-logind[870]: New session 6 of user root.
Jul 14 12:15:15 servera systemd[1]: Started Session 6 of User root.
Jul 14 12:15:15 servera sshd[4155]: pam_unix(sshd:session): session opened for user root(uid=0) by root(uid=0)
Jul 14 12:15:15 servera systemd[1]: Starting Hostname Service...
Jul 14 12:15:15 servera systemd[1]: Started Hostname Service.
Jul 14 12:15:45 servera systemd[1]: systemd-hostnamed.service: Deactivated successfully.#重启rsyslog服务,等配置生效后,再次进行ssh登录
[root@servera ~]# > /var/log/timinglee
[root@servera ~]# systemctl restart rsyslog.service
[root@serverb ~]# ssh -l root 172.25.254.11
[root@servera ~]# tail -f /var/log/timinglee
Jul 14 12:21:53 servera rsyslogd[4297]: [origin software="rsyslogd" swVersion="8.2310.0-4.el9" x-pid="4297" x-info="https://www.rsyslog.com"] start
Jul 14 12:21:53 servera systemd[1]: Started System Logging Service.
Jul 14 12:21:53 servera rsyslogd[4297]: imjournal: journal files changed, reloading... [v8.2310.0-4.el9 try https://www.rsyslog.com/e/0 ]
Jul 14 12:22:00 servera systemd[1]: session-7.scope: Deactivated successfully.
Jul 14 12:22:00 servera systemd-logind[870]: Session 7 logged out. Waiting for processes to exit.
Jul 14 12:22:00 servera systemd-logind[870]: Removed session 7.
Jul 14 12:22:03 servera systemd-logind[870]: New session 8 of user root.
Jul 14 12:22:03 servera systemd[1]: Started Session 8 of User root.
Jul 14 12:22:04 servera systemd[1]: Starting Hostname Service...
Jul 14 12:22:04 servera systemd[1]: Started Hostname Service.
tail -f
是 Linux 系统中一个非常实用的命令,用于实时监控文件的更新内容。它会持续跟踪文件的变化,并在文件有新内容添加时立即显示出来,特别适合查看正在写入的日志文件或实时数据流。
测试1:
测试2:
日志类型
auth #用户认证,比如用户登录系统
authpriv #服务认证,比如ssh远程登录
cron #时间任务
kern #内核类型
mail #邮件
news #系统更新信息
user #用户
日志级别
none #不采集
debug #程序排错信息
info #程序常规运行信息
notice #重要信息的普通日志
waring #程序警告
err #程序报错
crit #严重级别会导致系统软件不能正常工作
alert #系统中立即要更改的信息
emerg #系统的严重问题日志
四、日志同步
在企业中,服务器系统数量不唯一,那多个操作系统对于日志的查询分析难度和时效性非常大,为了解决此问题,我们可以把所有主机的日志同步到一台主机中来进行集中存储。
1.设定日志接收服务器servera
#这里我没有加载tcp模块,只使用了udp模块来作为示例
[root@servera ~]# vim /etc/rsyslog.conf
module(load="imudp") # needs to be done just once #加载日志接收模块
input(type="imudp" port="514") #指定模块端口[root@servera ~]# systemctl restart rsyslog.service#测试:
[root@servera ~]# netstat -antlupe | grep rsyslog
udp 0 0 0.0.0.0:514 0.0.0.0:* 0 45647 4297/rsyslogd
udp6 0 0 :::514 :::* 0 45648 4297/rsyslogd#这里可以选择关闭防火墙,也可以让防火墙开放udp和tcp的514端口
[root@servera ~]# systemctl disable --now firewalld
servera 的rsyslog主配置文件的配置:
2.日志发送方serverb
[root@serverb ~]# vim /etc/rsyslog.conf
*.* @172.25.254.11 # @标识udp协议[root@serverb ~]# systemctl restart rsyslog.service
serverb 的rsyslog主配置文件的配置:
3.测试
[root@servera ~]# > /var/log/messages
[root@serverb ~]# > /var/log/messages[root@servera ~]# tail -f /var/log/messages[root@serverb ~]# logger test message
#只要在servera中看到日志出现标识日志同步成功#servera中同步出现了一条serverb的日志说明同步成功了
[root@servera ~]# tail -f /var/log/messages
Jul 14 12:36:40 serverb root[3503]: test message
五.如何定义日志的采集格式
#编辑日志采集格式模板
[root@servera ~]# vim /etc/rsyslog.conf
$template CUSTOM_LOGFRMAT,"%FROMHOST-IP% %timegenerated% %syslogtag% %msg%\n"*.*;authpriv.none /var/log/timinglee;CUSTOM_LOGFRMAT#如何向修改默认日志格式
[root@servera ~]# vim /etc/rsyslog.conf
#module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
module(load="builtin:omfile" Template="CUSTOM_LOGFRMAT")[root@servera ~]# systemctl restart rsyslog.service#####对于参数的解释#########
#%FROMHOST-IP% #生成日志的ip
#%timegenerated% #生成日志的时间
#%syslogtag% #生成日志的程序
#%msg% #生成日志的内容
#\n #换行
原本的日志采集格式模板:
修改后的日志采集格式模板:
测试:
经过测试发现日志采集的格式已经改变,说明测试成功