linux中怎么配置syslog实现日志转发

一、syslog协议

linux系统中大部分日志是通过一种syslog机制产生和维护的。syslog是一种协议,分为客户端和服务器端。客户端产生日志,服务器端接收日志。并对接收的日志做出保存到文件或其他方式的处理。

在linux中,常见syslog服务器端程序是syslogd守护进程。这个程序从三个地方接收日志

【1】: unix域套接字 /dev/log

如何在Linux中配置syslog实现日志转发

【2】:udp端口514

【3】:特殊的设备 /dev/klog

相应的,产生日志的消息的程序就需要通过上述三种方式写入消息。对于大多数程序而言就是向/dev/log这个套接字发送日志消息。

在unix操作系统上,syslog广泛用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一存储。或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具,安全管理系统,日志管理系统。 完整的syslog日志包含

【1】:产生日志的程序模块

【2】:严重性

【3】:时间

【4】:主机名或IP

【5】:进程名

【6】:进程ID

【7】:正文

在2001年定义的RFC3164中,描述了BSD syslog协议:http://www.ietf.org/rfc/rfc3164.txt,不过这个规范的很多内容都不是强制性的,常常是“建议”或者“约定”,也由于这个规范出的比较晚,很多设备并不遵守或不完全遵守这个规范。接下来就介绍一 下这个规范。

约定发送syslog的设备为Device,转发syslog的设备为Relay,接收syslog的设备为Collector。Relay本身也可以发送自身的syslog给Collector,这个时候它表现为一个Device。Relay也可以只转发部分接收到的syslog消息,这个时候它同时表现为Relay和Collector。

syslog消息发送到Collector的UDP 514端口,不需要接收方应答,RFC3164建议 Device 也使用514作为源端口。规定syslog消息的UDP报文不能超过1024字节,并且全部由可打印的字符组成。完整的syslog消息由3部分组成,分别是PRI、HEADER和MSG。大部分syslog都包含PRI和MSG部分,而HEADER可能没有。

二、配置syslog服务端和客户端,实现日志转发

环境:ubantu16.04

1、服务端

<
1>
修改/etc/default/rsyslog

>
修改/etc/sysconf/syslog 修改SYSLOGD_OPTIONS为 "
-r -x -m 0"

-r表示允许接收外来的消息

-x表示不解析DNS,

-m 0表示时间戳标记间隔,

如果指定只接受某个或多个ip过来的日志,例"
-s 168.1.1.1:168.1.1.2"

>
修改/etc/rsyslog.conf

取消注释:

$ModLoad imudp.so
$UDPServerRun 514

在文件末尾添加这两句

syslog.info;
syslog.!err;
syslog.!crit;
syslog.!alert /var/log/mylog #info信息记录到日志服务器的/var/log/mylog中
syslog.err /var/log/testerror #error信息记录到日志服务器的/var/log/testerror中 2 、客户端

修改/etc/syslog.conf 添加

取消注释:

$ModLoad imudp.so
$UDPServerRun 514

在末尾增加这两句 syslog.info @IP(IP为服务端IP地址)

3、服务重启

4、测试

在客户端运行下面代码,可在服务端/var/log/mylog中看到日志已经存入到服务端

#include <
stdio.h>

#include <
syslog.h>

int main(int argc, char* argv[])
{
//openlog(argv[0], LOG_CONS | LOG_PID, LOG_USER);

int count = 0;

while(count<
5){
syslog(LOG_SYSLOG|LOG_INFO, "
%d:, syslog user test"
, count);

count++;

}
//closelog();

return 0;

}

在Linux系统中,syslog是一款非常重要的软件,用来记录日志。当然,仅仅记录日志是不能满足我们的需求的,我们还需要对日志进行转发,方便我们进行统计分析。下面介绍下如何在Linux中配置syslog实现日志转发。
第一步:安装rsyslog
rsyslog是syslog的改进版本,我们需要使用它来实现日志转发。通常情况下,linux系统默认安装有rsyslog。如果不确定是否安装,可以使用以下命令进行检查:
$ rpm -qa | grep rsyslog
如果返回了 rsyslog 的版本信息,那么说明已经安装了。如果没有安装,可以使用以下命令进行安装:
$ sudo yum install rsyslog
第二步:配置转发
在rsyslog中,可以使用以下两种方法进行转发:
1. 使用TCP或UDP协议转发
2. 使用Reliable Syslog Protocol (RFC 3195) 进行转发
以下是使用TCP或UDP协议进行转发的配置:
打开rsyslog的配置文件,路径为 /etc/rsyslog.conf,找到以下两行:
# Provides UDP syslog reception
#$ModLoad imudp
将其前面的“#”去掉,使其变为:
# Provides UDP syslog reception
$ModLoad imudp
接着,在该行下方输入以下内容,使用UDP协议将日志转发到指定的IP地址和端口号(这里以IP地址为192.168.1.100,端口号为514为例):
*.* @192.168.1.100:514
以上是配置UDP协议的转发,如果需要使用TCP协议,只需要把 imudp 修改为 imtcp 即可。
第三步:重启rsyslog服务
配置完后,我们需要重启rsyslog服务,让其重新载入配置文件。执行以下命令即可完成重启:
$ sudo systemctl restart rsyslog
总结
以上就是在Linux中配置syslog实现日志转发的方法。rsyslog的功能非常强大,还有很多其他高级功能,需要自行探索。希望这篇文章能对你有所帮助。