java - 通过tcp向logstash发送数据

标签 java tcp logstash logstash-configuration

我在从一个简单的 Java 应用程序向我的 logstash 实例发送日志数据时遇到了一些问题。对于我的用例,我试图避免使用 log4j logback,而是通过原始 tcp 套接字在单独的行上批处理 json 事件。这样做的原因是我希望通过 aws lambda 函数将数据发送到 logstash,这意味着将日志存储到磁盘可能无法解决问题。

我的 logstash 配置文件如下所示:

input {
  tcp {
        port => 5400
        codec => json
  }
}
filter{
  json{
    source => "message"
  }
}
output {
   elasticsearch {
      host => "localhost"
      protocol => "http"
      index => "someIndex"
   }
}

我现在的 java 代码只是打开一个到 logstash 服务器的 tcp 套接字并直接发送一个事件。

Socket socket = new Socket("logstash-hostname", 5400);
DataOutputStream os = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
os.writeBytes("{\"message\": {\"someField\":\"someValue\"} }");
os.flush();
socket.close();

应用程序正确连接到 logstash 主机(如果 logstash 未启动,连接时会抛出异常),但我们的 ES 集群中没有显示任何事件。非常感谢有关如何执行此操作的任何想法!

我在 logstash.err、logstash.log 或 logstash.stdout 中没有看到任何指向可能出错的相关日志。

最佳答案

问题是您的数据已经在您的输入中被反序列化,您正在尝试在您的过滤器中再次反序列化它。只需删除 json 过滤器。

以下是我如何重新创建您的场景:

# the json input
root@monitoring:~# cat tmp.json 
{"message":{"someField":"someValue"}}


# the logstash configuration file
root@monitoring:~# cat /etc/logstash/conf.d/test.conf
input {
  tcp {
    port => 5400
    codec => json
  }
}

filter{
}

output {
   stdout {
     codec => rubydebug
   }
}


# starting the logstash server
/opt/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf


# sending the json to logstash with netcat
nc localhost 5400 <  tmp.json

# the logstash output via stdout
{
       "message" => {
        "someField" => "someValue"
    },
      "@version" => "1",
    "@timestamp" => "2016-02-02T13:31:18.703Z",
          "host" => "0:0:0:0:0:0:0:1",
          "port" => 56812
}

希望对你有帮助

关于java - 通过tcp向logstash发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35143576/

相关文章:

java - 有时速度并不能替代

tcp - 构建DHCP数据包(DHCPDISCOVER),数据包结构

elasticsearch - logstash索引文本文件

elasticsearch - 无法将MySQL的数据同步到Logstash

java - 重复数据删除迭代器

java - 使用java api删除未使用的标签?

c - 在c中使用TCP的服务器-客户端

networking - 如果您可以在浏览器中访问比 TCP 更低的级别

elasticsearch - 更新 ElasticSearch 中的记录

java - 保存整数值的位图