最近火的不能再火的日志框架就是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
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
bind 0.0.0.0
</source>
<match **>
@type stdout
</match>

客户端调用

          var fluentdTarget = new NLog.Targets.Fluentd()
{
Host = "192.168.200.214",
Port = ,
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的更多相关文章

  1. ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)

    本文章将会继承上一篇文章,主要讲通过工具来进行日志的收集与发送,<ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd> Nxlog是一个日志收集工具, ...

  2. ELK系列~nxlog实现多位置文件的收集

    前几天我写了几篇关于ELK日志收集,存储和分析的文章: ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd ELK系列~Nxlog日志收集加转发(解决log4日志 ...

  3. ELK系列~Fluentd对大日志的处理过程~16K

    Fluentd是一个日志收集工具,有输入端和输出端的概念,前者主要是日志的来源,你可以走多种来源方式,http,forward,tcp都可以,后者输出端主要指把日志进行持久化的过程,你可以直接把它持久 ...

  4. ELK系列~对fluentd参数的理解

    这段时候一直在研究ELK框架,主要集成在对fluentd和nxlog的研究上,国内文章不多,主要看了一下官方的API,配合自己的理解,总结了一下,希望可以帮到刚入行的朋友们! Fluentd(日志收集 ...

  5. ELK系列~log4-nxlog-Fluentd-elasticsearch写json数据需要注意的几点

    经验与实践 前两篇文章里我们介绍了nxlog的日志收集和转发<ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)>,今天我们主要总结一下,在与log4和f ...

  6. ELK系列七:Elasticsearch的集群配置和监控以及在部署ELK中踩的坑

    1.基本下载安装 #按照ELK系列一博客安装启动即可,没有大坑,注意一下权限即可 chmod -R 777 ./elasticsearch #此外没有java的,注意安装下JDK,我这次部署的环境是C ...

  7. elk系列8之logstash+redis+es的架构来收集apache的日志【转】

    preface logstash--> redis --> logstash --> es这套架构在讲究松耦合关系里面是最简单的,架构图如下: 解释下这个架构图的流程 首先前端log ...

  8. elk系列7之通过grok分析apache日志【转】

    preface 说道分析日志,我们知道的采集方式有2种: 通过grok在logstash的filter里面过滤匹配. logstash --> redis --> python(py脚本过 ...

  9. elk系列6之tcp模块的使用【转】

    preface tcp模块的使用场景如下: 有一台服务器A只需要收集一个日志,那么我们就可以不需要在这服务器上安装logstash,我们通过在其他logstash上启用tcp模块,监听某个端口,然后我 ...

随机推荐

  1. 201521123004 《Java程序设计》第1周学习总结

    1. 本章学习总结 (1)安装各种软件(jdk,eclipse,git(安装不了)) 注册账号(博客,网易邮箱(QQ邮箱不能用)码云) 创建项目(码云,Java) (2)了解JAVA语言的发展史(su ...

  2. 201521123111《Java程序设计》第14周学习总结

    本次作业参考文件 MySql操作视频与数据库相关jar文件请参考QQ群文件. 1. 本周学习总结 1.1 以你喜欢的方式(思维导图.Onenote或其他)归纳总结多数据库相关内容. 连接数据库前,应先 ...

  3. 201521123044 《Java程序设计》第14周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 友情提示:导图用ctrl+鼠标滚轮放大看更清楚些 2. 书面作业 1. MySQL数据库基本操作 建立数据库, ...

  4. 201521123062《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中fin ...

  5. [js高手之路]Node.js模板引擎教程-jade速学与实战2-流程控制,转义与非转义

    一.转义与非转义 jade模板文件代码: doctype html html head meta(charset='utf-8') title jade学习-by ghostwu body h3 转义 ...

  6. 一、React Native 搭建开发环境(1)(Mac OS - IOS项目)

    React Native是Facebook推出的一个开发IOS和安卓APP的技术.至于更多的详情,这里不再描述,大家可以自行百度它的定义. 目的: 由于我想在一台电脑上同时开发IOS和Android两 ...

  7. java使用POI操作XWPFDocument 生成Word实战(一)

    注:我使用的word 2016功能简介:(1)使用jsoup解析html得到我用来生成word的文本(这个你们可以忽略)(2)生成word.设置页边距.设置页脚(页码),设置页码(文本) 一.解析ht ...

  8. Hibernate哪点事?

    1.为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要?每个Hibernate实体类必须包含一个 无参数的构造器, 这是因为Hibernate框架要使用Reflection A ...

  9. 谈一谈synchronized关键词

    1.使用 java中的每一个对象都可以作为synchronized的锁进行代码同步,常见的形式 同步代码块锁是synchronized括号内的对象 普通成员方法上,锁是当前的对象,synchroniz ...

  10. UVW源码漫谈(番外篇)—— Emitter

    这两天天气凉了,苏州这边连续好几天都是淅淅沥沥的下着小雨,今天天气还稍微好点.前两天早上起来突然就感冒了,当天就用了一卷纸,好在年轻扛得住,第二天就跟没事人似的.在这里提醒大家一下,天气凉了,睡凉席的 ...