【发布时间】:2018-12-25 10:13:14
【问题描述】:
我正在尝试通过 TcpClient 将数据写入 logstash。代码工作正常,但logstash 仅显示最后发送的记录,并且仅在 tcp 流关闭后显示。
_client = new TcpClient();
_client.Connect(_settings.Host, _settings.Port);
var stream = _client.GetStream();
stream.Write(encoded, 0, encoded.Length);
stream.Flush();
Logstash tcp 设置:
input{
tcp{
type=>"app"
port=>"9876"
}
}
我的问题是什么?错误的代码或错误的logstash设置
【问题讨论】:
-
我不确定你想要达到什么目的,但我不能推荐
serilog。它有一个直接运送到elasticsearch 的水槽。 -
我已经为我的项目选择了serilog,但是我们使用ELK进行日志记录,在这种情况下直接将日志写入elasticsearch并不是一个好主意。所以我想为带有tcp连接的logstash开发自定义接收器。我找到了几个水槽,但由于多种原因它们不适合我。
-
为什么你认为直接将日志写入ELK不是一个好主意?我工作过的多家公司都是这样做的。这是梦幻般的!你正在切断中间人。
-
很遗憾,这不是我的决定。我们使用logstash 将数据传递给elasticsearch 并使用elasticsearch 来存储它。顺便说一句,许多人建议以这种方式使用日志。我认为这是因为logstash极大地简化了elasticsearch中的日志记录,尤其是在微服务架构下。无论如何,时间很紧,所以我将连接从 tcp 更改为 http。但我仍然想知道为什么 tcp 连接会以这种方式与 logstash 一起运行!
标签: c# elasticsearch .net-core logstash tcpclient