Exp1: syslog-ng v3.5
本教程适用于你已经大致了解syslog-ng相关配置的情况,在你对syslog-ng一无所知的情况下,建议阅读官方文档
CentOS 7作为服务端
Ubuntu14 作为客户端
CentOS 7 安装syslog-ng : yum -y install syslog-ng
Ubuntu 14 安装syslog-ng : apt-get install syslog-ng
配置文件路径 /etc/syslog-ng/syslog-ng.conf
服务端配置文件,添加以下内容:
source s_net { syslog(transport(tcp) port(601)); }; # 监听本机601端口,客户端将会发送日志到该端口
destination d_log { file("/var/log/test.log"); }; # 将接收到的日志记录到本机/var/log/test.log
log { source(s_net); destination(d_log); }; # 开启记录功能
注:log里面本来有三个参数,还有一个过滤器filter,建议在测试时不使用过滤器,以免不好定位没有数据的原因
客户端配置文件,添加以下内容:
source s_src { system();internal(); }; # 这个是安装自带的日志源,直接作为测试使用
destination d_centserver { syslog("192.168.205.141" transport("tcp") port(601)); }; # 将日志发送到这里设置的地址
log { source(s_src); destination(d_centserver); }; # 开启记录功能
在客户端和服务端使用 syslog-ng --syntax-only 检查配置文件是否存在语法错误
重启客户端和服务端的syslog-ng,systemctl restart syslog-ng
如果没有数据,检查系统的firewalld服务和iptables服务是否关闭,有可能被拦截了。
可以使用tcpdump工具检测服务端的601端口,查看接收到的数据包情况:
tcpdump tcp port 601 -i ens33 -i 为你系统的网口,CentOS必带这个参数
syslog-ng udp 默认使用514端口 tcp默认使用601
如果在514端口使用tcp协议传输,会导致syslog-ng不记录日志
Exp2: syslog-ng v3.14
使用syslog协议发送日志,服务端CentOS 7 客户端 Ubuntu14.04
服务端配置:
source suricata { syslog( port(2010) transport("tcp")); };
# 其实syslog()中还有ip()选项,不填的话默认为监听所有
destination d_tcp { file("/var/log/dtcp.log"); };
log { source(suricata); destination(d_tcp); };
客户端配置:
source s_src {
system();
internal();
};
destination d_centserver { syslog("192.168.0.129" transport("tcp") port(2010)); };
log { source(s_src); destination(d_centserver); };
Exp3:syslog()方法使用的是新版本的syslog协议进行同步日志,network()方法使用的BSD-syslog协议同步日志,下面为network语法:
客户端:
source s_log { file("/var/log/logtest.log"); file("/var/log/suricata/sys.log"); file("/var/log/suricata/fast.log"); };
destination d_centserver { network("192.168.1.125" transport("tcp") port(1999)); };
log { source(s_log); destination(d_centserver); };
服务端
source waf_server_accesslog { network(
ip("0.0.0.0")
port(1999)
flags(syslog-protocol)
transport("tcp")
); };
destination accesslog_path { file("/opt/log/access.log"); };
log { source(waf_server_accesslog); destination(accesslog_path); };
Exp4:客户端监听本地UNIX-SOCKET,然后将日志发往服务端。服务端接收日志后,存入redis
客户端配置:
source s_pysyslog {
unix-stream("/etc/syslog-ng/pysyslog.socket"
max-connections(50)
encoding("UTF-8")
flags( assume-utf8)
);
};
destination d_server { network("192.168.8.188" transport("tcp") port(1234)); };
log { source(s_pysyslog); destination(d_server); };
服务端配置:如果使用了多个同样的驱动程序接收日志,需要使用persist-name字段来标识。
source s_log{
network(
ip("0.0.0.0")
port(1234)
transport("tcp")
encoding("UTF-8")
flags(assume-utf8, no-parse)
);
};
destination d_redis{
redis(
persist-name('my_syslog')
host("127.0.0.1")
port(6379)
command("RPUSH", "syslog", "${MSG}")
retries(3)
);
};
log { source(s_log); destination(d_redis); };