首页 > 编程语言 >rsyslog配置(服务端、客户端)-UDP-TCP转发-imfile自定义应用程序的日志推送

rsyslog配置(服务端、客户端)-UDP-TCP转发-imfile自定义应用程序的日志推送

时间:2024-07-12 15:45:25浏览次数:18  
标签:UDP 自定义 imfile syslog rsyslog 服务器 日志 514

## 概念
#Syslog服务器可以用作一个网络中的日志监控中心,所有能够通过网络来发送日志的设施(包含了Linux或Windows服务器,路由器,交换机以及其他主机)都可以把日志发送给它。 
通过设置一个syslog服务器,可以将不同设施/主机发送的日志,过滤和合并到一个独立的位置,这样使得你更容易地查看和获取重要的日志消息

#Rsyslog 作为标准的syslog守护进程,预装在了大多数的Linux发行版中。在客户端/服务器架构的配置下,rsyslog同时扮演了两种角色:
	·1.作为一个syslog服务器,rsyslog可以收集来自其他设施的日志信息;
	·2.作为一个syslog客户端,rsyslog可以将其内部的日志信息传输到远程的syslog服务器。

 

## 2、syslog标准基础
#syslog标准基础
当通过syslog机制来收集日志时,有3个必须要考虑到的重要事情:
•设施层级: 监听何种类型的进程
•严重性 (优先) 级别: 收集何种级别的日志消息
•目标: 发送或记录日志消息到何处

#设施层级定义了一种用来对内部系统进程进行分类的方法,linux中的一些常见的设施包括:
•auth: 身份验证相关的消息(登录时)
•cron: 进程或应用调度相关的消息
•daemon: 守护进程相关的消息(内部服务器)
•kernel: 内核相关的消息
•mail: 内部邮件服务器相关的消息
•syslog: syslog 守护进程本身相关的消息
•lpr: 打印服务相关的消息
•local0 - local7: 用户自定义的消息 (local7 通常被Cisco 和 Windows 服务器 使用)

#	严重性(优先)级别有固定的标准缩写和指代的值,其中的数字7具有最高的级别,这些级别包含了:
•emerg: Emergency(紧急)- 0
•alert: Alerts (报警)- 1
•crit: Critical (关键)- 2
•err: Errors (错误)- 3
•warn: Warnings (警告)- 4
•notice: Notification (通知)- 5
•info: Information (消息)- 6
•debug: Debugging (调试)- 7

#目标  语句会让一个syslog客户端来执行以下三个任务之一:
1.保存日志消息到一个本地文件;
2.通过TCP/UDP将消息路由到远程的syslog服务器中;
3.将其发送到一个标准输出中,例如控制台。

 

rsyslog有三种转发消息的方式:
UDP传输:它的损耗很大,但很标准;
TCP传输:它只在某些情况下丢失消息,但大多数情况下是正常的;
RELP传输:而RELP传输不会丢失消息,但目前仅作为rsyslogd 3.15.0及以上版本的一部分可用。(最优传输方式)
#要通过UDP将消息转发到另一个主机,请在主机名前面加上at符号(“@”)。
#要通过普通tcp转发,请在前面加上两个@号(“@@”)。
#要通过RELP转发,请在主机名前面加上字符串“:omrelp:”。    如*.* :omrelp:192.168.177.160:514

syslog服务端(接收日志端)配置

#rsyslog守护进程来自于当前的linux发布版本的预装模块,但是默认并没有启动。
为了能够让rsyslog守护进程能够接受外部的消息,需要编辑其配置文件:
1、打开配置文件:$ vim etc/rsyslog.conf
2、开启UDP监听514端口、添加这两行:(UDP通信)
    ----------------------------------------------
    ·$ModLoad imudp
    ·$UDPServerRun 514
    #如果是coentos7 直接把这两行的 # 删掉就行
    #这会使得rsysolog守护进程能够在UDP端口514上接受日志消息了---UDP是一种比TCP速度快,但是并不具有TCP一样的数据流的可靠性
    ----------------------------------------------------------------------------------------------------------------------
3、(可选择开启)如果你需要使用可靠的传送机制TCP,就可以通过取消以下行的注释:
    $ vim etc/rsyslog.conf
    ---------------------------------------------------------------------------------
    $ModLoad imtcp
    $InputTCPServerRun 514 
    #可开可不开(TCP通信-可以UDP一起开)
    #需要注意的是,TCP和UDP可以被同时生效来监听TCP/UDP 连接。
    -----------------------------------------------------------------------------------
4、创建日志接收模板:
    #注意:一般系统如centos7默认创建了接受日志的模板路径:如下图

开启514端口:可同时开启UDP和TCP

创建日志接收模板(有些系统默认创建开启、可不动)

5、如果想要自定义创建接收模板、方法如下:
    ·打开配置文件:vim /etc/rsyslog.conf
    ·在GLOBAL DIRECTIVE块前追加以下的模板
    --------------------------------------------------
   * #方式一:将所有从远程客户端接受到的消息写入到以远程日志发送机器的 “主机名”命名的目录和在该目录下以 “应用程序名”命名的日志文件中
    $template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *          #RemoteLogs	日志模板名称  后面跟着日志文件保存的名称和路径
    *.*  ?RemoteLogs                #将RemoteLogs模板应用到所有接收到的日志上
    & ~                             #表示了一个重定向规则,被用来告知rsyslog守护进程停止对日志消息的进一步处理,并且不要在本地写入
    
   * #方式二:想要将所有从远程客户端接受到的消息写入到一个以它们的IP地址或(主机名%HOSTNAME%)命名的单个文件中,可以使用以下的模板。在此我们为该模板赋予了“IpTemplate”名称。(与方式一相同)
    $template IpTemplate,"/var/log/%FROMHOST-IP%.log" 
    *.*  ?IpTemplate 
    & ~                             #如果不写这个 那么syslog日志还会写一份到本地的message里
    
    方式三:使用自定义日志模板:如使用上面的$template RemoteLogs模板:
    info,mail.none,authpriv.none,cron.none    ?RemoteLogs
    
    #方式一与方式二实际工作中常用、将不同主机与不同程序的的日志分开写入文件中、不至于所有日志都写入到message中、导致提取日志困难
    #可以使用的变量有:
    ```
    %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, 
    %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %yearyear%, %yearmonth%, %$day%
    ```
    ------------------------------------------------------------------------------------------------------------------------------------
    
    6、重启rsyslog:
    7、查看514端口是否已开启:netstat -tulpn | grep rsyslog
    #在UDP监听端口下工作的rsyslog守护进程会有类似下面的输出。
    1.udp     0 0    0.0.0.0:514    0.0.0.0:*      551/rsyslogd 
    2.udp6    0 0    :::514         :::*           551/rsyslogd

方式二、方式三的配置结果:

 

`syslog客户端(日志推送端)配置`

服务器内的设施现有的日志

1、编辑配置文件:vim /etc/rsyslog.conf
2、添加以下声明到文件底部,将IP地址替换为你的远程rsyslog服务器的IP地址:
---------------------------------------------------
*.* @192.168.1.25:514
#解析:*.* 是指所有设施的所有日志 发送到 192.168.1.25:514 为日志发送的目标服务器  514端口默认
--------------------------------------------------------------------------------------------------
3、(可选择配置)如果需要更为可靠的协议,如TCP,而rsyslog服务器也被配置为监听TCP连接、
可以在远程主机的IP地址前添加一个额外的@字符,像下面这样:
-------------------------------------------------------------
*.* @@192.168.1.25:514
#注意:也可以将rsyslog服务器的IP地址替换成它的主机名
--------------------------------------------------------------
4、(可选择配置)如果你只想要转发服务器上的指定设备的日志消息,比如说内核设备,那么你可以在rsyslog配置文件中使用以下声明:
-----------------------------------------
kern.* @192.168.1.25:514		
#kern.*    #指kern 的所有日志
-------------------------------------------
5、配置完重启rsyslog服务即可
6、测式:
    客户端输入:logger -t kern -p err "aaaaaaaaaaa"
    服务端查看message日志看能否接收到 kern: aaaaaaaaaaa  这条日志

 

imfile模块

自定义应用程序的syslog推送配置

场景:如果不是所属设施的日志、而是自定义的应用程序(如客户端上安装了ocs程序、它的日志产生在/var/log/ocs.log)
现在,需要将它的日志定向到rsyslog服务器,这可以通过像下面这样在rsyslog配置文件中加载imfile模块来实现:

1、首先,加载imfile模块:
-----------------------------------------------
module(load="imfile" PollingInterval="5")
#加载 imfile 模块并设置轮询间隔为 5 秒
-----------------------------------------------
2、然后,继续添加如下、指定日志文件的路径、以便imfile模块可以检测到、(添加在module(load="imfile" PollingInterval="5"下边即可) :
----------------------------------------------------------------------------
input(type="imfile"                        #输入模块类型是‘imfile’:用于监视文件的变化并将其内容发送到日志系统
File="/var/log/foobar.log"                 #指定应用程序的日志路径
Tag="foobar"                               #通过Tag字段标记该日志由哪个进程产生
Severity="error"                           #严重级别设置为 "error"
Facility="local7")                         #设备为 "local7"(这只是一个设备标识符)
--------------------------------------------------------------------------------------------------------------------
3、最后,定向local7设备到远程rsyslog服务器:
----------------------------------------------
local7.* @192.168.177.160:514

#Syslog 使用一个设备标识符来标识生成日志消息的设备或应用程序。
#这些设备标识符被分为八个设备设施(facility),分别用数字 0 到 7 表示。其中,"local7" 是其中之一
#具体来说,"local7" 设备标识符通常用于本地设备或应用程序生成的自定义日志消息。
#它可以用于记录特定应用程序的日志,或者用于与特定系统配置相关的日志。
-------------------------------------------------------------------------------------------------
4、重启syslog进程

------------------------完整配置如下------------------------------
module(load="imfile" PollingInterval="5")
input(type="imfile"                             #输入模块类型是‘imfile’:用于监视文件的变化并将其内容发送到日志系统
File="/var/log/foobar.log"                      #指定应用程序的日志路径
Tag="foobar"                                    #通过Tag字段标记该日志由哪个进程产生
Severity="error"                                #严重级别设置为 "error"
Facility="local7")                              #设备为 "local7"(这是一个设备标识符)
local7.* @192.168.1.25:514	                    #定向local7设备到远程rsyslog服务器
-------------------------------------------------------------------------

 

查看日志的接收

1、上面配置完后去到接收端(服务器)查看日志

使用tail -f /var/log/message     #这里日志路径使用默认的路径

标签:UDP,自定义,imfile,syslog,rsyslog,服务器,日志,514
From: https://www.cnblogs.com/littlecc/p/17690890.html

相关文章

  • 【日常记录-Java】自定义进程池
    Author:赵志乾Date:2024-07-12Declaration:AllRightReserved!!!1.简介    服务器上有些进程需要池化管理,使用SpringBoot构建Web服务提供管理api,内部使用自定义的进程池维护已启动的进程;    核心点: 进程池管理的进程都会使用系统的一个端口对外提供服务; ......
  • 演示:【Avalonia-Controls】Avalonia皮肤,主题,自定义控件,数据库,系统模块资源库
    一、目的:分享一个Avalonia皮肤,主题,自定义控件,数据库,系统模块资源库开源地址:GitHub-HeBianGu/Avalonia-Controls:Avalonia控件库Nuget包地址:NuGetGallery|PackagesmatchingHeBianGu.AvaloniaUI.演示视频地址:【Avalonia-Controls】Avalonia工具组件皮肤库v1.0.0_......
  • 最新AI一站式系统源码-ChatGPT商业版系统源码,支持自定义AI智能体应用、AI绘画、AI视频
     一、前言人工智能语言模型和AI绘画在多个领域都有广泛的应用.....SparkAi创作系统是一款基于ChatGPT和Midjourney开发的智能问答和绘画系统,提供一站式AIB/C端解决方案,涵盖AI大模型提问、AI绘画、AI视频、文档分析、图像识别和理解、TTS&语音识别、AI换脸等多项功能。......
  • 在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采
    DNS(DomainNameSystem)确实既使用UDP协议也使用TCP协议,这是因为不同的DNS操作有不同的需求和优化目标。1.UDP协议的使用DNS主要使用UDP协议,这是由于UDP的无连接性质和较低的开销。以下是使用UDP的一些情况及其原因:标准查询:何时使用:对于大多数DNS查询,特别是常见的域名解......
  • Python UDP编程之实时聊天与网络监控详解
    概要UDP(UserDatagramProtocol,用户数据报协议)是网络协议中的一种,主要用于快速、简单的通信场景。与TCP相比,UDP没有连接、确认、重传等机制,因此传输效率高,但也不保证数据的可靠性和顺序。本文将详细介绍Python中如何使用UDP协议进行网络通信,并包含相应的示例代码,帮助全面掌......
  • 多线程中自定义线程池与shiro导致的权限错乱问题解决
    importorg.apache.shiro.SecurityUtils;importorg.apache.shiro.subject.Subject;importorg.apache.shiro.util.ThreadContext;importjava.util.concurrent.*;publicclassShiroAwareThreadPoolExecutorextendsThreadPoolExecutor{publicShiroAwareThread......
  • 自定义PageHelper分页工具
    今天写了一个需要用到分页查询的需求大概是这样的有一张项目表和一张报警表如下:项目表:报警表:现在我就是要根据这个项目名称,报警类型和报警时间来查询报警列表.项目可以模糊查询,看似是很简单的一个需求,但是我遇到了一个问题我的大概思路就是先用项目名称去项目表......
  • Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和
    场景存储过程存储过程是一组为了完成特定功能的SQL语句集合。使用存储过程的目的是将常用或复杂的工作预先用SQL语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。当以后需要数据库提供与己定义好的存储过程的功能相同的服务时,......
  • 呼叫中心遭遇UDP攻击,如何快速恢复服务?
    在数字化时代,呼叫中心作为企业与外界沟通的重要桥梁,其稳定运行至关重要。然而,当突然遭遇UDP(用户数据报协议)攻击时,那种措手不及的感觉仿佛被洪流淹没,服务中断、客户不满接踵而至。作为一名曾亲身经历者,我想分享一些实战经验,帮助你快速恢复服务,并有效应对UDP攻击的威胁。惊魂一......
  • Perl词法作用域:自定义编程环境的构建术
    ......