ElasticSearch进阶(七)Logstash数据转换工具的使用

mac2022-12-08  31

前言

      本章讲解Logstash数据转换工具的基本使用

方法

1.概念

通过准备篇的学习,我们知道Logstash基于Java,是一个开源的用于收集分析和存储日志的工具,它最重要的功能就是将我们收集的日志做转换,以便于我们更好的进行解析!

首先我们来看一下Logstash,下面的图片来自于官网:https://www.elastic.co/cn/products/logstash

注意:本次示例将采集nginx的日志作为演示,请确保已经安装好nginx

2.Logstash的安装和配置测试

我们可以在官网下载指定版本的Logstash:https://www.elastic.co/cn/downloads/logstash

本次我们下载的是7.4.0的window版本:

首先我们进入到config路径下,由于我的电脑内存限制,修改jvm.options指定数据如下:

## JVM configuration # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms256m -Xmx256m

然后将logstash-sample.conf配置文件拷贝一份放入到bin路径下,重命名为logstash-file.conf,暂时将文件放在这,稍后修改!

我们在bin路径下运行如下命令:logstash.bat -e "input { stdin { } } output { stdout {} }"

我相信大家知道这是什么意思,标准化的输入加标准化输出

我们在控制台输入hello world,效果如下所示:

这说明,我们的logstash已经配置成功啦!

3.使用logstash将filebeat读取nginx日志输出到elasticsearch

1)配置我们的filebeat配置文件

#=========================== Filebeat inputs ============================= filebeat.inputs: - type: log enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - F:\nginx-1.17.5\logs\*.log #==================== Elasticsearch template setting ========================== setup.template.settings: index.number_of_shards: 1 #================================ Outputs ===================================== # Configure what output to use when sending the data collected by the beat. #----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts hosts: ["localhost:5044"]

使用命令启动filebeat:filebeat.exe -e -c filebeat-nginx.yml -d "publish"

2)配置logstash的配置文件

找到我们之前拷贝到bin路径下的配置文件logstash-file.conf,将其修改内容如下:

# Sample Logstash configuration for creating a simple # Beats -> Logstash -> Elasticsearch pipeline. input { beats { port => 5044 } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "filebeat-test" } }

使用命令启动logstash:logstash.bat -f logstash-file.conf --config.reload.automatic

3)启动es,观察es数据

我们发现,传输进入ES已经成功了,只不过我们的日志数据没有合理的解析,全部都包含在了message属性中,这对我们今后的解析是十分不利的,所以我们需要用到logstash的filter。

要想学习filter,首先就需要知道logstash的工作原理,一张图诠释了它的运行流程:

我们发现,它包含三个主要结构:INPUTS、FILTERS、OUTPUTS。

INPUTS:输入数据到logstash。FILTERS:数据中间处理,对数据进行操作。OUTPUTS:outputs是logstash处理管道的最末端组件。

其中,最难学的就是FILTERS的编写啦!

4)编写基本的FILTERS,转换message属性中的日志信息

本次示例使用的正则表达式来自于:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/httpd

# Sample Logstash configuration for creating a simple # Beats -> Logstash -> Elasticsearch pipeline. input { beats { port => 5044 } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}"} } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "filebeat-test" } }

本次无需重新启动logstash,因为我们配置了--config.reload.automatic

重新刷新几次nginx页面,观察后序的输出效果:

我们发现,logstash为我们新增了一些有用的属性将message的内容分解开来,有助于日后的分析与汇总。

更多过滤器的编写方法请参考官网:https://www.elastic.co/guide/en/logstash/current/index.html

最新回复(0)