Logstash v7.3 处理基于TCP传输的日志数据
Logstash 可以从TCP Socket 中获取日志数据,和stdin和file方法一样,假定每一行都是一个日志。
下面的演示过程如下,通过Logstash获取来自TCP Server端的输出数据。
一、将Logstash的input 部分配置为客户端
配置Logstash端,这里参数mode 用于设置Logstash 作为客户端,port 为指定的端口和Java代码中保持一致。
input {
tcp {
host => "127.0.0.1"
mode => "client"
port => 6000
}
}
output {
stdout {}
}
我们将上述配置文件 tcp-input.conf 放置到 D:\ElasticStack\logstash-conf 目录中。
二、将Java应用程序设计为服务器端
用于发生信息的程序实现代码如下,定时向Logstash 发生Welcome ... 消息。
package com.rickie;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws IOException, InterruptedException {
ServerSocket serverSocket = new ServerSocket(6000);
for (int i = 0; i < 10; i++) {
// 阻塞等待消息
Socket socket = serverSocket.accept();
OutputStream outputStream = socket.getOutputStream();
outputStream.write(("Welcome, logstash" + i).getBytes());
outputStream.close();
Thread.sleep(1000000);
socket.close();
}
serverSocket.close();
}
}
三、进行调试
依次启动Java应用程序,也就是启动TCP 服务端应用,模拟日志数据输入。
然后启动logstash,也就是TCP 客户端,接收来自TCP Server的日志数据。
bin\logstash -f ..\logstash-conf\tcp-input.conf
服务器端发送的字符串,会经过Logstash 这个管道流向了屏幕(也就是客户端)。