Logstash 是一个功能强大的工具,可与各种部署集成。 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据。 如果你的数据需要 Beats 中没有的其他处理,则需要将 Logstash 添加到部署中。

Logstash 是 Elastic 栈非常重要的一部分,但是它不仅仅为 Elasticsearch 所使用。它可以介绍广泛的各种数据源。Logstash 可以帮利用它自己的 Filter 帮我们对数据进行解析,丰富,转换等。

最后,它可以把自己的数据输出到各种需要的数据储存地,这其中包括 Elasticsearch。

尽管 Logstash 不仅仅处理 Log,但是如果我们以 Log 为例来描述它在 Elastic Stack 中的工作流程,它可以用如下的一张图来进行描述:

在上面,最原始的 Log 数据,经过 Logstash 的处理,可以把非结构化的数据变成结构化的数据。我们甚至可以使用 Logstash 强大的 Filter 来对数据继续加工。比如在上面,我们甚至可以使用 GeoIP 过滤器来丰富 IP 地址字段,从而能得到具体的的位置信息。我们可以结合外部数据库对数据丰富,转换等等。

在今天的文章中,我将讲述如果使用 Elastic Stack 家族的 Logstash。

Elastic Logstash 动手实践

Elastic Logstash 动手实践_哔哩哔哩_bilibili

Elastic 总览

在之前的一些市场活动中,我发现很多的开发者和 Elastics Stack 的使用者都对 ELK 比较熟悉,但是他们对 Elastic 公司并不熟悉。他们很了解 ELK 是一个免费及开源的软件栈,但是不知道在这个软件栈后面还有一个商业的 Elastic 公司的存在。简单的一句话:

Elastic 是一个搜索公司

当大多数人听到搜索这个词时,他们会想到一个搜索框。 在网络上搜索内容或在应用程序上搜索内容。但是搜索不仅仅是搜索框。

搜索通过图形或图表可视化日志和/或指标数据。也许你正在使用自己喜欢的应用程序通过寻找距离你最近并且可以接受信用卡并且具有4星级评级的餐馆来寻找餐馆。 这是一个过滤器搜索。或者,也许你正在使用 rideshare 应用程序。 连接驾驶员和乘客并找到到达目的地的路线。地图搜索也是搜索。搜索的不仅仅是这些示例。 它适用于许多的应用场景!

Elasticsearch 广泛地应用于我们日常生活的很多的场景,比如 Uber,滴滴打车,美团送餐,抖音视频搜索及推荐等等。还有很多著名的网站也使用 Elasticsearch 来做它们的搜索引擎。大家知道 github 上的搜索就是使用 Elasticsearch 来完成的,还有很多的网站,比如 wikipedia 及 linkedin 等。我们中国开发者最喜欢的 CSDN 里的搜索也是使用 Elasticsearch :)

我们可以在 Free and Open Search: The Creators of Elasticsearch, ELK & Kibana | Elastic 官方地址找到更多关于 Elastic 公司的介绍。

Elasticsearch

Elastic 公司的核心的产品是 Elasticsearch。关于 Elasticsearch 的更多描述可以在我之前的文章 “Elasticsearch简介”。简单地说:

Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本,数字,地理空间,结构化和非结构化。Elasticsearch 基于 Apache Lucene 构建,并于2010年由 Elasticsearch N.V.(现称为 Elastic)首次发布。

Elasticsearch 以其简单的 REST API,分布式性质,速度和易扩展性而闻名。Elasticsearch 的搜索体验的基本原则是规模(scale),速度(speed),相关性(relevance)。 总之,这三个属性是 Elastic 与其他产品的区别。 这些属性贯穿我们能看到的任何一个商业的示例,并且如果剥离这些层,则通常是它们使用 Elastic 的真正原因。

  • Scale:可扩展性是指摄取和处理 PB 级数据的能力。Elasticsearch 集群是分布式的,所以它很容根据商业的需求来扩容。如果需要存储更多的数据,我们很容添加更多的服务器来进行满足商业的需求。

  • Speed:快速获得搜索结果的能力, 即使在大规模的情况下。 在中国有一种说法:天下武功唯快不破。Elasticsearch 可以在 PB 级数据情况下,也能获得毫秒级的全文搜索。即使是新数据导入到 Elasticsearch 中,也可以在 1 秒内变为可以搜索,从而实现近实时的搜索。对于有的数据库来说,搜索可能是需要数小时才能完成。
  • Relevance: 关联性是一种能够以任意方式查询数据并获得相关结果的能力,而不论是查看文本,数字还是地理数据。Elasticsearch 可以根据数据的匹配度来返回数据。每个搜索的结果有一个分数,它表示匹配的相关度。在返回的数据结果中,匹配度最大的结果排在返回的结果的前面。

Elastic Stack

ELK” 是三个开源项目的缩写:Elasticsearch,Logstash 和 Kibana。 Elasticsearch 是搜索和分析引擎。Elasticsearch 是整个 Elastic Stack 的核心组件。 Logstash 是一个服务器端数据处理管道,它同时从多个源中提取数据,进行转换,然后将其发送到类似 Elasticsearch 的 “存储” 中。Beats 是一些轻量级的数据摄入器的组合,用于将数据发送到 Elasticsearch 或发向 Logstash 做进一步的处理,并最后导入到 Elasticsearch。 Kibana 允许用户在 Elasticsearch 中使用图表将数据可视化。Kibana 也在不断地完善。它可以对 Elastic Stack 进行监控,管理。同时它也集成了许多应用。这些应用包括 Logs, Metrics,机器学习,Maps 等等。

Elastic 方案

Elastic 公司围绕 Elastic Stack 创建了许多的开箱即用的方案。对于很多搜索或数据库的公司来说,他们可能有很好的产品,但是运用它们开发一套实现某种方案来说,也是需要很多的精力来组合不同公司的产品来完成这些方案。围绕 Elastic Stack,Elastic 公司推出了 3+1:

在上面,我们可以看到 Elastic 的三大解决方案:

  • 企业搜索
  • 可观测性
  • 安全

上面的三大解决方案基于同一个 Elastic (ELK) Stack:Elasticsearch 及 Kibana。

Logstash 简介

Logstash 是一个数据流引擎:

  • 它是用于数据物流的开源流式 ETL(Extract-Transform-Load)引擎
  • 在几分钟内建立数据流管道
  • 具有水平可扩展及韧性且具有自适应缓冲
  • 不可知的数据源
  • 具有 200 多个集成和处理器的插件生态系统
  • 使用 Elastic Stack 监视和管理部署

Logstash 几乎可以摄入各种类别的数据:

它可以摄入日志,文件,指标或者网路真实数据。经过 Logstash 的处理,变为可以使用的 Web Apps 可以消耗的数据,也可以存储于数据中心,或变为其它的流式数据。

最为流行的数据源

  • Logstash 可以很方便地和 Beats一起合作,这也是被推荐的方法
  • Logstash 也可以和那些著名的云厂商的服务一起合作处理它们的数据
  • 它也可以和最为同样的信息消息队列,比如 redis 或 kafka 一起协作
  • Logstash 也可以使用 JDBC 来访问 RDMS 数据
  • 它也可以和 IoT 设备一起处理它们的数据
  • Logstash 不仅仅可以把数据传送到 Elasticsearch,而且它还可以把数据发送至很多其它的目的地,并作为它们的输入源做进一步的处理

Logstash 在 Elastic Stack 中是如何融入的?

到目前为止,有如下的3中方式能够把我们所感兴趣的数据导入到 Elasticsearch 中:

正如上面所显示的那样,我们可以通过:

  1. Beats:我们可以通过 Beats 把数据导入到 Elasticsearch中
  2. Logstash:我们可以 Logstash 把数据导入。Logstash 的数据来源也可以是 Beats
  3. REST API:我们可以通过 Elastic 所提供的丰富的 API 来把数据导入到 Elasticsearch 中。我们可以通过 Java, Python, Go, Nodejs 等各种 Elasticsearch API 来完成我们的数据导入。如果你对这些感兴趣的话,请阅读 “Elastic:菜鸟上手指南” 中的 “各类语言日志导入”。

那么针对 Beats 来说,Logstash 是如何和其它的 Elastic Stack 一起工作的呢?我们可以看如下的框图:

从上面我们可以看出来,Beats 的数据可以有如下的三种方式导入到 Elasticsearch 中:

  • Beats ==> Elasticsearch
  • Beats ==> Logstash ==> Elasticsearch
  • Beats ==> Kafka ==> Logstash ==> Elasticsearch

正如上面所显示的那样:

  • 我们可以直接把 Beats 的数据传入到 Elasticsearch 中,甚至在现在的很多情况中,这也是一种比较受欢迎的一种方案。它甚至可以结合 Elasticsearch 所提供的 pipeline 一起完成更为强大的组合。
  • 我们可以利用 Logstash 所提供的强大的 filter 组合对数据流进行处理:解析,丰富,转换,删除,添加等等。你可以参阅我之前的文章 “Data转换,分析,提取,丰富及核心操作”
  • 针对有些情况,如果我们的数据流具有不确定性,比如可能在某个时刻生产大量的数据,从而导致 Logstash 不能及时处理,我们可以通过 Kafka 来做一个缓存。你可以参考我的文章 “使用 Kafka 部署 Elastic Stack”。

更多关于 Elastic Stack 的介绍,请阅读 “Elastic:菜鸟上手指南” 文章中的 Elastic Stack 架构 章节

Logstash 是如何工作的?

Logstash 旨在作为独立组件运行,以将数据加载到 Elasticsearch(以及其他目标系统)。 Logstash 是一个基于插件的组件,这意味着它可以高度扩展它支持的源/目标系统类型以及它可以进行的转换。Logstash 不是集群组件,无法感知其他 Logstash 实例。 通过跨实例负载平衡数据,可以使用多个 Logstash 实例来满足高可用性和扩展需求。如果你想了解如何实现这个,你可以参阅文章 “Elastic:负载均衡在 Elastic Stack 中的应用”。

与 Logstash 相关的以下概念值得理解:

  • Logstash 实例是一个正在运行的 Logstash 进程。建议在 Elasticsearch 的单独主机上运行 Logstash,以确保两个组件有足够的计算资源可用。
  • 管道(pipeline)是配置为处理给定工作负载的插件集合。一个 Logstash 实例可以运行多个管道(彼此独立) ​

  • 输入插件(input plugins)用于从给定的源系统中提取或接收数据。 Logstash 参考指南中提供了支持的输入插件列表:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
  • 过滤器插件(filter plugin)用于对传入事件应用转换和丰富。 Logstash 参考指南中提供了支持的过滤器插件列表:Filter plugins | Logstash Reference [8.3] | Elastic
  • 输出插件(output plugin)用于将数据加载或发送到给定的目标系统。 Logstash 参考指南中提供了支持的输出插件列表:https://www.elastic.co/guide/en/logstash/current/output-plugins.html

Logstash 通过运行一个或多个 Logstash 管道作为 Logstash 实例的一部分来处理 ETL 工作负载。

Logstash 包含3个主要部分: 输入(inputs),过滤器(filters)和输出(outputs)。 你必须定义这些过程的配置才能使用 Logstash,尽管不是每一个都必须的。在有些情况下,我们可以甚至没有过滤器。在过滤器的部分,它可以对数据源的数据进行分析,丰富,处理等等。

在输出的部分,我们甚至可以有多于一个以上的输出。

在下面的图中,我们可以看到一些常见的 inputs, filters 及 outputs:

你如果想了解更多关于 Logstash 的这些 Inputs, Filters 及 Outputs,那么请访问 Elastic 的官方网址Logstash Reference [7.14] | Elastic

好了,我在这篇文章中就先讲到这里。希望你到现在对 Logstash 有一个比初步的认识。在接下来的文章中,我们将具体讲述如何安装 Logstash,并运用一个具体的例子来展示 Logstash 是如何工作的。请参阅这个系列的第二篇文章 “Logstash:Logstash 入门教程 (二)”。

Logstash:Logstash 入门教程 (一)相关推荐

  1. Logstash 基础入门

    原文地址:Logstash 基础入门 博客地址:http://www.extlight.com 一.前言 Logstash 是一个开源的数据收集引擎,它具有备实时数据传输能力.它可以统一过滤来自不同源 ...

  2. Beats:Beats 入门教程 (一)

    在今天的这个教程里,我们来针对初学者如何快速地了解 Beats 是什么,并如何快速地部署 Beats.如果你想了解更多关于 Beats 方面的知识,可以参阅我的文章. 在我们开始 Beats 知识的讲 ...

  3. Kafka入门教程与详解

    1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...

  4. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  5. python tornado教程_Tornado 简单入门教程(零)——准备工作

    前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...

  6. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  7. mysql query browswer_MySQL数据库新特性之存储过程入门教程

    MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...

  8. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...

  9. air调用java,AIR2.0入门教程:与Java应用交互

    在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...

最新文章

  1. 30年前的热门研究,今获经典论文奖,贝叶斯网络之父旧论文「考古」
  2. list排序方法python_python将list排序的方法有哪些
  3. 地球那么大的开放世界游戏怎么做?腾讯云高级架构师为开发者设计了一套方案
  4. Java并发与锁设计实现详述 - Java中的Condition
  5. div获取第一个子节点jquery_【antd】Tree组件子节点不完全勾选获取父节点的值
  6. SSM项目中整合WebService
  7. SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用
  8. 给WPF文字加多条修饰线
  9. 【引用】在VB6.0中实现弹出式菜单的几种方法
  10. pr剪辑教程,如何跨剪辑应用和调整效果?
  11. 阿里妈妈大规模在线分层实验实践
  12. socket 和 SocketServer 模块
  13. Java中构造方法被别封装后的调用
  14. 风尚云网笔记-vue中echarts引入
  15. 如何彻底卸载3dmax2020_3dsmax2020卸载/安装失败/如何彻底卸载清除干净3dsmax2020注册表和文件的方法...
  16. Robotium 常用方法
  17. matlab 正20面体,求正十二面体和正二十面体的相邻两个表面的二面角大小
  18. 酒桌上的潜规则和技巧,男人必学
  19. 华为5G,不服不行!
  20. JavaScript数组方法(最全)

热门文章

  1. 汕头GLP实验室建设知识概述
  2. 一次性弄懂debounce
  3. flash、视频(WMP)遮挡页面解决方法
  4. mysql怎么模糊查询_MySql 模糊查询
  5. win7计算机设备管理器空的,win7系统打开设备管理器一片空白的解决方法
  6. linux4.9编译内核,centos编译linux-4.9内核rpm包
  7. jQuery事件冒泡
  8. 录歌,唱歌,赚钱两部误!点击进来!看规则!
  9. “新四化”:危机下的汽车产业转型路标
  10. android 加载静态网页,React Native:如何在WebView内加载SPA或本地静态HTML页面?