Linux日志服务rsyslog深度解析(下)

作者 : admin 本文共6993个字,预计阅读时间需要18分钟 发布时间: 2024-06-9 共4人阅读

Linux日志服务rsyslog深度解析(下)插图

🐇明明跟你说过:个人主页

🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅

🔖行路有良友,便是天堂🔖

目录

一、rsyslog的核心功能 

1、日志消息的收集

2、日志消息的传输 

2.1、TCP与UDP传输

2.2、加密与安全性 

3、日志消息的存储 

3.1、本地文件存储

3.2、远程存储(如数据库、消息队列)

4、rsyslog配置文件详解 

二、rsyslog的配置实践

1、配置文件编辑技巧

2、与其他日志服务(如ELK Stack)的集成


一、rsyslog的核心功能 

1、日志消息的收集

rsyslog 的核心功能之一是日志消息的收集。它通过多个模块和灵活的配置来实现这一功能,确保系统能够有效地捕获和处理各种来源的日志数据。

1. 日志消息收集的基本概念

rsyslog 能够从不同来源(本地和远程)收集日志消息。其强大的模块化设计允许用户根据需要加载特定的输入模块,以捕获不同类型的日志数据。

2. 常见的输入模块

2.1 imuxsock

  • 描述:从 Unix 域套接字接收本地日志消息,这是默认的本地日志收集机制。
  • 典型用途:收集由 syslog 函数调用生成的日志消息,通常用于本地系统日志收集。

2.2 imklog

  • 描述:从内核日志缓冲区接收内核日志消息。
  • 典型用途:收集内核生成的日志消息,例如启动日志、内核错误和警告。

2.3 imudp

  • 描述:通过 UDP 协议接收日志消息。
  • 典型用途:收集远程系统发送的 UDP 协议日志消息,通常用于分布式系统中的日志收集。

2.4 imtcp

  • 描述:通过 TCP 协议接收日志消息。
  • 典型用途:收集远程系统发送的 TCP 协议日志消息,提供比 UDP 更可靠的日志传输。

2.5 imfile

  • 描述:从文件中读取日志消息。
  • 典型用途:监控和收集应用程序生成的日志文件,特别适用于没有通过标准 syslog 接口发送日志的应用程序。

Linux日志服务rsyslog深度解析(下)插图(1)

2、日志消息的传输 

2.1、TCP与UDP传输

在 rsyslog 中,日志消息的传输可以通过多种协议进行,其中最常用的是 TCP 和 UDP。每种传输协议都有其特点和适用场景。

1. UDP传输

特点

  • 无连接:UDP 是一种无连接协议,发送方和接收方之间不建立连接。
  • 轻量级:UDP 传输的数据报文不需要建立和维护连接状态,开销较小。
  • 不可靠:UDP 不保证消息的到达顺序,也不保证消息会被送达。这意味着可能会有丢包或乱序的情况。
  • 快速:由于没有连接建立和确认机制,UDP 的传输速度相对较快。

适用场景

  • 低延迟需求:适用于对延迟敏感的应用场景,例如实时音视频传输。
  • 容忍丢包:适用于丢失少量数据不会造成严重影响的场景,例如网络监控和统计数据传输。
  • 简单配置:适用于对配置要求较低的场景。

Linux日志服务rsyslog深度解析(下)插图(2)

  
2. TCP传输

特点

  • 有连接:TCP 是一种面向连接的协议,在传输数据前需要建立连接。
  • 可靠传输:TCP 提供可靠的数据传输,保证数据的完整性和顺序到达,具备重传机制。
  • 流控制和拥塞控制:TCP 使用流控制和拥塞控制机制,能够在网络拥塞时调整传输速度,避免网络过载。
  • 较高开销:由于需要建立和维护连接状态,TCP 的开销相对较高。

适用场景

  • 高可靠性需求:适用于要求数据可靠传输的场景,例如系统日志、事务性数据传输。
  • 顺序一致性:适用于数据到达顺序非常重要的场景。
  • 网络稳定:适用于网络环境相对稳定且能够容忍较高开销的场景。

Linux日志服务rsyslog深度解析(下)插图(3)

2.2、加密与安全性 

在日志消息传输中,加密与安全性是至关重要的,尤其在现代企业环境中,日志数据往往包含敏感信息。确保日志数据在传输和存储过程中的机密性和完整性,可以有效防止信息泄露和篡改。rsyslog 提供了多种加密和安全性功能,以满足不同的安全需求。

1. 基于 TLS 的加密传输

  • rsyslog 支持通过 TLS(Transport Layer Security)协议对日志数据进行加密传输。TLS 是一种广泛使用的加密协议,能够提供数据的机密性、完整性和身份验证。使用 TLS 加密传输可以防止日志数据在网络中被窃听或篡改。

2.基于 TLS 的身份验证

  • 在 TLS 传输中,除了加密数据,TLS 还提供身份验证功能。通过使用证书,可以验证通信双方的身份,确保只有授权的客户端和服务器可以建立连接。

Linux日志服务rsyslog深度解析(下)插图(4)

3、日志消息的存储 

3.1、本地文件存储

1. 默认存储位置:

  • 日志消息默认存储在/var/log目录下。这是Linux系统中常见的系统日志存储位置。

2. 日志文件配置格式:

  • 日志文件的配置格式通常遵循AAAA.BBBB CCCC的模式。
    •  AAAA:表示产生日志的设备,如authpriv、mail、cron、uucp、news以及local0-7(用户自定义)。
    •  BBBB:表示日志的级别,如debug(调试)、info(正常)、notice(稍微注意)、warning(警告)、error(错误信息)、crit(危机信息)、alert(必须注意)和emerg(紧急信息)。
    •  CCCC:表示保存日志的位置,即具体的日志文件路径。

3. 日志文件示例:

  • /var/log/messages:这是系统日志的一个常见文件,记录系统启动过程所产生的信息。

4. 配置与测试:

  • 配置文件位于/etc/rsyslog.conf以及/etc/rsyslog.d目录下以.conf为扩展名的文件。
  • 配置规则中,每行左侧表示与规则匹配的syslog消息的设备和严重性,右侧表示要将日志消息保存到的文件。
  • 可以通过修改配置文件来改变日志消息的存储方式和位置。
  • 测试日志是否成功写入可以通过tail -f /var/log/messages等命令实时查看日志文件的内容。

Linux日志服务rsyslog深度解析(下)插图(5)

3.2、远程存储(如数据库、消息队列)

1. 存储到数据库

1.1 安装必要的驱动模块

  • 安装rsyslog连接至MySQL server的驱动模块。对于CentOS系统,可以使用命令yum install -y rsyslog-mysql。
  • 该驱动模块会提供/lib64/rsyslog/ommysql.so这样的文件,它是实际与MySQL交互的模块。

1.2 准备数据库和用户

  • 在MySQL服务器上创建一个名为Syslog的数据库(或其他名称)。
  • 创建一个rsyslog专用的用户账号,如CREATE USER ‘rsyslog’@’localhost’ IDENTIFIED BY ‘password’;。
  • 授权该用户账号对Syslog数据库的所有权限,如GRANT ALL PRIVILEGES ON Syslog.* TO ‘rsyslog’@’localhost’;。

1.3 配置rsyslog

  • 修改rsyslog的配置文件/etc/rsyslog.conf,添加将日志消息写入MySQL的配置。

1.4 重启rsyslog服务

  • 重启rsyslog服务,使配置生效。

2. 存储到消息队列(如Kafka)

2.1 安装rsyslog的Kafka模块

  • 由于rsyslog默认不包含Kafka模块,因此需要安装。可以通过添加rsyslog的repo源并使用yum安装rsyslog 8.x版本,然后将Kafka模块文件(如omkafka.so和librdkafka.so.1)复制到系统的lib路径下。

2.2 配置rsyslog

  • 修改rsyslog的配置文件/etc/rsyslog.conf,添加将日志消息写入Kafka的配置。

2.3 启动Kafka和rsyslog

  • 确保Kafka服务已经启动并运行。
  • 重启rsyslog服务,使配置生效。

Linux日志服务rsyslog深度解析(下)插图(6)

4、rsyslog配置文件详解 

rsyslog 的配置文件主要包括全局选项、模块加载、规则设置和模板定义等部分。

1. 全局选项
全局选项用于定义 rsyslog 的行为、工作目录、权限等全局设置。

# 指定工作目录
$WorkDirectory /var/spool/rsyslog

# 定义默认的日志模板
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# 设置日志文件的权限
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

2. 模块加载
rsyslog 是模块化的,可以通过加载不同的模块来扩展功能。常用的模块包括输入、输出、过滤和解析模块。

# 加载基础模块
module(load="imuxsock") # 本地 Unix 套接字支持
module(load="imklog")   # 内核日志支持
module(load="imfile")   # 文件输入支持

# 加载 TCP 和 UDP 网络模块
module(load="imtcp")
module(load="imudp")

3. 输入配置
输入配置用于定义日志消息的来源。例如,可以从本地文件、Unix 套接字、TCP/UDP 端口等读取日志消息。

# 监听 UDP 514 端口
input(type="imudp" port="514")

# 监听 TCP 514 端口
input(type="imtcp" port="514")

4. 过滤与路由
过滤与路由规则用于定义日志消息的处理和转发方式。可以根据日志消息的属性(如设施、优先级、程序名称等)进行过滤和分类。

# 定义日志文件的存储路径
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log

# 记录所有消息,级别为警告或更高
*.warn                          -/var/log/warn.log

# 定义特定程序的日志路径
if $programname == 'myapp' then /var/log/myapp.log

5. 输出配置
输出配置用于定义日志消息的目标位置,例如本地文件、远程服务器、数据库等。

# 输出到本地文件
*.* /var/log/messages

# 转发到远程服务器
*.* @@remote-server:514

6. 模板定义
模板用于自定义日志消息的格式。在 rsyslog 中,可以使用模板定义日志消息的输出格式。

template(name="MyFormat" type="string" string="%timestamp:::date-rfc3339% %hostname% %syslogtag%%msg%
")

# 使用自定义模板输出到本地文件
*.* /var/log/custom.log;MyFormat

7. 配置示例
以下是一个综合示例,展示如何配置 rsyslog 从不同来源收集日志消息,并将它们存储到本地文件或转发到远程服务器。

# 全局选项
$WorkDirectory /var/spool/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

# 加载模块
module(load="imuxsock")
module(load="imklog")
module(load="imfile")
module(load="imtcp")
module(load="imudp")

# 输入配置
input(type="imudp" port="514")
input(type="imtcp" port="514")

# 过滤与路由
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log
*.warn                          -/var/log/warn.log

# 输出配置
*.* /var/log/messages
*.* @@remote-server:514

# 自定义模板
template(name="MyFormat" type="string" string="%timestamp:::date-rfc3339% %hostname% %syslogtag%%msg%
")
*.* /var/log/custom.log;MyFormat

Linux日志服务rsyslog深度解析(下)插图(7)

 

二、rsyslog的配置实践

1、配置文件编辑技巧

1. 模块化配置
将配置文件拆分成多个模块化文件,可以提高配置的可读性和可维护性。例如,可以将不同来源的日志配置放在单独的文件中。

# 主配置文件
include(file="/etc/rsyslog.d/*.conf")

然后在 /etc/rsyslog.d/ 目录中创建单独的配置文件,例如 local.conf、remote.conf 等。

2. 使用模板
定义和使用模板可以统一日志消息的格式,简化配置。例如:

# 定义模板
template(name="MyFormat" type="string" string="%timestamp:::date-rfc3339% %hostname% %syslogtag%%msg%
")

# 使用模板
*.* /var/log/custom.log;MyFormat

3. 动态配置
利用变量和条件配置,可以动态调整 rsyslog 的行为。例如,根据主机名或程序名来决定日志的存储路径。

# 动态变量
$template DynamicFile,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"

# 使用动态变量
*.* ?DynamicFile

Linux日志服务rsyslog深度解析(下)插图(8)

2、与其他日志服务(如ELK Stack)的集成

将 rsyslog 与其他日志服务(如 ELK Stack)集成可以增强日志收集、分析和可视化能力。ELK Stack 包括 Elasticsearch、Logstash 和 Kibana,这些工具可以协同工作,提供强大的日志管理解决方案。

1. rsyslog 与 Logstash 集成
将 rsyslog 日志转发到 Logstash 进行进一步处理和分析。

配置 rsyslog

  • 在 rsyslog 配置文件中添加输出到 Logstash 的配置。可以通过 TCP 或 UDP 协议将日志转发到 Logstash。
  • 编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/your_config.conf 文件,添加以下配置:
# 加载 omrelp 模块
module(load="omrelp")

# 转发所有日志到 Logstash
*.* action(type="omrelp" target="logstash.example.com" port="10514")

配置 Logstash

  • 配置 Logstash 输入插件以接收来自 rsyslog 的日志。编辑 Logstash 配置文件(例如 logstash.conf),添加以下配置:
input {
  relp {
    port => 10514
  }
}

filter {
  # 这里可以添加你需要的过滤器
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch.example.com:9200"]
    index => "syslog-%{+YYYY.MM.dd}"
  }

  stdout {
    codec => rubydebug
  }
}

2. rsyslog 与 Elasticsearch 集成
直接将 rsyslog 日志发送到 Elasticsearch。

  • 配置 rsyslog
  • 使用 omelasticsearch 模块将日志发送到 Elasticsearch。
  • 编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/your_config.conf 文件,添加以下配置:
# 加载 omelasticsearch 模块
module(load="omelasticsearch")

# 配置 Elasticsearch 输出
action(
  type="omelasticsearch"
  server="http://elasticsearch.example.com:9200"
  serverport="9200"
  template="RSYSLOG_TraditionalFileFormat"
  searchIndex="syslog"
  dynSearchIndex="on"
  searchType="doc"
  bulkmode="on"
  queue.workerthreads="2"
  queue.size="10000"
  queue.dequeuebatchsize="500"
  action.resumeretrycount="10"
)

Linux日志服务rsyslog深度解析(下)插图(9)

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

本站无任何商业行为
个人在线分享 » Linux日志服务rsyslog深度解析(下)
E-->