ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

最近火的不能再火的日志框架就是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配置:

<source>
    @type http
    port 24224
    bind 0.0.0.0
  </source>

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上的地址:

https://github.com/fluent/NLog.Targets.Fluentd

fluentd配置:

  <source>
    @type tcp
    tag pilipa
    format /^(?<field1>\d+):(?<field2>\w+)$/
    port 24224
    bind 0.0.0.0
  </source>
  <match **>
    @type stdout
  </match>

客户端调用

          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

本文转自博客园张占岭(仓储大叔)的博客,原文链接:ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd,如需转载请自行联系原博主。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6天前
|
存储 监控 数据可视化
ELK与Fluentd的结合
【6月更文挑战第18天】构建Python分布式日志系统,结合ELK(Elasticsearch、Logstash、Kibana)与Fluentd,用于日志收集、存储和分析。Fluentd作为数据收集器,接收Python应用日志,通过Logstash转发至Elasticsearch索引,Kibana提供可视化界面。流程包括安装配置ELK,配置Fluentd输入输出插件,Python中使用`fluent-logger`发送日志,Kibana查看分析数据。系统可扩展、优化,涉及数据格式化、性能调优、安全性和监控。
30 7
ELK与Fluentd的结合
|
JSON 网络协议 数据格式
|
1月前
|
存储 监控 数据可视化
日志分析对决:揭示 ELK 与 GrayLog 的优势和差异
日志分析对决:揭示 ELK 与 GrayLog 的优势和差异
490 0
|
1月前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
1月前
|
Go 数据处理 Docker
elk stack部署自动化日志收集分析平台
elk stack部署自动化日志收集分析平台
105 0
|
6月前
|
存储 监控 数据可视化
小白带你学习linux的ELK日志收集系统
小白带你学习linux的ELK日志收集系统
190 0
|
1月前
|
存储 监控 安全
ELK7.x日志系统搭建 1. elk基础搭建
ELK7.x日志系统搭建 1. elk基础搭建
93 0
|
1月前
|
消息中间件 数据可视化 关系型数据库
ELK7.x日志系统搭建 4. 结合kafka集群完成日志系统
ELK7.x日志系统搭建 4. 结合kafka集群完成日志系统
170 0
|
1月前
|
监控 应用服务中间件 nginx
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G
70 4