操作步驟
Server端配置syslog-ng
- 安裝syslog-ng
sudo yum install epel-release -y && sudo yum install syslog-ng -y - 配置syslog-ng
在syslog-ng的配置文件中,有5種不同的項目,每個項目以1個特殊關鍵詞開頭:
- options
- 用來調(diào)節(jié)syslog-ng的守護進程。
- source
- 告知syslog-ng從什么地方收集日志。source內(nèi)容可以包括Unix套接字、TCP或UDP套接字、文件或管道。
- destination
- 用來決定syslog-ng將向哪些地方發(fā)送日志,可以指定為文件、管道、Unix套接字、TCP或UDP套接字、TTY或程序等。
- filter
- 結合source、destination和filter使用,選擇syslog程序和日志級別。
- log
- 將以上關鍵字和log結合使用,可以精確定義消息日志保存的地方。
- 將以上關鍵字和log結合使用,可以精確定義消息日志保存的地方。
cd /etc/syslog-ng && sudo cp syslog-ng.conf syslog-ng.conf.old
sudo vi syslog-ng.conf
# add
# add a log source
source s_remote {
tcp(ip("192.168.0.104") port(20514) max-connections(500));
};
# collect log from remote host
destination d_remote {
# write log file to hostname path,log file named by y.m.d.log
file("var/log/syslog-ng/${HOST}/${YEAR}.${MONTH}.${DAY}.log" perm(0644));
};
# add to log
log [
source(s_remote);
destination(d_remote);
};
- 修改日志路徑的SELinux策略
semanage fcontext -a -t syslog-ng "/var/log/syslog-ng(/.*)?" && restorecon /var/log/syslog-ng - 添加防火墻
firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.1/24 port port=20514 protocol=tcp accept' --permanent - 啟動服務
sudo systemctl start syslog-n - 如果啟動失敗
使用命令/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid查看具體的錯誤提示
Agent端配置syslog-ng
安裝
sudo yum install epel-release -y && sudo yum install syslog-ng -y修改配置文件
cd /etc/syslog-ng/ && sudo cp syslog-ng.conf syslog-ng.conf.old
sudo vi syslog-ng.conf
# add
# add a log source
source s_net {
# tell syslog-ng read log from /dev/log;/dev/log link to /var/run/log
unix-dgram("/dev/log");
# if use systemctl start syslog-ng start faild,use this
# unit-stream("/dev/log");
# create message by internal
internal();
};
# send log to remote syslog server
destination d_net {
tcp("192.168.0.104" port(20514) max-connections(10));
};
# add to log
log [
source(s_net);
destination(d_net);
};
- 啟動服務
sudo systemctl start syslog-ng
配置加密服務
為保證日志傳輸?shù)陌踩?,為syslog-ng日志的傳遞設置加密服務。
使用服務器生成的公鑰,對client端傳送的日志文件進行加密,所有client端使用相同的公鑰進行加密。
- 在server端生成加密證書和私鑰
# cert dir
cd /etc/syslog-ng && sudo mkdir cert && cd cert
sudo openssl -x509 -nodes -days 365 -newkey rsa:2048 -outkey syslog_pri.key -out syslog_pub.crt
- 配置server的syslog-ng.conf文件
# destination在tcp或udp條目中添加
tcp(ip("192.168.0.104") port(20514) tlc(key-file("/etc/syslog-ng/cert/syslog_pri.key") cert-file("/etc/syslog-ng/cert/syslog_pub.crt") peer-verify(optional-untrusted)));
- 將公鑰分別復制到client端的 /etc/syslog-ng/cert 目錄中,并生成哈希名的鏈接
openssl -x509 -noout -hash -in syslog_pub.crt && ln -s syslog_pub.crt xxxx.0 - 配置client端的syslog-ng.conf文件
tcp("192.168.0.104" port(20514) tlc(ca-dir("/etc/syslog-ng/cert")));
- 配置完成后,對server和client分別重啟syslog-ng服務
sudo systemctl restart syslog-ng
注意
如果系統(tǒng)開啟了SELinux,在使用tcp或udp進行日志傳輸時,選擇端口時要注意SELinux中對syslog-ng端口的設定,如果使用自定的端口,還需要將端口加入到SELinux中。

semanage_sshd_port
semanage port -a -t syslogd_port_t -p tcp 30514