rsyslog配置(服务端、客户端)-UDP-TCP转发-imfile自定义应用程序的日志推送
## 概念 #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 #这里日志路径使用默认的路径
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/17690890.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步