制作自己的平台网站,建设网站是什么模式,跨境电商在哪些网站上面做,dw可以做视频网站么概述
常见的日志采集工具有Logstash、Filebeat、Fluentd、Logagent、rsyslog等等#xff0c;那么他们之间有什么区别呢?什么情况下我们应该用哪一种工具? Logstash
Logstash是一个开源数据收集引擎#xff0c;具有实时管道功能。Logstash可以动态地将来自不同数据源的数据…概述
常见的日志采集工具有Logstash、Filebeat、Fluentd、Logagent、rsyslog等等那么他们之间有什么区别呢?什么情况下我们应该用哪一种工具? Logstash
Logstash是一个开源数据收集引擎具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来并将数据标准化到你所选择的目的地。 优势
Logstash 主要的有点就是它的灵活性主要因为它有很多插件详细的文档以及直白的配置格式让它可以在多种场景下应用。我们基本上可以在网上找到很多资源几乎可以处理任何问题。
劣势
Logstash 致命的问题是它的性能以及资源消耗(默认的堆大小是 1GB)。尽管它的性能在近几年已经有很大提升与它的替代者们相比还是要慢很多的。这里有 Logstash 与 rsyslog 性能对比以及Logstash 与 filebeat 的性能对比。它在大数据量的情况下会是个问题。
另一个问题是它目前不支持缓存目前的典型替代方案是将 Redis 或 Kafka 作为中心缓冲池
典型应用场景
因为 Logstash 自身的灵活性以及网络上丰富的资料Logstash 适用于原型验证阶段使用或者解析非常的复杂的时候。在不考虑服务器资源的情况下如果服务器的性能足够好我们也可以为每台服务器安装 Logstash 。我们也不需要使用缓冲因为文件自身就有缓冲的行为而 Logstash 也会记住上次处理的位置。
如果服务器性能较差并不推荐为每个服务器安装 Logstash 这样就需要一个轻量的日志传输工具将数据从服务器端经由一个或多个 Logstash 中心服务器传输到 Elasticsearch
随着日志项目的推进可能会因为性能或代价的问题需要调整日志传输的方式(log shipper)。当判断 Logstash 的性能是否足够好时重要的是对吞吐量的需求有着准确的估计这也决定了需要为 Logstash 投入多少硬件资源。
Filebeat
作为 Beats 家族的一员Filebeat 是一个轻量级的日志传输工具它的存在正弥补了 Logstash 的缺点Filebeat 作为一个轻量级的日志传输工具可以将日志推送到中心 Logstash。 在版本 5.x 中Elasticsearch 具有解析的能力(像 Logstash 过滤器)— Ingest。这也就意味着可以将数据直接用 Filebeat 推送到 Elasticsearch并让 Elasticsearch 既做解析的事情又做存储的事情。也不需要使用缓冲因为 Filebeat 也会和 Logstash 一样记住上次读取的偏移如果需要缓冲(例如不希望将日志服务器的文件系统填满)可以使用 Redis/Kafka因为 Filebeat 可以与它们进行通信。
优势
Filebeat 只是一个二进制文件没有任何依赖。它占用资源极少尽管它还十分年轻正式因为它简单所以几乎没有什么可以出错的地方所以它的可靠性还是很高的。它也为我们提供了很多可以调节的点例如它以何种方式搜索新的文件以及当文件有一段时间没有发生变化时何时选择关闭文件句柄。
劣势
Filebeat 的应用范围十分有限所以在某些场景下我们会碰到问题。例如如果使用 Logstash 作为下游管道我们同样会遇到性能问题。正因为如此Filebeat 的范围在扩大。开始时它只能将日志发送到 Logstash 和 Elasticsearch而现在它可以将日志发送给 Kafka 和 Redis在 5.x 版本中它还具备过滤的能力。
典型应用场景
Filebeat 在解决某些特定的问题时日志存于文件我们希望将日志直接传输存储到 Elasticsearch。这仅在我们只是抓去(grep)它们或者日志是存于 JSON 格式(Filebeat 可以解析 JSON)。或者如果打算使用 Elasticsearch 的 Ingest 功能对日志进行解析和丰富。
将日志发送到 Kafka/Redis。所以另外一个传输工具(例如Logstash 或自定义的 Kafka 消费者)可以进一步丰富和转发。这里假设选择的下游传输工具能够满足我们对功能和性能的要求。
Fluentd
Fluentd 创建的初衷主要是尽可能的使用 JSON 作为日志输出所以传输工具及其下游的传输线不需要猜测子字符串里面各个字段的类型。这样它为几乎所有的语言都提供库这也意味着我们可以将它插入到我们自定义的程序中。 优势
和多数 Logstash 插件一样Fluentd 插件是用 Ruby 语言开发的非常易于编写维护。所以它数量很多几乎所有的源和目标存储都有插件(各个插件的成熟度也不太一样)。这也意味这我们可以用 Fluentd 来串联所有的东西。
劣势
因为在多数应用场景下我们会通过 Fluentd 得到结构化的数据它的灵活性并不好。但是我们仍然可以通过正则表达式来解析非结构化的数据。尽管性能在大多数场景下都很好但它并不是***的和 syslog-ng 一样它的缓冲只存在与输出端单线程核心以及 Ruby GIL 实现的插件意味着它大的节点下性能是受限的不过它的资源消耗在大多数场景下是可以接受的。对于小的或者嵌入式的设备可能需要看看 Fluent Bit它和 Fluentd 的关系与 Filebeat 和 Logstash 之间的关系类似。
典型应用场景
Fluentd 在日志的数据源和目标存储各种各样时非常合适因为它有很多插件。而且如果大多数数据源都是自定义的应用所以可以发现用 fluentd 的库要比将日志库与其他传输工具结合起来要容易很多。特别是在我们的应用是多种语言编写的时候即我们使用了多种日志库日志的行为也不太一样。
Logagent
Logagent 是 Sematext 提供的传输工具它用来将日志传输到 Logsene(一个基于 SaaS 平台的 Elasticsearch API)因为 Logsene 会暴露 Elasticsearch API所以 Logagent 可以很容易将数据推送到 Elasticsearch 。 优势
可以获取 /var/log 下的所有信息解析各种格式(ElasticsearchSolrMongoDBApache HTTPD等等)它可以掩盖敏感的数据信息例如个人验证信息(PII)出生年月日信用卡号码等等。它还可以基于 IP 做 GeoIP 丰富地理位置信息(例如access logs)。同样它轻量又快速可以将其置入任何日志块中。在新的 2.0 版本中它以第三方 node.js 模块化方式增加了支持对输入输出的处理插件。重要的是 Logagent 有本地缓冲所以不像 Logstash 在数据传输目的地不可用时会丢失日志。
劣势
尽管 Logagent 有些比较有意思的功能(例如接收 Heroku 或 CloudFoundry 日志)但是它并没有 Logstash 灵活。
典型应用场景
Logagent 作为一个可以做所有事情的传输工具是值得选择的(提取、解析、缓冲和传输)。
logtail
阿里云日志服务的生产者目前在阿里集团内部机器上运行经过3年多时间的考验目前为阿里公有云用户提供日志收集服务。 采用C语言实现对稳定性、资源控制、管理等下过很大的功夫性能良好。相比于logstash、fluentd的社区支持logtail功能较为单一专注日志收集功能。
优势
logtail占用机器cpu、内存资源最少结合阿里云日志服务的E2E体验良好。
劣势
logtail目前对特定日志类型解析的支持较弱后续需要把这一块补起来。
rsyslog
绝大多数 Linux 发布版本默认的 syslog 守护进程rsyslog 可以做的不仅仅是将日志从 syslog socket 读取并写入 /var/log/messages 。它可以提取文件、解析、缓冲(磁盘和内存)以及将它们传输到多个目的地包括 Elasticsearch 。可以从此处找到如何处理 Apache 以及系统日志。
优势
rsyslog 是经测试过的最快的传输工具。如果只是将它作为一个简单的 router/shipper 使用几乎所有的机器都会受带宽的限制但是它非常擅长处理解析多个规则。它基于语法的模块(mmnormalize)无论规则数目如何增加它的处理速度始终是线性增长的。这也就意味着如果当规则在 20-30 条时如解析 Cisco 日志时它的性能可以大大超过基于正则式解析的 grok 达到 100 倍(当然这也取决于 grok 的实现以及 liblognorm 的版本)。
它同时也是我们能找到的最轻的解析器当然这也取决于我们配置的缓冲。
劣势
rsyslog 的配置工作需要更大的代价(这里有一些例子)这让两件事情非常困难
文档难以搜索和阅读特别是那些对术语比较陌生的开发者。
5.x 以上的版本格式不太一样(它扩展了 syslogd 的配置格式同时也仍然支持旧的格式)尽管新的格式可以兼容旧格式但是新的特性(例如Elasticsearch 的输出)只在新的配置下才有效然后旧的插件(例如Postgres 输出)只在旧格式下支持。
尽管在配置稳定的情况下rsyslog 是可靠的(它自身也提供多种配置方式最终都可以获得相同的结果)它还是存在一些 bug 。
典型应用场景
rsyslog 适合那些非常轻的应用(应用小VMDocker容器)。如果需要在另一个传输工具(例如Logstash)中进行处理可以直接通过 TCP 转发 JSON 或者连接 Kafka/Redis 缓冲。
rsyslog 还适合我们对性能有着非常严格的要求时特别是在有多个解析规则时。那么这就值得为之投入更多的时间研究它的配置。