使用rsyslog转发自定义日志到指定服务器

rsyslog简介

    rsyslog 是一个高度可配置的、功能强大的系统日志守护进程,广泛用于 UNIX 和 Linux 系统中。它是 syslog 的一个扩展版本,提供了许多额外的功能和改进。能够收集、过滤、存储和转发日志数据。它的灵活性和扩展性使其成为现代 Linux 系统中日志管理的重要组成部分。

主要功能

  1. 日志收集

    1. rsyslog 能够收集来自系统、应用程序和网络设备的日志信息。
    2. 支持多种输入来源,包括本地文件、网络套接字和远程日志传输。
  2. 日志过滤

    • 通过配置文件中的规则,可以对日志进行过滤、分类和处理。
    • 支持按设施、严重性、内容等条件进行日志选择和处理。
  3. 日志转发

    • 支持将日志转发到其他 rsyslog 实例或日志管理系统。
    • 可以通过 UDP、TCP 或 RELP 协议进行远程日志传输。
  4. 日志存储

    • 可以将日志消息存储到文件、数据库或其他存储后端。
    • 支持日志轮转和归档功能,以管理日志文件的大小和存储期限。
  5. 日志格式化

    • 支持自定义日志格式,通过模板将日志消息格式化为所需的结构。
  6. 模块化设计

    • rsyslog 采用模块化架构,支持加载和卸载各种插件和模块。
    • 常用模块包括输入模块(imfile、imudp、imtcp)、输出模块(omfile、omrelp、ommysql)等。

主要组件

  1. 输入模块(Input Modules)

    用于接收日志数据。包括从文件、网络、系统日志等来源接收日志。
  2. 过滤器(Filters)

    用于根据规则筛选和处理日志消息。例如,过滤掉不需要的日志、将日志重定向到特定文件等。
  3. 输出模块(Output Modules)

    用于将日志数据输出到目标位置,如文件、数据库或远程服务器。
  4. 模板(Templates)

    用于自定义日志消息的格式。可以定义消息的结构、内容和格式,以满足特定的需求。

使用场景

  • 系统监控:监控系统运行状况、错误和警告信息。
  • 安全审计:记录和分析安全事件,如登录尝试和系统访问。
  • 集中日志管理:将日志从多个系统集中到一个位置,以便于管理和分析。
  • 故障排除:分析和排查系统和应用程序故障的根本原因。

配置方法

        比如有个场景,需要把服务器A上的某个app的日志转发到服务器B上,这里的A和B上默认都安装了rsyslog。那么,我们可以称A为客户端,B为服务端。

配置服务端

        rsyslog的配置文件默认在/etc/下,名为rsyslog.conf。除了rsyslog.conf,还有一个rsyslog.d目录,这个目录下保存的是自定义文件。

1. 编辑配置文件 /etc/rsyslog.conf 
  • 启用 UDP 或 TCP 监听:
# 监听 UDP 514 端口:
$ModLoad imudp
$UDPServerRun 514# 或者监听 TCP 514 端口:
$ModLoad imtcp
$InputTCPServerRun 514
  • 设置日志接收规则

指定如何处理接收到的日志,例如,将接收到的日志写入指定的文件夹:

if $fromhost-ip == 'client-ip' then /var/log/remote_logs.log
& stop

client-ip 替换为客户端机器的 IP 地址,注意 & stop 单独放在一行。

2. 校验rsyslog 配置

为了确保配置文件语法正确,可以使用以下命令检查 rsyslog 配置文件:

rsyslogd -N1

参数说明:

  • -N: 表示进行配置文件的语法检查。
  • -1: 表示验证级别为 1,进行基本的语法检查,不包括更详细的错误检查。
3. 重启 rsyslog 服务
systemctl restart rsyslog
4. 检查防火墙设置

检查防火墙或者iptables的配置,确保开放了 514 端口,并且注意是使用的 UDP 还是 TCP 协议。

配置客户端

        因为我们想要实现的是转发指定app的日志,假设我们的app日志文件存储在 /var/log/myapp.log 中。

1. 编辑 rsyslog 配置文件

既然是自定义app日志,所以建议在/etc/rsyslog.d下创建一个名为myapp.conf的文件配置文件。当然,你也可以直接使用/etc/rsyslog.conf 。好了,现在打开 /etc/rsyslog.conf/etc/rsyslog.d/myapp.conf。

a.添加imfile模块的配置:
# 读取自定义日志文件
$InputFileName /var/log/myapp.log
$InputFileTag myapp-log:
$InputFileStateFile stat-myapp
$InputFileSeverity info
$InputFileFacility local0
$InputRunFileMonitor

这些参数是 rsyslog 的文件输入模块 imfile 的配置,用于监控自定义日志文件,并将日志内容转发或处理。以下是每个参数的详细解释:

$InputFileName

  • 作用:指定需要监控的自定义日志文件的路径。
  • 示例$InputFileName /var/log/myapp.log
    • 这意味着 rsyslog 将监控 /var/log/myapp.log 文件,捕获该文件中的日志条目。

$InputFileTag

  • 作用:为监控的日志文件生成一个标识标签,标识日志的来源。
  • 示例$InputFileTag myapp-log:
    • 这为从 /var/log/myapp.log 文件中读取的每条日志记录添加了 myapp-log: 这个标签。这个标签可以在 rsyslog 规则中用来匹配、过滤或转发特定日志。

$InputFileStateFile

  • 作用:指定一个状态文件,用来保存文件的读取状态(例如文件上次读取到的位置)。它用于在 rsyslog 重启后,继续从上次中断的地方读取日志。
  • 示例$InputFileStateFile stat-myapp
    • 这个状态文件 stat-myapp 会保存在 /var/spool/rsyslog/ 目录下,记录了 /var/log/myapp.log 文件的读取进度。

    • 如果不指定状态文件,rsyslog 默认会自动生成一个基于文件名的状态文件。

$InputFileSeverity

  • 作用:指定从该日志文件读取的日志的严重性级别(Severity)。严重性级别用于对日志进行分类,比如 infoerrorwarning 等。
  • 示例$InputFileSeverity info
    • 这表示将日志的严重性设置为 info 级别,意味着这些日志信息通常是常规操作信息。
    常见的严重性级别
    • emerg: 系统不可用
    • alert: 必须立即采取行动
    • crit: 严重情况
    • err: 错误
    • warning: 警告
    • notice: 正常但重要的信息
    • info: 信息性消息
    • debug: 调试消息

$InputFileFacility

  • 作用:指定日志的设施(Facility)。设施定义了日志消息的来源类别,用于将不同来源的日志分开。

  • 示例$InputFileFacility local0

    • 这意味着日志来源类别为 local0,这是可供用户自定义的日志设施之一。local0local7 是为用户定义的日志设施,常用于自定义应用程序日志。

    常见设施

    • auth: 认证系统使用
    • cron: 定时任务使用
    • daemon: 后台服务使用
    • kern: 内核日志
    • local0local7: 用户自定义使用
    • syslog: syslog 自身日志

$InputRunFileMonitor

  • 作用:启动对指定文件的监控。
  • 示例$InputRunFileMonitor
    • 这行指令告诉 rsyslog 开始监控你通过 $InputFileName 指定的文件。一旦文件有新日志生成,rsyslog 就会立即读取并处理这些日志。
b. 配置转发规则

在同一个配置文件中,添加规则将这些自定义日志转发到服务端。可以根据需要选择 UDP 或 TCP 进行转发:

  • 使用 UDP 转发:

if $syslogtag == 'myapp-log:' then @remote-host:514
  • 使用 TCP 转发:

if $syslogtag == 'myapp-log:' then @@remote-host:514

将remote-host 替换为服务端的 IP 地址或主机名,514 是syslog 的默认端口。

2. 校验rsyslog 配置

同前面一样,为了确保配置文件语法正确,执行以下命令:

rsyslogd -N1

这不,刚好发现了错误:

[root@localhost /etc]$ rsyslogd -N1
rsyslogd: version 7.4.7, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: invalid or yet-unknown config file command 'inputFileName' - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: invalid or yet-unknown config file command 'InputFileTag' - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: invalid or yet-unknown config file command 'InputFileStateFile' - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: invalid or yet-unknown config file command 'InputFileSeverity' - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: invalid or yet-unknown config file command 'InputFileFacility' - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: invalid or yet-unknown config file command 'InputRunFileMonitor' - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
rsyslogd: End of config validation run. Bye.
 

上面日志表示rsyslog的版本是7.4.7, 无法识别配置中的那些命令。看到这个,那说明是版本的问题了。

从错误信息来看,当前的 rsyslog 版本7.4.7,InputFileNameInputFileTag 等指令在该版本中无效或未知。

这种情况,要么升级rsyslog,要么修改配置的命令为当前版本。为了省事,我选择后者,修改配置:

# /etc/rsyslog.conf 或 /etc/rsyslog.d/ 文件# 加载 imfile 模块
module(load="imfile")# 配置文件监控
input(type="imfile"File="/var/log/myapp.log"Tag="myapp-log:"StateFile="stat-myapp"Severity="info"Facility="local0")# 转发日志到服务端
if $programname == 'myapp-log' then @logserver.example.com:514

在修改配置后,重新使用rsyslogd -N1命令检查配置是否正确。

3. 重启 rsyslog 服务

配置完成后,重启 rsyslog 服务以使新配置生效:

systemctl restart rsyslog
4. 检查防火墙设置

检查防火墙或者iptables的配置,确保能ping通服务端及其 514 端口。

5. 验证日志传输

客户端和服务端配置都修改完成了,现在验证日志是否能正确转发和接收。

  • 在客户端查看 /var/log/myapp.log 中的日志是否有新生成的日志。
  • 在服务端查看 /var/log/remote_myapp.log 文件,是否正确记录了从客户端转发过来的自定义日志。

如果没有日志,可以使用工具如 nc(netcat)进行测试:

echo "test log" | nc -u logserver.example.com 514

正常情况下, 服务端查看 /var/log/remote_myapp.log 文件中会出现"test log"的日志。如果没有,则需要检查下检查网络连接和防火墙设置,确保没有阻止日志转发。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

点餐小程序实战教程04变量定义和初始化

目录 1 什么是变量2 如何创建变量3 具体该选择什么类型4 变量的初始化5 await/async6 调试我们的程序7 运行我们的代码总结 日常碰到的最多的一句话是,我看到代码就发憷,我一点基础也没有。那低代码开发需要掌握什么样的基础,怎么才算是掌握了…

C与汇编之间的相互调用(29)

1 先来看一下 基本的调用规则。 注意: 程序通过 r1 -r4 来保存 传递的参数,如果 超过了 4个参数怎么办, 那就 放到栈里面。 注意: 堆栈是满递减, FD。 子程序的返回结果 会放到R0 里面。 2 然后是 c 语言调用 汇编语言…

MongoDB 5.0版本副本集集群

一、MongoDB 5.0版本副本集集群部署 什么是MongoDB的副本集 MongoDB的副本集(Replica Set)是一种用于提高数据库系统可用性、可靠性和数据冗余性的机制。副本集包含一组相互连接的MongoDB节点,其中包括一个主节点(Primary&#…

使用FastJson2将对象转成JSON字符串时,小数转换出错

maven坐标 <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.40</version> </dependency> 问题现象&#xff1a; 问题原因&#xff1a; IOUtils.write…

SSM框架学习(二:SpringFramework实战指南)

目录 一、SpringFramework介绍 1.总体技术体系 &#xff08;1&#xff09;单一架构 &#xff08;2&#xff09; 分布式架构 2.Spring 和 SpringFramework概念 &#xff08;1&#xff09;广义的 Spring&#xff1a;Spring 技术栈&#xff08;全家桶&#xff09; &#xff…

基于IndexDB+md-editor-v3实现的简单的文章书写小系统

基于IndexDBmd-editor-v3实现的简单的文章书写小系统 文章说明核心代码效果展示源码下载 文章说明 采用vue3 IndexDB 实现的个人仓库系统&#xff0c;采用markdown书写文章&#xff0c;并将文章信息存储在IndexDB数据库中&#xff0c;通过JavaScript原生自带的分词API进行文章…

STM32——串口通信(发送/接收数据与中断函数应用)

文章目录 通信&#xff1a;串口通信简介&#xff1a;1.双工/单工&#xff1a;2.同步/异步&#xff1a;3.电平&#xff1a;电平标准&#xff1a; 串口参数以及数据帧时序&#xff1a;数据帧&#xff1a;1.波特率和比特率&#xff1a;例&#xff1a;无校验&#xff0c;1位停止位 …

【WebGIS实例】(16)GeoServer 自定义样式 - 渲染矢量数据

1. 前言 本篇博客将会分享一系列的 GeoServer 样式&#xff0c;通过这些样式预先在服务端完成数据渲染&#xff0c;让前端应用更便捷的加载数据服务。 2. 面矢量 示例数据&#xff1a; {type: FeatureCollection,features: [{type: Feature,properties: {分类字段: 字段一…

数据权限的设计与实现系列6——前端筛选器组件Everright-filter使用探索

linear 功能探索 最终我们是需要使用 API 的方式&#xff0c;调用后端服务拉取数据填充筛选器组件&#xff0c;不过在探索阶段&#xff0c;直接用 API 方式&#xff0c;就需要构造 mock 数据&#xff0c;比较麻烦&#xff0c;因此先使用 Function 方式来进行功能验证。 组件初…

代理模式详解

1.基本介绍 代理模式&#xff1a;为一个对象提供一个替身&#xff0c;以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能;被代理的对象可以是远程对象、创建开销大的对象或需要安全控制…

记录:uniapp直播的弹幕的样式修改与发送弹幕会自动滚动到底部两个技巧

1、在直播页面的弹幕评论中&#xff0c;我们希望的样式是&#xff1a; 观众名字&#xff1a;评论 而且颜色有所区分&#xff0c;并在同一行显示 2、我们希望在发弹幕的时候可以回自动滚动到自己发的内容那里 一&#xff1a;弹幕样式修改 因为是小白&#xff0c;前端对于样式这…

苹果手机照片被删除?如何通过不同的方法来恢复照片

手机已经成为我们生活中不可或缺的一部分&#xff0c;它不仅仅是通讯工具&#xff0c;更是我们记录生活点滴的重要工具之一。然而&#xff0c;正如其他任何设备一样&#xff0c;iPhone上存储的照片有时也会不小心被删除或丢失。 别担心&#xff0c;即使你误删了重要的照片&…

重头开始嵌入式第三十四天(数据库二)

sqlite3的一些补充 目录 sqlite3的一些补充 1.事物 2.连接&#xff0c;联合 3.触发器 4.子查询 1.事物 数据库事务是数据库管理系统执行过程中的一个逻辑单位&#xff0c;它由一系列对数据库的操作组成。 一、事务的特性 1. 原子性&#xff08;Atomicity&#xff09…

Linux:目录及文件管理

目录及文件管理 cd的命令使用 . 当前目录 .. 父目录&#xff08;上一层&#xff09; ~ 表示家目录 家目录&#xff1a;专门存放用户个性化信息的目录 ~user&#xff1a;用户user的家目录 /root: 是Linux管理员的家目录 /home: 存放所有普通用户的家目录]# cd ~root #去…

大模型LLM算法工程师技术面试指南

大模型LLM算法工程师技术面试指南 AI大模型全套学习资料 “最先掌握AI的人&#xff0c;将会比较晚掌握AI的人有竞争优势”。 这句话&#xff0c;放在计算机、互联网、移动互联网的开局时期&#xff0c;都是一样的道理。 我在一线互联网企业工作十余年里&#xff0c;指导过不少…

Java异常类

目录 Java异常类 Java中的异常体系 抛出异常 处理异常 处理异常的两种方式 try...catch和throws的区别 finally关键字 抛出异常注意事项 自定义异常类 Java异常类 Java中的异常体系 在Java中&#xff0c;异常类的父类为Throwable类&#xff0c;在Throwable下&#x…

记一次高版本view-design的组件迁移到自身项目的低版本

背景 npm i -S view-design当前老项目使用view-design这个组件库&#xff0c;但是当我们去官网查看该组件库最新版本&#xff0c;竟然发现没有博主想用的image/ImagePreivew这两个基础组件 说实话&#xff0c;有点离谱了哈&#xff01;&#xff01; 自己造轮子&#xff1f; …

数据结构基本知识

一、什么是数据结构 1.1、组织存储数据 ---------》内存&#xff08;存储&#xff09; 1.2、研究目的 如何存储数据&#xff08;变量&#xff0c;数组....)程序数据结构算法 1.3、常见保存数据的方法 数组&#xff1a;保存自己的数据指针&#xff1a;是间接访问已经存在的…

分库分表核心理念

文章目录 分库&#xff0c;分表&#xff0c;分库分表什么时候分库&#xff1f;什么时候分表&#xff1f;什么时候既分库又分表&#xff1f;横向拆分 & 纵向拆分 分表算法Range 范围Hash 取模一致性 Hash斐波那契散列 严格雪崩标准&#xff08;SAC&#xff09;订单分库分表实…

【880高数】高等数学一刷错题整理

第一章 函数、极限、连续 2024.8.11日 1. 2. 3. 4. 5. 2024.8.12日 1. 2. 3. 4. 5. 6. 7. 8. 2024.8.13日 1. 2. 3. 4. 2024.8.14日 1. 2. 3. 4. 5. 第二章 一元函数微分学及其应用 2024.8.15日 1. 2. 3. 4. 5. 6. 2024.8.16日 1. 2. 3. 4. 5. 2024.8.17日 1. 2. 3. 4…