Logstash


Logstash教程

Logstash是一个开源的、集中的、事件和日志管理器。它是ELK(ElasticSearch、Logstash、Kibana)栈的一部分。在本教程中,我们将了解Logstash的基础知识、它的功能以及它的各种组件。

本教程是为那些想通过简单易行的步骤学习Logstash的基础知识及其编程概念的软件专业人士设计的。它通过合适的例子来描述Logstash的组件和功能。

前提条件

读者应该对Ruby、JSON和网络技术有基本了解。此外,熟悉日志技术和Regex模式对读者来说也有帮助。


Logstash是一个基于过滤器/管道模式的工具,用于收集、处理和生成日志或事件。它有助于集中处理和实时分析来自不同来源的日志和事件。

Logstash是用JRuby编程语言编写的,在JVM上运行,因此你可以在不同平台上运行Logstash。它收集不同类型的数据,如日志、数据包、事件、交易、时间戳数据等,几乎来自每一种类型的来源。数据源可以是社会数据、电子商务、新闻文章、CRM、游戏数据、网络趋势、金融数据、物联网、移动设备等。

Logstash的一般功能

Logstash的一般特点如下-

  • Logstash可以从不同的来源收集数据,并发送至多个目的地。

  • Logstash可以处理所有类型的日志数据,如Apache日志、Windows事件日志、网络协议上的数据、标准输入的数据等等。

  • Logstash还可以处理http请求和响应数据。

  • Logstash提供了各种过滤器,通过解析和转换,帮助用户在数据中找到更多意义。

  • Logstash还可以用于处理物联网中的传感器数据。

  • Logstash是开源的,在Apache许可证2.0版本下可用。

Logstash的关键概念

Logstash的关键概念如下

事件对象

它是Logstash的主要对象,它封装了Logstash管道中的数据流。Logstash使用这个对象来存储输入数据并添加在过滤阶段创建的额外字段。

Logstash为开发者提供了一个事件API来操作事件。在本教程中,该事件被称为各种名称,如日志数据事件、日志事件、日志数据、输入日志数据、输出日志数据等。

管线

它由Logstash中从输入到输出的数据流阶段组成。输入数据被输入到管道中,并以事件的形式被处理。然后以用户或终端系统所需的格式发送到输出目的地。

输入

这是Logstash管道的第一个阶段,用于在Logstash中获取数据,以便进一步处理。Logstash提供了各种插件来从不同的平台获取数据。一些最常用的插件是 - 文件、Syslog、Redis和Beats。

过滤

这是Logstash的中间阶段,事件的实际处理发生在这里。开发者可以使用Logstash预定义的Regex模式来创建序列,以区分事件中的字段和接受输入事件的标准。

Logstash提供了各种插件来帮助开发者解析和转换事件为理想的结构。一些最常用的过滤插件是 - Grok, Mutate, Drop, Clone 和 Geoip。

输出

这是Logstash管道的最后一个阶段,输出的事件可以被格式化为目标系统所要求的结构。最后,它通过使用插件将完成处理后的输出事件发送至目的地。一些最常用的插件是 - Elasticsearch, File, Graphite, Statsd等。

Logstash的优势

以下几点解释了Logstash的各种优势-

  • Logstash提供了regex模式序列来识别和解析任何输入事件中的各种字段。

  • Logstash支持各种网络服务器和数据源来提取日志数据。

  • Logstash提供多个插件来解析和转换日志数据为任何用户想要的格式。

  • Logstash是集中式的,这使得它很容易处理和收集来自不同服务器的数据。

  • Logstash支持许多数据库、网络协议和其他服务作为日志事件的目标源。

  • Logstash使用HTTP协议,这使得用户可以升级Elasticsearch版本,而不需要锁定升级Logstash。

Logstash的劣势

以下几点解释了Logstash的各种劣势。

  • Logstash使用http,这对日志数据的处理有负面的影响。

  • 使用Logstash工作有时会有点复杂,因为它需要对输入的日志数据进行充分的理解和分析。

  • 过滤器插件不是通用的,所以,用户可能需要找到正确的模式序列,以避免解析中出现错误。

在下一章中,我们将了解什么是ELK Stack以及它是如何帮助Logstash的。


ELK是Elasticsearch、Logstash和Kibana的缩写。在ELK栈中,Logstash从不同的输入源提取日志数据或其他事件。它处理这些事件,然后将其存储在Elasticsearch中。Kibana是一个Web界面,它可以访问Elasticsearch中的日志数据并将其可视化。

Logstash和Elasticsearch

Logstash提供了输入和输出Elasticsearch插件来读写日志事件到Elasticsearch。Elasticsearch作为输出目的地也被Elasticsearch公司推荐,因为它与Kibana兼容。Logstash通过http协议将数据发送到Elasticsearch。

Elasticsearch提供了批量上传工具,这有助于将不同来源或Logstash实例的数据上传到一个集中的Elasticsearch引擎。与其他DevOps解决方案相比,ELK有以下优势-

  • ELK堆栈更容易管理,可以扩展到处理PB级的事件。

  • ELK栈的架构非常灵活,它提供了与Hadoop的集成。Hadoop主要用于存档目的。Logstash可以通过使用flume直接连接到Hadoop,Elasticsearch提供了一个名为es-hadoop的连接器来与Hadoop连接。

  • ELK的所有权总成本比其替代品要低得多。

Logstash和Kibana

Kibana不直接与Logstash交互,而是通过数据源,也就是ELK堆栈中的Elasticsearch。Logstash从每个来源收集数据,Elasticsearch以非常快的速度分析数据,然后Kibana提供关于这些数据的可操作的见解。

Kibana是一个基于Web的可视化工具,它帮助开发者和其他人分析Elasticsearch引擎中Logstash收集的大量事件的变化。这种可视化使得预测或查看输入源的错误或其他重要事件的趋势变化变得容易。


本环境中已安装好Logstash,无需重复安装。本步骤仅供需要在本地安装Logstash的同学参考。

要在系统上安装Logstash,我们应该按照下面的步骤进行 -

第1步 - 检查你的电脑中安装的Java版本;它应该是Java 8,因为它与Java 9不兼容。 你可以通过以下方式检查 -

在Windows操作系统(OS)中(使用命令提示)-

/> java -version 

在UNIX操作系统中(使用终端)-

\$ echo \$JAVA_HOME

第2步 - 从以下网站下载Logstash

https://www.elastic.co/downloads/logstash。
  • 对于Windows操作系统,下载ZIP文件。

  • 对于UNIX操作系统,下载TAR文件。

  • 对于Debian操作系统,下载DEB文件。

  • 对于Red Hat和其他Linux发行版,下载RPN文件。

  • APT和Yum工具也可以用来在许多Linux发行版中安装Logstash。

第3步 - Logstash的安装过程非常简单。让我们看看如何在不同平台上安装Logstash。

注意 - 不要在安装文件夹中放任何空白或冒号。

  • Windows操作系统 - 解压压缩包,Logstash就安装好了。

  • UNIX操作系统 - 在任何位置提取tar文件,Logstash就被安装了。

$tar -xvf logstash-5.0.2.tar.gz

在Linux操作系统上使用APT工具 -

  • 下载并安装公共签名密钥 -
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - 
  • 保存版本库定义 -
$ echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo
   tee -a /etc/apt/sources.list.d/elastic-5.x.list
  • 运行更新 -
$ sudo apt-get update
  • 现在你可以使用下面的命令进行安装 --
$ sudo apt-get install logstash

在Debian Linux操作系统上使用YUM工具 -

  • 下载并安装公共签名密钥 -
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  • 在你的o"/etc/yum.repos.d/"目录下,在带有.repo后缀的文件中添加以下文本。例如,logstash.repo
[logstash-5.x]
name = Elastic repository for 5.x packages
baseurl = https://artifacts.elastic.co/packages/5.x/yum
gpgcheck = 1
gpgkey = https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled = 1
autorefresh = 1
type = rpm-md
  • 现在你可以通过使用以下命令来安装Logstash --
$ sudo yum install logstash

第4步 - 转到Logstash主目录。在bin文件夹内,如果是windows系统,运行elasticsearch.bat文件,或者你可以使用命令提示符和通过终端进行同样的操作。在UNIX中,运行Logstash文件。

我们需要指定输入源、输出源和可选过滤器。为了验证安装,你可以通过使用标准输入流(stdin)作为输入源和标准输出流(stdout)作为输出源,以基本配置运行它。你也可以通过使用-e选项在命令行中指定配置。

在Windows中 -

> cd logstash-5.0.1/bin
> Logstash -e 'input { stdin { } } output { stdout {} }' 。

在Linux中 -

$ cd logstash-5.0.1/bin
$ ./logstash -e 'input { stdin { } } output { stdout {} } }'

注意 - 如果是windows系统,你可能会得到一个错误,说明JAVA_HOME没有设置。为此,请在环境变量中设置为 "C:\Program Files\Java\jre1.8.0_111 "或你安装java的位置。

第5步 - Logstash Web界面的默认端口是9600到9700,在logstash-5.0.1\config\logstash.yml中定义为http.port,它将在给定的范围内选择第一个可用端口。

我们可以通过浏览http://localhost:9600, 检查Logstash服务器是否已经启动并运行,如果端口不同,那么请检查命令提示符或终端。我们可以看到分配的端口为 "成功启动Logstash API端点{:port ⇒ 9600}。它将返回一个JSON对象,其中包含关于已安装的Logstash的信息,具体方式如下-


在这一章中,我们将讨论关于Logstash的内部架构和不同组件。

Logstash服务架构

Logstash处理来自不同服务器和数据源的日志,它表现为发货人。托运人被用来收集日志,这些被安装在每个输入源中。像Redis、Kafka或RabbitMQ这样的经纪人是为索引器保存数据的缓冲器,可能有多个经纪人作为失败的实例。

像Lucene这样的索引器被用来对日志进行索引,以获得更好的搜索性能,然后输出被存储在Elasticsearch或其他输出目的地。输出存储中的数据可用于Kibana和其他可视化软件。

Logstash内部架构

Logstash流水线由输入、过滤器和输出三个部分组成。输入部分负责指定和访问输入数据源,如Apache Tomcat服务器的日志文件夹。

解释Logstash管道的例子

Logstash配置文件包含了关于Logstash的三个组件的细节。在这种情况下,我们要创建一个文件名为Logstash.conf。

下面的配置从输入日志 "inlog.log "中捕获数据,并将其写入输出日志 "outlog.log",没有任何过滤器。

Logstash.conf

在目录/usr/local/logstash下创建inlog.log文件并进行如下编辑。

Logstash配置文件只是使用输入插件从inlog.log文件复制数据,并使用输出插件将日志数据冲到outlog.log文件。

input {
   file {
      path => "/usr/local/logstash/bin/log/inlog.log"
   }
}
output {
   file {
      path => "/usr/local/logstash/bin/log/outlog.log"
   }
}

运行Logstash

Logstash使用-f选项来指定配置文件。 在目录/usr/local/logstash下创建logstash.conf文件并在usr\local\logstash\bin目录下启动。

usr\local\logstash\bin> ./logstash -f logstash.conf
    

inlog.log

下面的代码块显示了输入的日志数据。在Bin目录下创建文件夹,并在inlog.log内输入如下内容。

Hello XueZhiQiao.com

outlog.log

Logstash输出包含消息字段的输入数据。Logstash还在输出中添加了其他字段,如时间戳、输入源的路径、版本、主机和标签。

正如你所见,Logstash的输出包含了比通过输入日志提供的数据更多的内容。输出包含源路径、时间戳、版本、主机名和标签,这些都是用来表示错误等额外信息的。

我们可以使用过滤器来处理这些数据,使其对我们的需求有用。在下一个例子中,我们使用过滤器来获取数据,它将输出限制在只有像GET或POST这样的动词后面有一个唯一资源标识符的数据。

Logstash.conf

在这个Logstash配置中,我们添加了一个名为grok的过滤器来过滤掉输入数据。与模式序列输入日志相匹配的输入日志事件,只能以错误的方式到达输出目的地。Logstash在输出事件中添加了一个名为"_grokparsefailure "的标签,这与grok过滤器的模式序列不匹配。

Logstash为解析Apache等流行的服务器日志提供了许多内置的regex模式。这里使用的模式期望一个动词,如get、post等,后面跟一个统一资源标识符。

input {
   file {
      path => "/usr/local/logstash/bin/log/inlog.log"
   }
}
filter {
   grok {
      match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
   }
}
output {
   file {
      path => "/usr/local/logstash/bin/log/outlog.log"
   }
}

运行Logstash

我们可以通过使用以下命令来运行Logstash。

usr\local\logstash\bin> logstash -f logstash.conf

inlog.log

我们的输入文件包含两个事件,用默认分界符,即新行分界符分隔。第一个事件符合GROk中指定的模式,第二个则不符合。

GET /XueZhiQiao/Logstash
Input 1234

outlog.log

我们可以看到,第二个输出事件包含"_grokparsefailure "标签,因为它不匹配grok过滤模式。用户也可以通过使用输出插件中的 "if "条件来删除输出中的这些不匹配的事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值