认识Logstash

一文快速上手Logstash
参考URL: https://elasticsearch.cn/article/6141
Logstash 基础入门
参考URL: https://www.cnblogs.com/moonlightL/p/7760512.html
Logstash源码分析与扩展开发
参考URL: http://www.it610.com/article/2134545.htm
【推荐-必看】Logstash 最佳实践
https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/index.html

Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。Logstash作为Elasicsearch常用的实时数据采集引擎,可以采集来自不同数据源的数据,并对数据进行处理后输出到多种输出源,是Elastic Stack 的重要组成部分。

Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(我们的存储库当然是 Elasticsearch。)

Logstash工作原理

  1. 处理过程
    Logstash的数据处理过程主要包括:Inputs, Filters, Outputs 三部分, 另外在Inputs和Outputs中可以使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output, codec插件,以实现特定的数据采集,数据处理,数据输出等功能
    (1)Inputs:用于从数据源获取数据,常见的插件如file, syslog, redis, beats 等
    (2)Filters:用于处理数据如格式转换,数据派生等,常见的插件如grok, mutate, drop, clone, geoip等
    (3)Outputs:用于数据输出,常见的插件如elastcisearch,file, graphite, statsd等
    (4)Codecs:Codecs不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline。

  2. 执行模型
    (1)每个Input启动一个线程,从对应数据源获取数据。
    (2)Input会将数据写入一个队列:默认为内存中的有界队列(意外停止会导致数据丢失)。为了防止数丢失Logstash提供了两个特性:
    Persistent Queues:通过磁盘上的queue来防止数据丢失
    Dead Letter Queues:保存无法处理的event(仅支持Elasticsearch作为输出源)
    (3)Logstash会有多个pipeline worker, 每一个pipeline worker会从队列中取一批数据,然后执行filter和output(worker数目及每次处理的数据量均由配置确定)

如何使用

安装使用步骤

官方链接https://www.elastic.co/cn/downloads/logstash
[推荐]logstash安装
参考URL: https://blog.csdn.net/u010246789/article/details/52086799

  1. Logstash使用示例
    (1)下载Logstash并解压(需要预先安装JDK8)
    (2)cd到Logstash的根目录,并执行启动命令如下:
    cd logstash-6.4.0
    bin/logstash -e 'input { stdin { } } output { stdout {} }'

(3)此时Logstash已经启动成功,-e表示在启动时直接指定pipeline配置,当然也可以将该配置写入一个配置文件中,然后通过指定配置文件来启动
(4)在控制台输入:hello world,可以看到如下输出:
Logstash会自动为数据添加@version, host, @timestamp等字段
在这个示例中Logstash从标准输入中获得数据,仅在数据中添加一些简单字段后将其输出到标准输出。

logstash 和filebeat 是什么关系

因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。不过作者只是一个人,加入http://elastic.co公司以后,因为es公司本身还收购了另一个开源项目packetbeat,而这个项目专门就是用golang的,有整个团队,所以es公司干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞,于是新的项目就叫filebeat了。

logstash 和filebeat都具有日志收集功能,filebeat更轻量,占用资源更少,但logstash 具有filter功能,能过滤分析日志。一般结构都是filebeat采集日志,然后发送到消息队列,redis,kafaka。然后logstash去获取,利用filter功能过滤分析,然后存储到elasticsearch中。