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

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

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

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

目录

一、引言

1、日志在Linux系统中的作用

2、rsyslog历史背景 

3、rsyslog与syslogd的比较 

二、rsyslog基础知识 

1、rsyslog的安装与配置基础

2、rsyslog的组件架构


一、引言

1、日志在Linux系统中的作用

1. 系统监控和管理

  • 系统健康检查:日志文件记录了系统的启动过程、内核消息、硬件事件等,可以帮助管理员了解系统的健康状况。
  • 资源使用监控:日志文件可以记录CPU、内存、磁盘和网络等资源的使用情况,帮助管理员监控系统性能。

2. 故障排查和调试

  • 错误排查:当系统或应用程序发生错误时,日志文件中通常会记录错误信息和堆栈跟踪,这些信息对故障排查和调试非常有帮助。
  • 行为回溯:通过查看日志文件,可以了解系统或应用程序在特定时间段内的行为,帮助找出问题的根源。

3. 安全监控

  • 入侵检测:日志文件可以记录系统的登录尝试、权限变更和异常操作等,有助于检测和防范潜在的入侵行为。
  • 审计和合规:日志文件可以用于审计和合规检查,确保系统操作符合安全策略和法规要求。

4. 性能分析和优化

  • 性能瓶颈分析:通过分析日志文件中的性能数据,可以找出系统或应用程序的性能瓶颈,进行相应的优化。
  • 趋势分析:日志文件中的数据可以用于分析系统性能的历史趋势,帮助预测未来的性能需求和瓶颈。

 

2、rsyslog历史背景 

rsyslog 是一个开源的日志处理工具,广泛用于UNIX和Linux系统中。它起源于经典的syslog,并在此基础上进行了大量的扩展和改进。

1. syslog的起源

  • syslog协议:最早由Eric Allman在1980年代为BSD Unix开发。syslog协议提供了一个标准化的日志记录机制,用于记录系统事件和应用程序消息。
  • syslog守护进程:是最早的系统日志记录工具之一,负责接收和处理来自系统和应用程序的日志消息。

2. syslog的局限性


随着时间的推移,经典的syslog守护进程暴露出了一些局限性,包括:

  • 扩展性不足:syslog的设计较为简单,难以满足现代系统复杂的日志处理需求。
  • 性能问题:在处理大量日志消息时,syslog的性能和效率较低。
  • 灵活性不足:缺乏高级的过滤、格式化和转发功能,难以适应多样化的日志处理场景。

3. rsyslog的诞生

  • 起源:rsyslog由Rainer Gerhards在2004年开始开发,旨在解决经典syslog的局限性。
  • 开源发布:rsyslog在2007年作为开源项目发布,迅速得到了社区的广泛关注和使用。

4. rsyslog的特点和改进


rsyslog在经典syslog的基础上进行了大量改进,具有以下主要特点:

  • 高性能:通过多线程和异步处理机制,极大地提高了日志处理的性能和效率。
  • 模块化设计:采用模块化架构,支持通过插件扩展功能,包括多种输入、输出和处理模块。
  • 高级过滤和处理:支持复杂的过滤规则和日志消息的格式化处理,满足多样化的日志处理需求。
  • 可靠性:提供可靠的日志传输机制,确保日志消息不会丢失。
  • 支持多种协议:支持包括UDP、TCP、RELp在内的多种网络协议,增强了日志消息的传输能力。
  • 丰富的输出选项:支持将日志消息发送到文件、数据库、远程服务器等多种目标。

5. 发展历程

  1. 2004年:Rainer Gerhards开始开发rsyslog。
  2. 2007年:rsyslog作为开源项目发布,逐步取代经典syslog守护进程。
  3. 2008年:加入了对RELp(Reliable Event Logging Protocol)的支持,提高了日志传输的可靠性。
  4. 2010年:引入了对零消息队列(ZeroMQ)的支持,进一步提升了并发处理能力。
  5. 2011年:加入了对 Elasticsearch、Redis 等现代存储系统的支持。
  6. 2012年以后:持续进行功能扩展和性能优化,逐步成为Linux系统中最常用的日志处理工具之一。

3、rsyslog与syslogd的比较 

syslogd 是最早的 UNIX 和 Linux 系统日志守护进程之一,它提供了一种简单而有效的方式来记录和管理系统和应用程序的日志。
rsyslog syslogd 是两个用于日志管理的守护进程,尽管它们有共同的历史渊源,但在功能和特性上有显著的差异。

1. 性能和扩展性


syslogd:

  • 性能:设计简单,适合处理中小规模的日志量。
  • 扩展性:扩展性有限,难以处理大量并发日志消息。

rsyslog:

  • 性能:支持多线程和异步处理,能够高效地处理大量日志消息。
  • 扩展性:模块化设计,允许通过插件进行功能扩展,能够适应大规模和高并发的日志处理需求。


2. 配置灵活性


syslogd:

  • 配置文件:配置文件格式相对简单,但功能有限。
  • 灵活性:缺乏高级的过滤和处理功能,配置灵活性较低。

rsyslog:

  • 配置文件:支持复杂的配置文件格式,允许进行精细的日志过滤、格式化和路由。
  • 灵活性:提供强大的配置选项,支持复杂的日志处理需求。


3. 支持的输入和输出


syslogd:

  • 输入:主要支持标准的syslog协议(UDP)。
  • 输出:主要支持将日志消息写入文件或发送到远程syslog服务器。

rsyslog:

  • 输入:支持多种输入来源,包括文件、网络(UDP、TCP、RELp)、数据库、消息队列等。
  • 输出:支持多种输出目标,包括文件、数据库、远程服务器、消息队列、Elasticsearch等。


4. 可靠性


syslogd:

  • 可靠性:使用UDP传输日志消息,传输不可靠,可能丢失日志消息。

rsyslog:

  • 可靠性:支持多种可靠的传输协议(如TCP、RELp),提供可靠的日志传输机制,确保日志消息不丢失。


5. 日志处理功能


syslogd:

  • 处理功能:基本的日志记录和转发功能,缺乏高级的处理能力。

rsyslog:

  • 处理功能:支持复杂的日志处理规则,包括条件过滤、消息修改、格式化、转发等,功能强大。


6. 安全性


syslogd:

  • 安全性:基本的安全性特性,缺乏现代化的安全机制。

rsyslog:

  • 安全性:支持TLS加密传输,增强了日志消息传输的安全性;提供更细粒度的访问控制和安全配置选项。


7. 社区支持和更新


syslogd:

  • 社区支持:作为传统的日志守护进程,社区支持和开发更新较少。

rsyslog:

  • 社区支持:活跃的开源社区,持续的功能更新和改进,广泛的文档和用户支持。


rsyslog 和 syslogd 各有特点:

  • syslogd:适合于简单的日志记录需求,小规模系统使用。
  • rsyslog:功能强大,适合处理大规模、高并发的日志需求,支持复杂的日志处理规则和多种传输协议,提供高性能和高可靠性。

二、rsyslog基础知识 

1、rsyslog的安装与配置基础

安装 rsyslog
在大多数 Linux 发行版中,rsyslog 都可以通过包管理器进行安装。

在 Debian/Ubuntu 系统上:

sudo apt update
sudo apt install rsyslog


在 Red Hat/CentOS 系统上:

sudo yum update
sudo yum install rsyslog


在 Fedora 系统上:

sudo dnf update
sudo dnf install rsyslog


启动和启用 rsyslog 服务
安装完成后,可以通过以下命令启动和启用 rsyslog 服务:

sudo systemctl start rsyslog
sudo systemctl enable rsyslog


配置 rsyslog
rsyslog 的主配置文件通常位于 /etc/rsyslog.conf,而具体的配置文件则位于 /etc/rsyslog.d/ 目录下。配置文件使用一种简单的规则语言,可以指定日志消息的来源、过滤条件和输出目标。配置文件示例
以下是一个基本的 rsyslog 配置文件示例:

# 加载输入模块
module(load="imuxsock")  # 本地 Unix socket 输入
module(load="imklog")    # 内核日志输入

# 日志格式模板
template(name="TraditionalFormat" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%\n")

# 日志过滤和输出
authpriv.*                      /var/log/secure
mail.*                          -/var/log/mail
cron.*                          /var/log/cron

# 记录所有日志到 /var/log/messages,排除 mail, authpriv 和 cron 日志
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# 记录紧急日志到所有用户终端
*.emerg                         :omusrmsg:*

# 将日志消息转发到远程服务器
*.* @192.168.1.100:514


配置详解

  • 模块加载:加载必要的输入模块,如本地 Unix socket (imuxsock) 和内核日志输入模块 (imklog)。
  • 模板:定义日志消息的格式。
  • 日志过滤和输出:指定不同类型的日志消息的处理规则和输出目标。
  • 远程日志转发:将所有日志消息转发到远程服务器(IP 地址:192.168.1.100,端口:514)。

2、rsyslog的组件架构

rsyslog 是一个高度模块化和可扩展的系统日志处理工具,其组件架构使其能够灵活地处理、过滤和转发日志消息。以下是 rsyslog 的主要组件及其架构的详细介绍:

1. 输入模块(Input Modules)
输入模块负责接收各种来源的日志消息。常用的输入模块包括:

  • imuxsock:从 Unix 域套接字接收本地日志消息。
  • imklog:从内核日志缓冲区接收内核日志消息。
  • imudp:通过 UDP 协议接收日志消息。
  • imtcp:通过 TCP 协议接收日志消息。
  • imfile:从文件中读取日志消息。


2. 过滤和解析器(Parsers and Filters)
过滤器和解析器用于处理和解析接收到的日志消息,并根据预定义的规则过滤日志。常见的过滤器和解析器包括:

  • RainerScript:rsyslog 的内置脚本语言,用于复杂的日志处理和过滤。
  • Syslog parser:解析标准的 syslog 消息格式。
  • JSON parser:解析 JSON 格式的日志消息。
  • Filter conditions:基于消息内容、来源等条件进行日志过滤。


3. 输出模块(Output Modules)
输出模块负责将处理后的日志消息转发到指定的目标位置。常用的输出模块包括:

  • omfile:将日志消息写入文件。
  • omudp:通过 UDP 协议发送日志消息。
  • omtcp:通过 TCP 协议发送日志消息。
  • omelasticsearch:将日志消息发送到 Elasticsearch。
  • ommysql:将日志消息写入 MySQL 数据库。
  • omkafka:将日志消息发送到 Kafka 主题。


4. 缓冲与队列(Buffers and Queues)
为了提高性能和可靠性,rsyslog 支持异步操作和消息队列。队列用于缓冲日志消息,避免在高负载或网络故障时丢失日志。常见的队列类型包括:

  • 内存队列:将消息存储在内存中,适用于低延迟需求的场景。
  • 磁盘队列:将消息存储在磁盘上,适用于高可靠性需求的场景。


5. 模板(Templates)

  • 模板用于定义日志消息的输出格式。用户可以自定义日志格式,以便与特定的日志收集系统或数据库兼容。模板支持多种格式化选项和变量。

6. 安全与加密(Security and Encryption)
rsyslog 支持 TLS/SSL 加密,以确保日志消息在传输过程中的安全性。相关模块包括:

  • imtcp + TLS:通过 TLS 加密的 TCP 连接接收日志消息。
  • omfwd + TLS:通过 TLS 加密的 TCP/UDP 连接发送日志消息。

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

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

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

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

相关文章

python怎么下载numpy

安装Python step1:官网下载安装包; https://www.python.org/ 我下载的是python-3.4.4.msi step2:python环境变量配置; 计算机-属性-高级系统设置-环境变量-系统变量 找到PATH,点击编辑,加英文分号;在…

【Java面试】十五、HashMap相关

文章目录 1、二叉树1.1 二叉搜索树1.2 红黑树 2、散列表2.1 哈希冲突2.2 哈希冲突 - 链表法 3、HashMap的实现原理4、HashMap源码4.1 属性部分4.2 构造函数部分 5、HashMap的put方法的流程6、HashMap的扩容机制7、HashMap的寻址算法8、为何HashMap底层的数组长度一定是2的次幂 …

个人笔记-python生成gif

使用文件的修改时间戳进行排序 import os import re import imageio# 设置图片所在的文件夹路径 folder_path /home/czy/ACode/AMAW_20240219/9.3.x(Discrete_time_marching)/9.3.17.11.1(Disc_concessive_CH_ZJ)/current_figures # 文件夹路径;linux…

Python Virtualenv:创建独立的 Python 开发环境

在当今软件开发的世界中,Python 是一种备受欢迎的编程语言,其简洁、易读和强大的特性吸引了无数开发者。然而,随着项目的增多和复杂度的提高,有效地管理 Python 项目所需的各种依赖项和库变得越来越重要。在这种情况下&#xff0c…

IPv4 和 IPv6 是什么意思?它们之间的区别都有哪些?

什么是 IPv4 和 IPv6 什么是 IPv4 和 IPv6 呢?下面我们就来了解一下。 IPv4 就是互联网协议第 4 版,是目前广泛使用的网络协议版本。它由互联网工程任务组(IETF)在 1981 年开发完成。IPv4 使用 32 位地址,允许大约 4…

Vue——子级向父级使用props传递数据(函数)

文章目录 前言原理案例效果演示 前言 看到这个标题,相信很多人会说我,你之前博客写的父级向子级中传递数据使用的是props,然后说的子级向父级传递数据则是用的$emit。 并且还说了对于String、数组Array,只能是父级使用props传递…

深度学习_02_卷积神经网络循环神经网络

卷积神经网络 1. 卷积神经网络 神经元存在局部感受区域----感受野 . 第一个卷积神经网络雏形----新认知机 缺点:没有反向传播算法更新权值,模型性能有限 第一个大规模商用卷积神经网络----Lenet-5 缺点:没有大量数据和高性能计算资源。 第一个…

第三篇——大数据思维的科学基础

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 大数据时代,大数据思维的重要性不言而喻;而信息在…

eclipse添加maven插件

打开eclipse菜单 Help/Install New SoftwareWork with下拉菜单选择 2022-03 - https://download.eclipse.org/releases/2022-03‘type filter text’搜索框中输入 maven选择 M2E - Maven Integration for Eclipse一路next安装,重启eclipseImport项目时,就…

教程 | Navicat 17 管理连接新方法

Navicat 17 提供了比以往更多的连接数据库实例的方式。除了传统的连接字符串方式以外,Navicat 17 还支持 URI 连接,无论身在何处,都可以轻松地通过 URI 访问对象。另外,还有一个新的管理连接功能,即允许你通过一个以用…

Pandas读取excel异常

Pandas 处理excel异常: ValueError: Excel file format cannot be determined, you must specify an engine manually.今天使用pandas 处理excel的时候,抛出异常:ValueError: Excel file format cannot be determined, you must specify an engine manua…

【多模态】36、ShareGPT4V | 借助 GPT4V 的能够来生成更丰富的 caption 用于提升 LMM 模型的能力

文章目录 一、背景二、方法2.1 ShareGPT4V 数据集构建2.2 ShareGPT4V-PT 数据生成2.3 ShareGPT4V-7B Model 三、效果3.1 benchmark3.2 定量分析3.3 多模态对话 四、一些例子 论文:ShareGPT4V: Improving Large Multi-Modal Models with Better Captions 代码&#…

PolygonalSurfaceContourLineInterpolator 多边形交互器

1. 效果: 2.简介: 可以实现在多边形上进行交互,选择;在多边形曲面上实现轮廓点的交互绘制。 该类的使用需要结合 vtkPolygonalSurfacePointPlacer 类,定位点的功能也就是拾取器。 前提:输入的多边形曲面…

华为OD机试 - 两个字符串间的最短路径问题 - 动态规划(Java 2024 D卷 200分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测…

485数据采集模块

在工业自动化与智能化的浪潮中,数据采集作为整个系统的基础和核心,其准确性和实时性直接关系到生产效率和产品质量。而485数据采集模块,作为连接现场设备与上位机的重要桥梁,其性能与稳定性对于整个系统的运行至关重要。HiWoo Box…

GAT1399协议分析(8)--批量图像查询

一、请求消息定义 视频图像包含视频片段、 图像、 文件、 人员、 人脸、 机动车、 非机动车、 物品、 场景和视频案事件、 视频图像标签等对象 在消息体中,可以包含其中一种类,加上Data字段即可。 ImageInfo对象 二、请求消息实例 wireshark 抓包实例 请求: 文本化: /V…

Linux网络编程:数据链路层协议

目录 前言: 1.以太网 1.1.以太网帧格式 1.2.MTU(最大传输单元) 1.2.1.IP协议和MTU 1.2.2.UDP协议和MTU 1.2.3.TCP协议和MTU 2.ARP协议(地址解析协议) 2.1.ARP在局域网通信的角色 2.2.ARP报文格式 2.3.ARP报文…

sqli-labs 靶场 less-5、6 第五关和第六关:判断注入点、使用错误函数注入爆库名、updatexml()函数

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。Less 5 SQLI DUMB SERIES-5 判断注入点:1. 首先,尝试正常的回显内容&#x…

【精通NIO】NIO介绍

一、什么是NIO NIO,全称为New Input/Output,是Java平台中用于替代传统I/O(Blocking I/O)模型的一个功能强大的I/O API。NIO在Java 1.4版本中被引入,其设计目标是提供一种非阻塞的、低延迟的I/O操作方式,以…

BERT应用——文本间关联性分析

本文结合了自然语言处理(NLP)和深度学习技术,旨在分析一段指定的任务文本中的动词,并进一步探讨这个动词与一系列属性之间的关联性。具体技术路径包括文本的词性标注、语义编码和模型推断。 一、技术思路 NLP和词性标注 在自然…