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 接口发送日志的应用程序。

2、日志消息的传输 

2.1、TCP与UDP传输

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

1. UDP传输


特点

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

适用场景

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

  
2. TCP传输


特点

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

适用场景

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

2.2、加密与安全性 

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

1. 基于 TLS 的加密传输

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

2.基于 TLS 的身份验证

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

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等命令实时查看日志文件的内容。

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服务,使配置生效。

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%\n")

# 使用自定义模板输出到本地文件
*.* /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%\n")
*.* /var/log/custom.log;MyFormat

 

二、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%\n")

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


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

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

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

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的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/691957.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Diffusers代码学习: IP-Adapter

从操作的角度来看,IP-Adapter和图生图是很相似的,都是有一个原始的图片,加上提示词,生成目标图片。但它们的底层实现方式是完全不一样的,我们通过源码解读来看一下。以下是ip adapter的实现方式 # 以下代码为程序运行…

【启程Golang之旅】网络编程与反射

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

[stm32]——uc/OS-III多任务程序

目录 一、获取uC/OS-III源码 二、移植源代码 (1)建立工程文件 (2)移植uC/OS-III源码 (3)添加工程组件和头文件路径 (4)添加头文件路径 三、修改代码 总结 一、获取uC/OS-III源码 …

jvm学习笔记(一) ----- JAVA 内存

JAVA 内存 一、程序计数器二、虚拟机栈三、本地方法栈四、堆五、非JAVA内存(堆外内存)1.元空间(Metaspace)2.直接内存 链接: jvm学习笔记(二) ----- 垃圾回收 链接: jvm学习笔记(三) ----- 垃圾回收器 一、程序计数器 虚拟机需要通过『程序计数器』记录指令执行到哪了。线程要…

高考填报志愿,怎么分析自己适合什么专业?

高考结束后,很多考生不知道自己的分数段适合什么学校,缺乏目标感,有些专业名称很大,听起来光鲜亮丽,但是是否适合自己,学什么课程,将来就业去向,这些都是需要细致了解的。 专业选择…

【Java】解决Java报错:StackOverflowError

文章目录 引言1. 错误详解2. 常见的出错场景2.1 无限递归2.2 递归深度过大2.3 方法调用层次过深 3. 解决方案3.1 优化递归算法3.2 尾递归优化3.3 增加调用栈大小3.4 检查递归终止条件 4. 预防措施4.1 使用迭代替代递归4.2 尾递归优化4.3 合理设计递归算法4.4 调整JVM参数4.5 定…

Python通过数据验证功能在Excel文件中创建下拉列表

Excel表格的灵活性和功能性深受各行各业人士的喜爱。在Excel表格中,下拉列表功能是提升数据录入效率与准确性的一个重要利器,能够为用户提供预设的选择项,限制输入范围,避免手动输入错误,还能够简化数据录入过程&#…

APP开发技术的变迁史

随着移动互联网的迅猛发展,APP(应用程序)已经成为人们日常生活中不可或缺的一部分。从最初的简单工具到如今的智能平台,APP开发技术在这十年间经历了翻天覆地的变化。本文将从多个维度探讨近十年来APP开发技术的变迁史&#xff0c…

数组中寻找符合条件元素的位置(np.argwhere,nonzero)

今天遇到一个问题,就是寻找符合条件的元素所在的位置,主要使用np.argwhere和nonzero函数 比如给我一个二维数组,我想知道其中元素大于15的位置 方法1 import numpy as np exnp.arange(30) enp.reshape(ex,[3,10]) print(e) print(e>15…

【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

造假高手——faker

在测试写好的代码时通常需要用到一些测试数据,大量的真实数据有时候很难获取,如果手动制造测试数据又过于繁重无聊,显得不够优雅,今天我们介绍的faker这个轮子可以完美的解决这个问题。faker是一个用于生成各种类型假数据的库&…

10. MySQL 用户

文章目录 【 1. 权限表 】1.1 user 权限表1.1.1 用户列1.1.2 权限列1.1.3 安全列1.1.4 资源控制列 1.2 db 表用户列权限列 1.3 tables_priv 表1.4 columns_priv 表1.5 procs_priv表 【 2. 用户管理 】2.1 创建用户 CREATE USER2.2 用户的登陆、退出登陆 MySQL退出 MySQL 2.3 重…

基于VS2022编译GDAL

下载GDAL源码;下载GDAL编译需要依赖的必须代码,proj,tiff,geotiff三个源码,proj需要依赖sqlite;使用cmake编译proj,tiff,geotiff;proj有版本号要求;使用cmake…

3D Gaussian Splatting for Real-Time Radiance Field Rendering

辐射场方法最近在基于多张照片或视频进行新视角合成方面取得了革命性进展。然而,实现高视觉质量仍然需要耗时且计算成本高的神经网络,而最近的快速方法不可避免地在速度和质量之间进行了权衡。对于无界和完整的场景(而不是孤立的物体&#xf…

nginx mirror流量镜像详细介绍以及实战示例

nginx mirror流量镜像详细介绍以及实战示例 1.nginx mirror作用2.nginx安装3.修改配置3.1.nginx.conf3.2.conf.d目录下添加default.conf配置文件3.3.nginx配置注意事项3.3.nginx重启 4.测试 1.nginx mirror作用 为了便于排查问题,可能希望线上的请求能够同步到测试…

【python报错】TypeError: can only concatenate str (not “int“) to str

【Python报错】TypeError: can only concatenate str (not “int”) to str 在Python编程中,字符串连接是一种基本且频繁的操作。然而,如果你尝试将整数(int)与字符串(str)直接连接,会遇到TypeE…

扩散模型条件生成——Classifier Guidance和Classifier-free Guidance原理解析

1、前言 从讲扩散模型到现在。我们很少讲过条件生成(Stable DIffusion曾提到过一点),所以本篇内容。我们就来具体讲一下条件生成。这一部分的内容我就不给原论文了,因为那些论文并不只讲了条件生成,还有一些调参什么的…

金融领域的AI解决方案

AI可赋能金融营销、资管、风控等领域,面向金融消费者、金融机构和金融监管机构,改善金融 市场信息对称性并提升金融交易的效率和安全性。目前,金融行业各机构对于安全认证和客户身份识别的需求较为迫切,身份识别和智能客服应用和落…

Linux编译器-gcc或g++的使用

一.安装gcc/g 在linux中是不会自带gcc/g的,我们需要编译程序就自己需要安装gcc/g。 很简单我们使用简单的命令安装gcc:sudo yum install -y gcc。 g安装:sudo yum install -y gcc-c。 我们知道Windows上区分文件,都是使用文件…

Facebook企业户 | Facebook公共主页经营

Facebook作为社交媒体巨头,拥有庞大的用户基数,因此,有效经营公共主页是获取持续流量、提升客户信任度和粘性、促进产品或服务销售与转化的关键。要优化Facebook主页,关注以下几点: 1、参与度是关键指标:因…