logstash优点_日志搜集处理框架---浅谈logstash

Logstash是一款基于JRuby编写的日志搜集处理框架,是ELK Stack的重要组成部分。它采用消息驱动架构,支持多种输入、过滤和输出插件,能够方便地收集、处理和传输多样化日志数据,适用于构建灵活的日志管理系统。Logstash的工作流程包括输入、过滤(可选)和输出三个阶段,具有良好的可扩展性和集群扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1简介

Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。它是ELK Stack重要的组成部分,诞生于2009年8月2日,作者是世界著名运维工程师Jordan Sissel。

2设计及架构

LogStash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上。不同于分离的代理端(agent)或主机端(server),LogStash可配置单一的代理端(agent)与其它开源软件结合,以实现不同的功能。在LogStash的生态系统中,主要分为四大组件:Shipper:发送事件(events)至LogStash;通常,远程代理端(agent)只需要运行这个组件即可;

Broker and Indexer:接收并索引化事件;

Search and Storage:允许对事件进行搜索和存储;

Web Interface:基于Web的展示界面

正是由于以上组件在LogStash架构中可独立部署,才提供了更好的集群扩展性。

在大多数情况下,LogStash主机可分为两大类:

代理主机(agent host):作为事件的传递者(shipper),将各种日志数据发送至中心主机;只需运行Logstash代理(agent)程序;

中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储。

3部署架构

Logstash的理念很简单,它只做3件事情:Collect:数据输入

Enrich:数据加工,如过滤,改写等

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概念简单,通过组合可以满足多种需求。

4工作原理

Logstash使用管道方式进行日志的搜集处理和输出。有点类似UNIX系统的管道命令xxx | bbb | ddd,xxx执行完了会执行bbb,然后执行ddd。

Logstash整个的数据处理过程可以抽象成一个Pipeline,即通过两个必备要素:input和output,一个可选要素filter来完成数据处理。Input可从数据源消费数据,通过Filter对数据源进行制定的处理,再将数据输出到特定的数据存储位置。

在logstash中,包括了三个阶段:

输入input –>处理filter(不是必须的)–>输出output

Input:你使用Inputs去获取数据到Logstash中

Filter:logstash管道中间处理的设备。可以结合条件语句对符合标准的事件进行处理。

Output:logstash管道的最后一个阶段。一个事件可以经过多个output。但是一旦所有输出处理完,该事件已经执行完。

每个阶段都由很多的插件配合工作,比如file、elasticsearch、redis等等。

每个阶段也可以指定多种方式,比如输出既可以输出到elasticsearch中,也可以指定到stdout在控制台打印。

由于这种插件式的组织方式,使得logstash变得易于扩展和定制。

工作流程

Logstash agent监控并过滤日志,将过滤后的日志内容发给redis,logstash index将日志收集在一起交给下一个。

5Logstash pipeline

Logstash会持续监控被监控机器的日志,这为我们提供了极大的方便,我们可以实时看到机器的状态,并通过Kibana进行可视化。Logstash更擅长处理流式数据,而不是静态数据。

5.1input plugin

你使用Inputs去获取数据到Logstash中

Logstash提供了多种input导入方式,常用的有:file、exec、heartbeat等

5.2filter plugin

logstash管道中间处理的设备。可以结合条件语句对符合标准的事件进行处理。

Logstash也提供了大量的导出方式,常用的有:kafka、elasticsearch等

5.3output plugin

logstash管道的最后一个阶段。一个事件可以经过多个output。但是一旦所有输出处理完,该事件已经执行完。

Logstash也提供了大量的导出方式,常用的有:kafka、elasticsearch等。

6线程模型

当前logstash线程模型是:

input threads | filter worker threads | output worker

过滤器是可选的,没有filter是这样的:

input threads | output worker

每个input运行在自身的一个线程。这可以防止繁忙的input阻塞慢的。

filter线程模型是工人模型,每个工人接收到一个事件,并应用于所有过滤器,再将其发送到output队列。在CPU可扩展性,因为许多过滤器是CPU密集型的。filter workers默认是1,在启动logstash时,可以通过-w指定。

output当前工作模式是一个线程。output接收事件的顺序是以配置文件定义的输出顺序。

output在发布它们之前可能会决定临时缓存事件。这方面elasticsearch output是一个例子,缓存事件和刷新它们使用一个单独的线程。该机制(缓存很多事件和写使用单独的线程)可以改善性能,因为可以防止logstash管道一直等待elasticsearch响应。

logstash通常至少有3个线程,如果没有filter只有2个。一个input线程,一个filter worker线程,和一个output线程。如果看到logstash使用多个CPU,这就是原因。

7优势

对日志数据更好的语法分析功能;

更加灵活的日志存储方式;

附带搜索和目录功能;

易于安装、可扩展、性能良好等;

配置简易上手。Logstash是Ruby DSL设计,是目前业界最通用的配置语法设计;

集群线性扩展。不管是Elasticsearch集群还是Logstash集群都是可以线性扩展的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值