当前位置: 首页 > news >正文

Linux(1)rsyslog(1)基础使用

Linux之(1)rsyslog(1)基础使用

Author:Once Day Date:2025年10月27日

全系列文章请查看专栏: Linux Shell基础_Once_day的博客-CSDN博客。

漫漫长路,有人对你微笑过嘛…

参考文档:

  • Beginner Tutorials - rsyslog 8.2510.0 documentation

文章目录

      • Linux之(1)rsyslog(1)基础使用
        • 1. 概述
        • 2. 基础使用
          • 2.1 安装rsyslog
          • 2.2 rsyslog配置
          • 2.3 rsyslog默认配置
          • 2.4 日志流水线处理
          • 2.5 配置处理顺序
          • 2.6 远程远程日志服务器
        • 3. 日志回收

1. 概述

rsyslog是一个开源的、高性能的系统日志处理工具,负责收集、处理和存储系统日志信息。作为现代Linux系统中的标准日志解决方案,rsyslog在服务器管理和系统监控中扮演着至关重要的角色。

rsyslog由Rainer Gerhards于2004年创建,名称中的"r"代表"rocket-fast"(火箭般快速)。它的诞生源于对传统syslog系统的改进需求:

  • 历史渊源:Unix系统日志记录可追溯到20世纪80年代的BSD syslog协议,这是最初的系统日志标准。
  • syslogd的局限性:随着IT系统的复杂化,传统的syslogd在性能和功能上逐渐显露不足,特别是在处理大量日志和复杂网络环境方面。
  • 演进过程:rsyslog作为syslogd的继任者出现,最初保持向后兼容性的同时,逐步引入了现代化功能。

从最初的版本开始,rsyslog经历了多次重大更新,尤其是在v5、v7和v8版本中引入了模块化架构、高性能处理引擎和更多的集成能力,使其成为了今日广泛部署的日志处理解决方案。

rsyslog在企业和开源环境中广泛应用:

  • Linux发行版:目前大多数主流Linux发行版(如RHEL、Debian、Ubuntu、SUSE)都默认安装rsyslog作为系统日志服务。
  • 企业环境:从小型企业到大型数据中心,rsyslog被广泛用于日志集中化管理和分析。
  • 云计算平台:在各类云基础设施中,rsyslog常用于日志收集和转发至更高级的日志分析平台。
  • 物联网设备:由于其轻量级配置选项,rsyslog也被应用于资源受限的设备中。

rsyslog相比其他日志解决方案具有多方面的优势:

  1. 高性能:采用多线程设计,能够以极高的速度处理日志消息,在高负载情况下保持稳定性。
  2. 模块化架构:提供灵活的输入/输出模块系统,支持从多种来源收集日志并输出到不同目的地。
  3. 可靠传输:支持TCP传输和RELP协议,确保在网络不稳定情况下日志消息不丢失。
  4. 过滤能力:强大的过滤系统允许精确控制哪些日志被处理、存储或转发。
  5. 数据库整合:原生支持将日志直接写入MySQL、PostgreSQL等数据库系统。
  6. 加密安全:支持TLS加密,保护日志在传输过程中的安全。
  7. 配置灵活:从简单的基本配置到复杂的企业级设置,都能满足需求。
  8. 向后兼容性:完全支持传统syslog格式和协议,便于迁移。

在系统日志管理领域,rsyslog有几个主要竞争对手:

  • syslog-ng:与rsyslog相似,但在某些高级过滤和路由功能上有所不同。rsyslog通常在性能方面更具优势,而syslog-ng在某些配置灵活性上可能更胜一筹。
  • journald(systemd):较新的日志系统,采用二进制格式存储,与systemd紧密集成。虽然journald提供了更现代的查询接口,但rsyslog在跨平台兼容性和传统系统集成方面仍有优势。
  • Fluentd/Logstash:这些更现代的日志收集器专注于大规模数据收集和处理。虽然功能丰富,但在系统级别的稳定性和资源占用上,rsyslog仍然是更轻量级的选择。
  • NXLog:在跨平台环境中较为流行,特别是Windows系统。rsyslog主要在Unix/Linux环境中占据主导地位。

rsyslog从其诞生之初就致力于解决企业级日志管理的挑战,经过近二十年的发展,已经成为Linux生态系统中不可或缺的组件。它平衡了性能、可靠性和功能丰富性,使其成为从小型部署到大规模企业环境的理想选择。随着云计算和容器化技术的发展,rsyslog继续演进,保持其作为系统日志管理领域中坚力量的地位。

2. 基础使用
2.1 安装rsyslog

大多数现代Linux发行版已预装rsyslog,但如果没有,可以使用以下命令安装:

(1)Debian/Ubuntu系统

sudo apt update
sudo apt install rsyslog

(2)RedHat/CentOS/Fedora系统

sudo yum install rsyslog
# 或者使用dnf
sudo dnf install rsyslog

(3)验证安装

rsyslogd -v

确保服务已启动并设置为开机自启:

# 启动服务
sudo systemctl start rsyslog# 设置开机自启
sudo systemctl enable rsyslog# 检查服务状态
sudo systemctl status rsyslog

关于默认发行版配置:许多发行版会在 /etc/rsyslog.conf 中附带旧式(legacy-style)配置行(例如,*.* /var/log/syslog$FileCreateMode)。这种情况是正常的,且仍受支持。请勿重写发行版自带的文件,应在 /etc/rsyslog.d/*.conf 目录下添加你自己的规则。

可以执行一次模拟运行解析,在不启动第二个守护进程的情况下检查语法:

sudo rsyslogd -N1

应该会看到 rsyslogd: End of config validation run.,且没有错误信息。

发送一条测试消息,确保 rsyslog 正在本地处理日志:

logger -t tut01 "hello from rsyslog tutorial 01"
sudo tail -n 50 /var/log/syslog 2>/dev/null || sudo tail -n 50 /var/log/messages

应该能看到一条包含 “tut01” 和你的消息内容的记录。

如果测试步骤没有成功,下面是几种常见问题的排查方法:

  • 看不到日志 :检查服务状态:systemctl status rsyslog,通过sudo systemctl restart rsyslog来激活命令。

  • 语法错误:运行配置检查:sudo rsyslogd -N1,这个命令会验证rsyslog配置文件的语法,显示第一个错误所在的文件和行号。修复该错误后重新运行检查。

  • 看不到日志:不同的Linux发行版可能使用不同的日志文件:尝试检查/var/log/syslog(Debian/Ubuntu),尝试检查/var/log/messages(RedHat/CentOS),确保使用了上述的logger命令发送测试消息。

  • 权限问题:如果创建了自定义日志路径,请确保rsyslog服务用户对这些目录有写入权限:

    sudo chown syslog:adm /path/to/logdir
    sudo chmod 750 /path/to/logdir
    
2.2 rsyslog配置

编写一个极简的 RainerScript 配置,将特定测试消息记录到独立文件中,使用logger命令进行测试,并通过tail -f命令验证,该过程中不修改发行版自带的输入配置

使用现代 RainerScript 语法创建首个自定义 rsyslog 配置。需要添加一条简单规则,仅将测试消息写入新文件,避免重复记录所有系统日志。

重要提示:大多数发行版已预先配置好输入模块(例如 Ubuntu 系统通常使用imjournal,有时也用imuxsock)。请勿在此处加载输入模块,只需在/etc/rsyslog.d/目录下添加一条安全、简洁的规则即可。

(1)创建新的配置片段:创建文件/etc/rsyslog.d/10-first.conf,并写入以下内容:

# Write only messages tagged "tut02" to a custom file
if ($programname == "tut02") then {action(type="omfile" file="/var/log/myfirst.log")# no 'stop' here: allow normal distro handling to continue
}

为何采用这种方式?

  • 不改动输入配置(发行版已完成预设);
  • 按标记(tag)过滤,仅让测试消息写入新文件,保持文件整洁;
  • 不使用stop指令,确保常规日志处理流程不受影响。

(2)重启 rsyslog 服务:

sudo systemctl restart rsyslog
systemctl status rsyslog --no-pager

(3)发送测试消息,使用logger命令生成一条标记为tut02的消息:

logger -t tut02 "hello from rsyslog tutorial 02"

(4)验证结果,查看新生成的日志文件:

sudo tail -f /var/log/myfirst.log

应当能看到测试消息。系统常规日志(如 Ubuntu 的/var/log/syslog或类 RHEL 系统的/var/log/messages)会保持原有功能不变。

如果测试步骤没有成功,下面是几种常见问题的排查方法:

(1)未创建日志文件

  • 检查服务状态:执行systemctl status rsyslog
  • 语法检查:执行sudo rsyslogd -N1
  • 确认配置片段路径正确:需为/etc/rsyslog.d/10-first.conf

(2)文件已存在但无消息

  • 确认使用完全一致的标记:需执行logger -t tut02 "..."(标记必须为tut02);
  • 验证过滤规则匹配:配置中检查的是$programname == "tut02"(确保变量与标记一致)。

(3)权限拒绝(Permission denied):

  • 确保 rsyslog 有权写入/var/log/目录(默认由 root 用户所有,通常无需额外设置);
  • 若使用自定义路径,需按需调整所有权 / 权限(通过sudo chownchmod命令)。

(4)Ubuntu 系统专属说明:Ubuntu 通常默认使用imjournal模块,此配置规则可正常兼容。若此前手动尝试加载过输入模块,请删除相关配置行并重启服务。

2.3 rsyslog默认配置

了解发行版默认的 rsyslog 配置文件,以及如何在不破坏原有设置的前提下,使用现代 RainerScript 语法安全地添加自定义规则。

  • 识别并理解默认配置文件(如/etc/rsyslog.conf)中的两种语法:旧式语法和现代 RainerScript 语法。
  • 学习如何在不修改主配置文件的情况下,通过/etc/rsyslog.d/目录添加自定义规则。
  • 掌握配置文件的加载顺序,避免规则冲突。

rsyslog 支持两种主要配置语法,二者可以共存:

  • 旧式语法(Legacy Syntax):基于类似 Syslog-ng 的传统格式,常见于 older 配置文件(如*.* /var/log/syslog)。

    *.* /var/log/syslog
    $FileCreateMode 0640
    
  • 现代语法(Modern Syntax):即 RainerScript,采用更灵活的脚本化格式(如if ($programname == "sshd") then action(...))。

    module(load="imuxsock")
    module(load="imjournal")
    

发行版的默认配置(如/etc/rsyslog.conf)通常混合使用这两种语法,这是正常且受支持的。切勿直接修改此文件,因为系统更新可能会覆盖你的更改。

Ubuntu/Debian 系统通常会加载imjournal模块(该模块从 systemd 的日志服务(journal)中读取日志)。

RHEL、CentOS、Rocky、Alma 等系统则常使用imuxsock模块(从传统的 syslog 套接字中读取日志)。

部分发行版会同时加载这两个模块,以实现最大程度的兼容性。

通常不应在自定义配置片段中再次加载这些相同的输入模块,发行版已经预先配置好它们了。

但如果需要使用一种新的输入类型(例如,使用imfile模块监控文本文件,或使用imtcp模块通过 TCP 接收日志),则需要自行加载对应的模块。添加新的输入模块是正常操作;重新加载系统已配置好的输入模块则完全没有必要。

保持/etc/rsyslog.conf文件原样不变。不要试图 “现代化改造” 其中的旧式配置行,rsyslog 能够正常识别并兼容这些语法。

/etc/rsyslog.d/*.conf目录下,使用 RainerScript 语法添加你的自定义规则。示例如下:

# 将所有来自“local3”设施的日志消息记录到自定义日志文件中
if ($syslogfacility-text == "local3") then {action(type="omfile" file="/var/log/myapp.log")
}

完全没有必要去转换旧式配置行。虽然可以选择在未来逐步迁移到现代语法,但 rsyslog 支持新旧语法混合使用,二者可正常协同工作。

2.4 日志流水线处理

理解 rsyslog 的核心架构:日志通过输入模块进入系统,由规则集进行处理,最终通过一个或多个操作(输出) 完成处理。这个流程被称为日志流水线(log pipeline),历史上也称为消息流水线(message pipeline)。

在这里插入图片描述

三大核心组件:

  • 输入(Inputs):日志的接入方式。例如:imuxsock(syslog 套接字)、imjournal(systemd 日志服务)、imfile(文本文件)。
  • 规则集(Rulesets):中间处理逻辑。包含过滤器和操作,决定每条日志消息的处理方式。
  • 操作(Actions):日志的输出去向。例如:写入文件(omfile)、转发至远程 syslog(omfwd),或发送至 Kafka 等现代目标(omkafka)。

输入模块将日志消息传入 rsyslog,每条消息都会进入一个规则集,由规则集决定其处理方式。操作作为日志的目的地,默认按顺序串行执行。可通过为操作配置独立队列或工作线程实现并发处理,但这属于高级主题。

添加第二个目标,将标记为tut04的日志消息同时写入文件并转发:

if ($programname == "tut04") then {action(type="omfile" file="/var/log/mypipeline.log")action(type="omfwd" target="logs.example.com" port="514" protocol="udp")
}

重启服务并测试:

sudo systemctl restart rsyslog
logger -t tut04 "hello from rsyslog tutorial 04"
sudo tail -n 20 /var/log/mypipeline.log

注意:日志转发需要另一台机器或另一个 rsyslog 实例监听指定端口。若目标不可达且未配置操作队列,rsyslog 会重试发送,可能在下次尝试前短暂出现 “卡住” 的现象。

操作顺序与配置执行顺序:

  • 操作按配置中出现的顺序串行执行。
  • 靠前的操作可在后续操作执行前修改或丢弃日志消息。
  • /etc/rsyslog.d/目录下的配置片段按字典顺序处理(例如,10-first.conf会在50-extra.conf之前执行)。
  • 可为操作配置独立队列(action.queue.*),或使用单独的规则集 / 工作线程,从而实现并发处理。
2.5 配置处理顺序

了解 rsyslog 如何按顺序处理配置、/etc/rsyslog.d/目录下的文件顺序为何重要,以及靠前的规则如何影响后续规则。

理解 rsyslog 会按顺序执行规则,操作的顺序和包含文件的顺序都可能改变最终结果。

  • 同一文件中的规则从上到下执行。
  • /etc/rsyslog.d/目录下的文件按字典顺序处理(例如,10-first.conf会在50-extra.conf之前执行)。
  • 靠前的规则可丢弃或修改日志消息,导致后续规则可能完全无法 “看到” 这些消息。

创建文件/etc/rsyslog.d/10-drop.conf

if ($programname == "tut05") then {stop    # 丢弃这些消息,不再执行后续操作
}

创建文件/etc/rsyslog.d/20-log.conf

if ($programname == "tut05") then {action(type="omfile" file="/var/log/tut05.log")
}

重启 rsyslog 服务:

sudo systemctl restart rsyslog

发送测试消息:

logger -t tut05 "hello from tutorial 05"

/var/log/tut05.log文件不会被创建。因为第一个配置片段(10-drop.conf)在日志记录规则执行前就已丢弃了消息。

重命名文件以反转执行顺序:

sudo mv /etc/rsyslog.d/10-drop.conf /etc/rsyslog.d/50-drop.conf
sudo systemctl restart rsyslog
logger -t tut05 "hello after reorder"

此时,/var/log/tut05.log文件会包含这条测试消息,因为日志记录规则(20-log.conf)先于丢弃规则(50-drop.conf)执行。

如果测试步骤没有成功,下面是几种常见问题的排查方法:

  • 仍未生成日志文件:通过以下命令检查配置片段的顺序:ls -1 /etc/rsyslog.d/。确保20-log.conf50-drop.conf之前。
  • 文件已存在但内容为空:确认使用了正确的标记(tag):执行的命令需为logger -t tut05 "…"(标记必须是tut05)。
  • 语法错误:验证配置语法:执行sudo rsyslogd -N1
2.6 远程远程日志服务器

配置 rsyslog 通过 UDP 接收来自另一台机器的日志。使用专用规则集,确保只有远程消息会写入/var/log/remote.log

搭建一个基础的远程日志接收器。将配置 rsyslog 监听 UDP/514 端口,并使用独立规则集处理传入消息,确保本地日志不受影响。

重要提示:本教程需要两台系统(或两个容器 / 虚拟机)。一台作为服务器(接收器),另一台作为客户端(发送器)。若没有第二台机器,转发操作可能会出现 “卡住” 的现象,因为 rsyslog 会不断重试。

(1)配置服务器(接收器),在接收系统上,创建/etc/rsyslog.d/10-receiver.conf文件:

# 加载UDP输入模块
module(load="imudp")# 专门用于通过此UDP监听器接收的消息的规则集
ruleset(name="rs-from-udp") {action(type="omfile" file="/var/log/remote.log")# 此规则集仅用于下面配置的UDP输入# 本地系统日志继续使用发行版默认配置
}# 将UDP输入关联到上面的规则集
input(type="imudp" port="514" ruleset="rs-from-udp")

重启 rsyslog 服务:

sudo systemctl restart rsyslog
systemctl status rsyslog --no-pager

(2)配置客户端(发送器),在发送系统上,创建/etc/rsyslog.d/10-forward.conf文件:

# 通过UDP将所有消息转发到服务器
action(type="omfwd"target="server.example.com"   # 替换为服务器的主机名或IPport="514"protocol="udp"
)

重启客户端的 rsyslog 服务:

sudo systemctl restart rsyslog

(3)测试配置,在客户端发送一条测试消息:

logger -t tut06 "hello from the client"

在服务器上检查远程日志文件:

sudo tail -n 20 /var/log/remote.log

应该能看到这条测试消息。由于 UDP 输入使用了独立规则集,这里只会出现来自客户端的消息。

如果测试步骤没有成功,下面是几种常见问题的排查方法:

  • 消息未送达:验证服务器是否在监听 UDP/514 端口,

    sudo ss -ulpn | grep ':514'
    

    检查防火墙规则(ufw 或 firewalld),确保允许 UDP/514 端口通信。

    确认客户端配置中的target=参数对应的主机名 / IP 正确(可尝试使用 IP 地址排除 DNS 问题)。

  • 消息仅出现在客户端:测试网络连通性,

    ping server.example.com
    

    如果 ICMP/ping 被阻断,可使用traceroute命令检查,或检查防火墙 / 网络地址转换(NAT)设置。

  • 写入/var/log/remote.log时出现 “权限拒绝”,确保 rsyslog 有权限写入/var/log/目录。测试环境中,/var/log/目录下由 root 用户拥有的文件通常可以正常写入。

  • 服务无法启动,在两台系统上验证配置:

    sudo rsyslogd -N1
    
3. 日志回收

使用logrotate配置日志文件回收:

sudo nano /etc/logrotate.d/myapp

添加以下内容:

/var/log/myapp.log {daily                   # 每日轮转rotate 7                # 保留7个备份missingok               # 如果日志文件不存在,不报错notifempty              # 如果日志为空,不轮转compress                # 压缩旧日志delaycompress           # 延迟压缩直到下次轮转postrotateinvoke-rc.d rsyslog rotate >/dev/null 2>&1 || trueendscriptcreate 0640 syslog adm  # 创建新日志文件并设置权限
}

可以根据需要调整参数:

  • daily/weekly/monthly:轮转频率。
  • rotate N:保留N个旧日志备份。
  • size 100M:当日志达到指定大小时轮转(可替代时间设置)。
http://www.dtcms.com/a/545115.html

相关文章:

  • Arbess零基础学习,安装与配置
  • 温州网站建设seo跨境电商平台shopee
  • Rust——Tokio的多线程调度器架构:深入异步运行时的核心机制
  • webpack - 常用的 CSS 加载器(webpack与其常见loader加载器使用方式)
  • PyTorch2 Python深度学习 - 张量(Tensor)的定义与操作
  • 微信小程序开发案例 | 通讯录小程序(上)
  • 做网站要学什么专业大连谷歌seo
  • 深圳做网站公司营口化工网站建设
  • CUDA-GDB(13)——支持的平台及常见问题解决
  • Warp是什么
  • Go语言设计模式:建造者模式详解
  • 外观模式:复杂系统的统一入口
  • 个人做网站模版是否有人买如何引用网站图片
  • 库卡机器人通讯-EtherKRL-XML格式
  • 自动驾驶技术全景解析:从感知、决策到控制的演进与挑战
  • 建站平台在线提交表格apache 配置网站
  • 前端HTTP,JavaScript,网络
  • 汽车充电站光储充项目方案
  • 为什么Service层和Mapper层需要实现interface接口
  • 杭州做网站公司排名建筑工人招工网
  • 服务RejectedExecutionException问题对Semaphore的思考
  • GitLab 钩子 + Jenkins 自动化构建项目
  • 安装Pytorch GPU+CPU版本【通过本地安装解决无法使用pip指令下载问题】
  • DevExpress WinForms中文教程:Data Grid - 如何自定义汇总函数?
  • 西安建设市场诚信信息平台网站wordpress文章缩略图
  • 解锁未来:云原生如何重塑企业数字竞争力
  • 铜陵市建设工程管理局网站专业的网站开发团队
  • AI赋能座舱产品需求开发
  • SENT协议详解
  • 2026年ESWA SCI1区TOP,基于成本差异的跨境公路物流混合车队构成与调度:一种双层规划方法,深度解析+性能实测