## 概念
#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 #这里日志路径使用默认的路径