Syslog日志采集
- 1、Linux rsyslog服务
- 1.1、安装rsyslog
- 1.2、配置客户端
- 1.3、配置服务端
- 2、Filebeat 服务端
- 2.1、安装Filebeat
- 2.2、配置Filebeat
- 3、Java程序服务端
- 3.1、服务端代码
Syslog
日志采集需要syslog客户端
和syslog服务端
,客户端
负责发送日志、服务端
负责采集。
服务端可以是linux
系统的rsyslog
服务,也可以是Java
程序服务、也可以是第三方Filebaet
服务。
1、Linux rsyslog服务
Linux
系统一般自带rsyslog
服务,可修改配置指定此设备属于客户端还是服务端。
1.1、安装rsyslog
#查询是否安装rsyslog
$ rpm -qa | grep rsyslog
#更新或安装rsyslog
$ sudo yum install rsyslog
#$ sudo apt-get install rsyslog
#$ sudo apk add rsyslog
1.2、配置客户端
客户端虚机地址:192.168.154.111
,服务端地址:192.168.154.222
修改/etc/rsyslog.conf
,添加如下配置
#第一个*表示所有的日志类别,
#192.168.154.222是服务端地址,
#一个@表示使用UDP协议,两个表示使用@TCP协议
*.* @192.168.154.222
重启服务:
systemctl restart rsyslog
1.3、配置服务端
修改/etc/sysconfig/rsyslog
配置文件
SYSLOGD_OPTIONS="-r -c 5"
修改/etc/rsyslog.conf
配置文件
#使用UDP接收方式:
$ModLoad imudp
$UDPServerRun 514#日志存放位置:客户端传来的日志记录在remote.log中
*.* /var/log/syslog/remote.log
重启服务:
systemctl restart rsyslog
在客户端测试产生日志
$ logger 'hello world'
此时客户端产生的所有日志都会传输至服务端,并保存在服务端的/var/log/syslog/remote.log
文件中
2、Filebeat 服务端
2.1、安装Filebeat
#1、下载
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.3.2-linux-x86_64.tar.gz
#2、解压
tar xzvf filebeat-8.3.2-linux-x86_64.tar.gz
2.2、配置Filebeat
进入安装目录,修改filebeat.yml
文件
#输入:日志类型:syslog; 日志格式:rfc3164; 使用协议:udp; 服务端地址(本机ip)和端口
filebeat.inputs:
- type: syslogformat: rfc3164protocol.udp:host: "0.0.0.0:514"#输出:直接打印至控制台,也可输出至es、kafka、logstash等。
output.console:pretty: true#filebeat.inputs:
#- type: syslog
# format: rfc5424
# protocol.tcp:
# host: "localhost:9000"
启动filebeat:
./filebeat -e -c filebeat.yml
客户端配置都一样,同上文 1.2、配置客户端
即可采集到客户端产生的所有系统日志。
Filebeat日志采集详细使用说明:Filebeat+Kafka+ELK日志采集(二)——Filebeat
3、Java程序服务端
引入syslog
依赖包
<dependency><groupId>org.graylog2</groupId><artifactId>syslog4j</artifactId><version>0.9.60</version>
</dependency>
3.1、服务端代码
//传入UDP协议参数实例化具体服务器SyslogServerIF serverIF = SyslogServer.getInstance(SyslogConstants.UDP);//从服务器里获取配置信息变量SyslogServerConfigIF config = serverIF.getConfig();//设置监听地址0.0.0.0为监听网络内全部地址//设置监听地址为514,514为syslog默认地址config.setHost("0.0.0.0");config.setPort(514);//放入接收方法config.addEventHandler(new SyslogServerSessionEventHandlerIF() {@Overridepublic Object sessionOpened(SyslogServerIF syslogServerIF, SocketAddress socketAddress) {return null;}@Overridepublic void event(Object o, SyslogServerIF syslogServerIF, SocketAddress socketAddress,SyslogServerEventIF syslogServerEventIF) {System.out.println("receive from:" + socketAddress + " message" + syslogServerEventIF.getMessage());}@Overridepublic void exception(Object o, SyslogServerIF syslogServerIF, SocketAddress socketAddress, Exception e) {}@Overridepublic void sessionClosed(Object o, SyslogServerIF syslogServerIF, SocketAddress socketAddress, boolean b) {}@Overridepublic void initialize(SyslogServerIF syslogServerIF) {}@Overridepublic void destroy(SyslogServerIF syslogServerIF) {}});//初始化服务器serverIF.initialize(SyslogConstants.UDP, config);//设置服务器变量,用来外部调用关闭setServerIF(serverIF);//服务器启动serverIF.run();System.out.println("server start udp");
客户端配置都一样,同上文 1.2、配置客户端
服务端代码启动后,即可接收客户端所有系统日志。