为什么我们需要Logstash,Fluentd等日志摄取器?

前文传送门:如何利用NLog输出结构化日志,并在Kibana优雅分析日志?

疑问:既然应用能直接向ElasticSearch写日志,为什么我们还需要Logstash,Fluentd等日志摄取器?而且这些日志摄取器组件还成为日志收集的事实标准?

  1. 与成都大佬的沟通答疑:

  2. 最近读到的十二要素方法论第11点:Treat logs as event streams

A twelve-factor app never concerns itself with routing or storage of its output stream. It should not attempt to write to or manage logfiles. Instead, each running process writes its event stream, unbuffered, to stdout. During local development, the developer will view this stream in the foreground of their terminal to observe the app’s behavior.

总结:您的应用不应该关注日志的路由和存储(Elasticsearch / Graylog / ...),您的日志应该只输出到stdout,整个系统所有应用保持统一输出,由日志摄取器无侵入式收集

在具有多种服务的dockerized环境中,每个容器都是隔离的并拥有自己的日志,我们需要一个接口来收集这些日志。
Docker Logging Driver就是干这个的:每个docker守护程序都有一个日志驱动程序,所有容器的日志都会流经该驱动程序, Docker Logging Drive让我们具备处理、转发日志的能力。

Fluent Bit vs Fluentd

流行的库是Fluentd, 这是一个开源的日志收集、处理、聚合组件,使用Ruby开发。
Fluent-Bit是从同一项目中fok出来的,用C写成的开源日志收集器。


FluentdFluent Bit
ScopeContainers / ServersContainers / Servers
LanguageC & RubyC
Memory~40MB~450KB
PerformanceHigh PerformanceHigh Performance
DependenciesBuilt as a Ruby Gem, it requires a certain number of gems.Zero dependencies, unless some special plugin requires them.
PluginsMore than 650 plugins availableAround 50 plugins available
LicenseApache License v2.0Apache License v2.0

下面我们使用轻量级的Fluent-bit向ElasticSearch发送容器日志。

可通过文件或者命令行配置Fluent-Bit,下面是关键的配置节:

  • Service:定义Fluent-Bit引擎的全局行为

  • Input:定义Fluent-Bit从什么地方收集数据

  • Parser:将非结构化日志转换为结构化日志

  • Filter:修改Input插件收集的传入数据

  • Output:定义Fluent Bit将数据输出到哪里

Fluent Bit as Docker Logging Driver

为收集、转发容器日志,我们需要将Fluent Bit设置为Docker Logging Driver。

  • 使用forward输入插件,监听Forward协议的转发消息

  • 要将日志转发到Elasticsearch,需设置es输出插件

fluent-bit.conf示例如下:

[SERVICE]log_level info[INPUT]Name forwardListen 0.0.0.0port 24224[OUTPUT]Name esMatch **Host 127.0.0.1Port 9243# When Logstash_Format is enabled, the Index name is composed using a prefix and the dateLogstash_Format True# HTTP_User <user># HTTP_Passwd <pw># Alternative time key, useful if your log entries contain an @timestamp field that is used by Elasticsearch# Time_Key es_time# If your Elasticsearch is using TLS, configure this# tls On# tls.verify Off

启动ES、Fluent-Bit和一个产生日志的测试项目:

version: "3.5"
services:elasticsearch:image: elasticsearch:7.6.2ports:- "9200:9200"environment:- "ES_JAVA_OPTS=-Xms512m -Xmx512m"- discovery.type=single-nodefluentbit:image: fluent/fluent-bit:1.5.3volumes:- type: bindsource: ./fluent-bit.conftarget: /fluent-bit/etc/fluent-bit.confports:- "24224:24224"- "24224:24224/udp"depends_on:- elasticsearchubuntu:image: ubuntucommand: [/bin/echo, "Dotnet Plus很干,值得关注!"]depends_on:- fluentbitlogging:driver: fluentdoptions:tag: docker-ubuntu

其中注意:

  1. Fluent-Bit容器外挂pipeline配置文件

  2. Fluentd和Fluent Bit均使用fluentd作为Docker Logging Driver。

检查ElasticSearch中的日志

curl localhost:9200/_cat/indices

yellow open logstash-2020.08.22 vqoyvKE4SFCcJtfo6BRmQg 1 1 1 0 6.2kb 6.2kb

 curl localhost:9200/logstash-2020.08.22/_search?pretty=true&q={'matchAll':{''}}
{"took" : 4,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "logstash-2020.08.22","_type" : "_doc","_id" : "z0WsFnQBU8QzIbCaBXGY","_score" : 1.0,"_source" : {"@timestamp" : "2020-08-22T14:56:33.000Z","log" : "Dotnet Plus很干,值得关注!","container_id" : "e921435eb7b8dc61bbb8e938bf67cea2694e2afd699ca71c4ef5b6d7cca12e34","container_name" : "/ef_ubuntu_1","source" : "stdout"}}]}
}

docker应用仅使用stdout,docker logging driver将日志转发至Fluent-Bit,Fluent-Bit将它们转发给Elasticsearch。

小编结束语

以上就是利用Fluent-Bit从容器应用收集日志并发送到ElasticSearch的基本示例。

我们再回顾下Fluent-Bit产生的背景和特性:
如今,我们环境中的信息源在不断增加,数据收集越来越复杂,需要解决

  • 不同的信息来源

  • 不同的数据格式

  • 数据可靠性

  • 安全

  • 灵活的路由

  • 多个目的地

Fluent-Bit旨在成为日志收集和加工的通用瑞士军刀, 同时Fluent Bit在设计时考虑了性能和低资源消耗。

干货周边也很重要

  1. [十二要素方法论]   十二要素App方法论

  2. [如何利用NLog输出结构化日志]   https://github.com/nlog/nlog/wiki/How-to-use-structured-logging

  3. [NLog to ES]   https://github.com/markmcdowell/NLog.Targets.ElasticSearch

  4. [被忽略的TraceId,可以用起来了]

  5. Logging with ElasticSearch, Kibana, ASP.NET Core and Docker

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-1 装载问题 (10 分)(思路+详解)

一&#xff1a;题目 Come 宝宝&#xff01;&#xff01; 输出格式: 输出所有可行的方案数量 输入样例1: 3 50 50 10 40 40结尾无空行 输出样例1: 4结尾无空行 输入样例2: 3 50 50 20 40 40结尾无空行 输出样例2: 0二:思路 1.这个解的空间选择的是子集树 2.递归函数参数 b…

程序员是终身学习的职业,应该怎么学习?

在上一篇《一款用了就不想走的工具》中介绍了一款工具 Notion &#xff0c;可以做学习的规划、时间的管理、学习的记录等&#xff0c;但学习本身还是需要一些方法的&#xff0c;本文谈谈我对学习的一些感悟。不管你是刚刚进入职场的新人&#xff0c;还是工作多年的老兵&#xf…

7-2 批处理作业调度 (10 分)(思路+详解)

一&#xff1a;题目:宝宝 你要永远开心&#xff0c;下雪了&#xff0c;多穿点&#xff0c; 输入格式: 第一行输入作业个数n。 第二行输入各任务在机器一上的完成时间。 第三行输入各任务在机器二上的完成时间。 输出格式: 最短完成时间和 输入样例: 3 2 3 2 1 1 3结尾无空…

WindowsSdkDir 从何处来?

缘起 我在《修复被破坏的 vs 工程设置》和《修复被破坏的 vs 工程设置&#xff08;续&#xff09;》这两篇文章中&#xff0c;分享了调查 VS 包含路径错误的问题&#xff0c;感兴趣的小伙伴儿可以查看。依稀记得在 2013 年的时候调查过类似的问题。前一阵子没翻到&#xff0c;这…

7-3 符号三角形 (10 分)(思路+详解)

一&#xff1a;题目 Come 宝 &#xff01;&#xff01;&#xff01; 输入格式: 第一行符号个数n 输出格式: 符合要求的三角形个数 输入样例: 4结尾无空行 输出样例: 6二:思路 思路: 1.如果我们确立的第一行的符号是什么 &#xff0c;那么我们就可以基本上确定我们的符号三…

7-1 内存分区分配--首次适应算法 (100 分)

一&#xff1a;题目7-1 内存分区分配–首次适应算法 (100 分) 宝 今天你看我博客了吗 输入内存的大小和阈值minsize&#xff0c;按照首次适应算法进行连续的分区分配。在划分时&#xff0c;若剩余的内存小于等于minsize&#xff0c;则将整块内存分配给该进程不再进行划分。 根…

如何在生产环境下用好EFCore

原文链接&#xff1a;https://www.thereformedprogrammer.net/handling-entity-framework-core-database-migrations-in-production-part-2/作者&#xff1a;Jon P Smith在生产中运用EFCore的模式实战这是使用EF Core迁移数据库的系列文章中的第二篇。本文着眼于将迁移应用于数…

39. 组合总和020(思路+详解)

一&#xff1a;题目&#xff1a; 给定一个无重复元素的正整数数组 candidates 和一个正整数 target &#xff0c;找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。 candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同&#xff0c;则两种…

8种方法解决vue创建项目报错:command failed: npm install --loglevel error

8种方法解决vue项目创建失败问题1、重建项目2、清除缓存3、重装淘宝源4、修改useTaobaoRegistry5、重装node6、删除npmrc文件7、 node版本问题8、css编辑工具选择9、管理员身份运行踩了这个巨大的坑&#xff01;&#xff01; 试了一个晚上终于找到了创建项目成功了T_T 当报错了…

40. 组合总和 II021(回溯法)

一&#xff1a;题目 给定一个数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 注意&#xff1a;解集不能包含重复的组合。 示例 1:输入: candidates [10,1,2,…

.NET Core + Kubernetes:Helm

Helm[1] 作为 Kubernetes 体系的包管理工具&#xff0c;已经逐渐成为了应用分发标准&#xff0c;在 .NET 开发中&#xff0c;可以理解为与 NuGet 包类似。回顾之前文章中的介绍&#xff0c;Kubernetes 中单个服务的部署有时会涉及到多种资源类型&#xff0c;如&#xff1a;Depl…

vue项目中引入阿里图标iconfont

vue如何在创建好的项目中引入阿里图标iconfont呢&#xff0c;涉及到以下几个步骤&#xff1a; 1、首先先到阿里图标官方网站https://www.iconfont.cn/&#xff0c;先对账户进行登录&#xff0c;登录完成后任意选择几个图标加入购物车 2、加入购物车后&#xff0c;点击页面最右…

78. 子集022(回溯法)

一&#xff1a;题目 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;…

vue项目中使用vue-router进行路由配置及嵌套多级路由

在vue项目中&#xff0c;很多时候我们需要二级路由或者三级路由来跳转页面&#xff0c;但大部分需求下我们都只用到了二级路由&#xff0c;有小伙伴就会发现&#xff0c;用到三级路由的时候&#xff0c;就会突然不知所措&#xff0c;是有新的方法呢&#xff0c;还是跟二级路由配…

解决流氓软件方法(亲测有效)

一:问题描述 本来我想在百度上下载一个API文档&#xff0c;我当然知道是取官网上下载了&#xff0c;但是我想要的是中文版&#xff0c;所以我就搜啊搜&#xff0c;搜到脚本之家 &#xff0c;那里面可以下载&#xff0c;我记得以前在里面下载过东西&#xff0c;以为安全就去下载…

.NET Core:跨平台和开源,让我在框架中脱颖而出

自从 2016 年微软发布了 .NET Core 1.0&#xff0c;至今 4 年的时间里&#xff0c;.NET Core 历经 7 个正式版本和几十个 Preview 版本。.NET Core 作为最通用的框架&#xff0c;和其他软件框架不同的是&#xff0c;它面向 Windows、Linux 和 MacOS 多个平台&#xff0c;在桌面…

vue实现侧边折叠菜单栏手风琴效果

在我们做管理后台亦或是产品流程时&#xff0c;总是需要一个菜单栏或者导航栏来架起我们的产品架构&#xff0c;那么&#xff0c;如何用vue实现侧边折叠导航栏呢&#xff1f;接下来将一一介绍。 请先看效果演示图。 步骤1&#xff1a;先架构整个页面的布局&#xff0c;撰写html…

程序员过关斩将--解决分布式session问题

微信搜一搜架构师修行之路session 说到 session&#xff0c;我相信每个程序员都不陌生&#xff0c;或多或少在项目中使用过。session 这个词&#xff0c;其实是一个抽象的概念&#xff0c;它不像 Cookie 那样有着明确的定义。当大多数程序员谈论 session 的时候&#xff0c;可能…

如何将nodejs项目程序部署到阿里云服务器上

将nodejs项目程序部署到阿里云服务器上一、概述二、具体步骤1、拥有自己的服务器2、下载Xshell3、 oneinstack配置web环境4、 XShell连接远程主机5、更新系统软件6、在服务器上安装node环境7、部署项目到服务器上8、安装pm2并启动nodejs项目三、快捷指令1、linux的常用命令2、p…

101. 对称二叉树023(BFS)

一&#xff1a;题目 二&#xff1a;上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullpt…