博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd
阅读量:6872 次
发布时间:2019-06-26

本文共 2413 字,大约阅读时间需要 8 分钟。

最近火的不能再火的日志框架就是ELK,其中E(Elasticsearch)表示日志存储,L(Logstash)表示日志收集,K(kibana)表示日志的UI界面,用来查询和分析,而其中的L可以使用Fluentd来代替,并且以上架构都可以通过docker来进行快速的部署。

它们的工作流程

fluentd系统有输入和输出,输入对应我们的应用程序,输出对应咱们的ES存储系统,在.net平台上,如果希望把日志发到fluentd,有三种方式,下面分别简单说一下:

  1. http方式
  2. tcp方式
  3. 客户端c/s方式

一 http方式

构建一个共享的httpclient对象,然后声明为keep-alive,使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。

fluentd配置:

    @type http    port 24224    bind 0.0.0.0  

C#代码:

var json = JsonConvert.SerializeObject(new                    {                        target_index = projectName,                        timestamp = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),                        Level = level.ToString(),                        Message = message,                        StackTrace = ex?.StackTrace                    });                    json = json.Replace("target_index", "@target_index").Replace("timestamp", "@timestamp");                    var httpContent = new StringContent(json, Encoding.UTF8);                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");                    httpClient.PostAsync(apiLoggerUrl, httpContent).Wait();

二 tcp方式

tcp方式比http要复杂一些,在fluentd配置时也需要注册,在性能上优于http,目前NLog.Targets.Fluentd这个框架对它进行了集成,但说明文档不是很清楚,大叔经过测试也已经成功实现了tcp的日志记录,需要注意的地方就是fluentd在接受tcp时,需要有一个结果标示,默认是\n,在客户端发送请求时需要在数据包结尾添加它。

NLog.Targets.Fluentd在github上的地址:

fluentd配置:

    @type tcp    tag pilipa    format /^(?
\d+):(?
\w+)$/ port 24224 bind 0.0.0.0
@type stdout

客户端调用

var fluentdTarget = new NLog.Targets.Fluentd()            {                Host = "192.168.200.214",                Port = 24224,                Tag = "pilipa",                LingerEnabled = false,                NoDelay = true,                EmitStackTraceWhenAvailable = false,            };            LoggingConfiguration config = new LoggingConfiguration();            config.AddRuleForOneLevel(LogLevel.Info, "fluentd");            LogManager.Configuration = config;            Logger logger = LogManager.GetLogger("Example");            logger.Info(json + "\n"); //这是必须的,看到\n表示数据包结束            Console.Read();

 然后在我们的fluentd上就可以看到日志了。

三 客户端c/s方式

目前正在研究,客户端驱动地址:https://docs.fluentd.org/v0.12/articles/windows#set-up-nxlog-on-windows

 

转载地址:http://azpfl.baihongyu.com/

你可能感兴趣的文章
ORA-09925: Unable to create audit trail file Linux-x86_64
查看>>
如何跳出嵌套语句之return
查看>>
API概述
查看>>
python2.6 安装rsa的包
查看>>
undo表空间使用率过高,且迟迟不释放问题
查看>>
scons *** no sconstruct file found求解决办法
查看>>
BIND基础配置详解
查看>>
火狐增加安全端口,每次用都得查,好麻烦,自己记录一下
查看>>
c# 多线程排队队列实现的源码
查看>>
LDA入门与Java实现
查看>>
19_css背景控制.html
查看>>
计算机网络测试和故障诊断的发展
查看>>
Delphi 与 DirectX 之 DelphiX(29): TDIB.AddMonoNoise();
查看>>
Windows Server 2008 FTP用户目录隔离模式
查看>>
zookeeper-kafka环境搭建,生产者消费者终端测试
查看>>
Catnut 微博app第一个版本发布了
查看>>
python实现linux下指定目录下文件中的单词个数统计
查看>>
SQL SERVER存储过程中如何使用事务与try catch
查看>>
我的友情链接
查看>>
常见算法的记录
查看>>