我正在尝试通过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设置
答案 0 :(得分:0)
我知道这是一篇旧文章,但是想过为那些可能遇到相同问题的人发布解决方案。我认为,通过TCP将C#日志数据发送到LogStash的最简单方法如下。
#From logstash configs
input{
tcp{
port=>"9876"
codec=>"json"
}
}
从C#端,我们需要创建一个json字符串以发送到logstash。首先创建一个LogJson.cs类,并重写ToString()。此类将仅返回所需的格式化json字符串。
using System;
using Newtonsoft.Json;
namespace FeedLogstash
{
class LogJson
{
public readonly int Id;
public readonly DateTime DateTime;
public readonly string Message;
public LogJson(int id, DateTime dateTime, string message) {
Id=id; DateTime=dateTime; Message=message;
}
public override string ToString() {
return JsonConvert.SerializeObject(this);
}
}
}
我们现在可以将上述json字符串发送到LogStash tcp输入。我正在使用C#SimpleTcpClient类创建简单连接。注意-您必须关闭连接才能写入数据。
using SimpleTCP;
...
public void PushData() {
LogJson log = new LogJson(1001, DateTime.Now, "Danger: Will Robinson");
SimpleTcpClient _client;
_client = new SimpleTcpClient().Connect(host, port);
_client.Write(log.ToString() + "\n");
_client.Disconnect();
}
希望这对希望从C#通过TCP推送日志数据的人有帮助。我相信Java可以采用相同的算法。