c# - 在 tcp 流关闭之前,TcpClient 不会向 Logstash 发送数据
问题描述
我正在尝试通过 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设置
解决方案
我知道这是一篇旧帖子,但我想向那些可能有同样问题的人发布解决方案。在我看来,通过 TCP 将 C# Log 数据发送到 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 也可以采用同样的算法。
推荐阅读
- sql-server - 如何将可执行的sql任务结果存储在excel文件ssis中
- c# - 在 VS2017 中更改以下 Resharper 项目的颜色
- wildfly - Wildfly 错误:错误 MEM 发送 ENABLE-APP
- c# - 如何使文本框的宽度像 xaml 中的按钮一样动态变化
- c++ - 如何找到通过公式计算的非常大的数字的最后一位?
- r - 预测 sm.regression
- android - 如何查找 lat.lng 是否在谷歌地图的某个半径范围内
- python - 如何从python中的列表元素中删除转义序列?
- python - 在服务器中运行 Bokeh 应用程序后如何重用终端
- mapbox - 如何在国家/地区掩盖/修剪 voronoi 多边形?