一、Logstash 介绍

Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。

二、工作流程

Logstash 工作的三个阶段:

input 数据输入端,可以接收来自任何地方的源数据。

  • file:从文件中读取

  • syslog:监听在514端口的系统日志信息,并解析成RFC3164格式。

  • redis:从redis-server list 中获取

  • beat:接收来自Filebeat的事件

Filter 数据中转层,主要进行格式处理,数据类型转换、数据过滤、字段添加,修改等,常用的过滤器如下。

  • grok: 通过正则解析和结构化任何文本。Grok 目前是logstash最好的方式对非结构化日志数据解析成结构化和可查询化。logstash内置了120个匹配模式,满足大部分需求。

  • mutate: 在事件字段执行一般的转换。可以重命名、删除、替换和修改事件字段。

  • drop: 完全丢弃事件,如debug事件。

  • clone: 复制事件,可能添加或者删除字段。

  • geoip: 添加有关IP地址地理位置信息。

output 是logstash工作的最后一个阶段,负责将数据输出到指定位置,兼容大多数应用,常用的有:

  • elasticsearch: 发送事件数据到 Elasticsearch,便于查询,分析,绘图。

  • file: 将事件数据写入到磁盘文件上。

  • mongodb:将事件数据发送至高性能NoSQL mongodb,便于永久存储,查询,分析,大数据分片。

  • redis:将数据发送至redis-server,常用于中间层暂时缓存。

  • graphite: 发送事件数据到graphite。http://graphite.wikidot.com/

  • statsd: 发送事件数据到 statsd。

三、 Logstash部署架构

Logstash的理念很简单,它只做3件事情:

  1. Collect:数据输入
  2. Enrich:数据加工,如过滤,改写等
  3. Transport:数据输出

别看它只做3件事,但通过组合输入和输出,可以变幻出多种架构实现多种需求。这里只抛出用以解决日志汇总需求的部署架构图:

解释术语:

  • Shipper:日志收集者。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来,输出到Redis暂存。
  • Indexer:日志存储者。负责从Redis接收日志,写入到本地文件。
  • Broker:日志Hub,用来连接多个Shipper和多个Indexer。

无论是Shipper还是Indexer,Logstash始终只做前面提到的3件事:

  • Shipper从日志文件读取最新的行文本,经过处理(这里我们会改写部分元数据),输出到Redis,
  • Indexer从Redis读取文本,经过处理(这里我们会format文本),输出到文件。

一个Logstash进程可以有多个输入源,所以一个Logstash进程可以同时读取一台服务器上的多个日志文件。Redis是Logstash官方推荐的Broker角色“人选”,支持订阅发布和队列两种数据传输模式,推荐使用。输入输出支持过滤,改写。Logstash支持多种输出源,可以配置多个输出实现数据的多份复制,也可以输出到Email,File,Tcp,或者作为其它程序的输入,又或者安装插件实现和其他系统的对接,比如搜索引擎Elasticsearch。

总结:Logstash概念简单,通过组合可以满足多种需求。

Logstash之二:原理的更多相关文章

  1. Canal和Otter讨论二(原理与实践)

    上次留下的问题 问题一: 跨公网部署Otter 参考架构图 解析 ​ a. 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工 ...

  2. bitcoin 源码解析 - 交易 Transaction(二) - 原理篇

    这篇文章我断断续续写了呃···· 应该快三个星期了? 所以前后的风格可能差别相当大.真是十分的怠惰啊··· 最近实在是不够努力.用python重写bitcoin的项目也卡在网络编程部分(这方面真是我的 ...

  3. ELK(elasticsearch+kibana+logstash)搜索引擎(二): elasticsearch基础教程

    1.elasticsearch的结构 首先elasticsearch目前的结构为 /index/type/id  id对应的就是存储的文档ID,elasticsearch一般将数据以JSON格式存储. ...

  4. ELK提高篇之Logstash

    目录 二.Logstash 2.1.安装logstash 2.2.Logstash的工作原理解析 2.3.Logstash的配置和运行 2.4.Logstash实用举例 2.5.Logstash常用插 ...

  5. zigbee学习之路(二)点亮LED

    一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...

  6. 【原创】大数据基础之Spark(5)Shuffle实现原理及代码解析

    一 简介 Shuffle,简而言之,就是对数据进行重新分区,其中会涉及大量的网络io和磁盘io,为什么需要shuffle,以词频统计reduceByKey过程为例, serverA:partition ...

  7. AutoRegister ASM AOP 字节码 案例 原理 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. Spark SQL入门用法与原理分析

    Spark SQL是为了让开发人员摆脱自己编写RDD等原生Spark代码而产生的,开发人员只需要写一句SQL语句或者调用API,就能生成(翻译成)对应的SparkJob代码并去执行,开发变得更简洁 注 ...

  9. 一文快速上手Logstash

    原文地址:https://cloud.tencent.com/developer/article/1353068 Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的 ...

随机推荐

  1. Arithmometer: A Node.js implementation

    Foreword: This project is a part of pair programming task. We implement an command-line based arithm ...

  2. Double H6.0

    Double H 博客链接 成员 学号 姓名 211606379 王熙航(队长) 211606364 李冠锐 211606350 曾磊鑫 211606457 郑沐榕 211606342 杨艺勇 211 ...

  3. L1-032 Left-pad

    根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的Re ...

  4. MyEclipse教程:使用UML创建模块库——第一部分(一)

    MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] UML1建模文件存储在建模库中,建模可用于生成Java代码,或者可以从代码中 ...

  5. php property_exists

    property_exists("Device",$prop))判断Device 类中是否存在 $prop 这个属性该函数用来判断一个类中是否存在某个属性. 这里分析了php面向对 ...

  6. IOS控件大全及控件大小

    一 视图UIView和UIWindow iphone视图的规则是:一个窗口,多个视图.UIWindow相当于电视机,UIViews相当于演员. 1.显示数据的视图 下面几个类可在屏幕上显示信息: UI ...

  7. vue 之 .$mount()

    $mount():手动挂载 当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中: 假如需要延迟挂载,可以在之后手动调用vm.$mount()方法来挂载.例如: <div id=&quo ...

  8. 数组Arry的随机排序

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  9. 推荐六个在线生成网址二维码的API接口

    现在很多大网站都有这样的一个功能,使用手机扫描一下网页上的二维码便可快速在手机上访问网站.想要实现这样的功能其实很简单,下面麦布分享几个在线生成网址二维码的API接口.都是采用http协议接口,无需下 ...

  10. list.stream().parallel() 并行流

    https://blog.csdn.net/u011001723/article/details/52794455/  :  parallel()其实就是一个并行执行的流.它通过默认的ForkJoin ...