Logstash在ELK这一整套解决方案中作为数据采集终端,支持对接Kafka、数据库(MySQL、Oracle)、文件等等。

而在Logstash内部的数据流转,主要经过三个环节:input -> filter -> output,顾名思义就是输入、过滤(处理)以及输出。接下来通过一个实际的操作案例来感受一下Logstash内部的数据流转过程。

首先在官网下载Logstash的运行包,https://www.elastic.co/fr/downloads/logstash,由于我本地是Windows环境,因此选择下载Windows对应的包:

将下载完毕的压缩包logstash-7.14.1-windows-x86_64.zip进行解压之后进入bin目录并创建logstash.conf文件用于对input、filter以及output进行相应的配置:

接下来在配置文件中进行响应的配置,直接给出完整的例子并在后文进行详解:

input {
file {
path => "D:/logstash-7.14.1/test-log/test.log"
start_position => beginning
}
} filter {
grok {
match => { "message" => "(?<Time>[0-9]{6}\.[0-9]{3})\[(?<LogLevel>\d)\]\[(?<ThreadNo>[0-9]*)\].*(?<Tag>FindResponseByPage)\[fund\_account\=(?<FundAccount>[0-9]*)" }
} if [Tag] != "FindResponseByPage" {
drop {}
}
} output {
file {
path => "D:/logstash-7.14.1/test-log/logstash.log"
codec => line {
format => "Time: %{Time}, LogLevel: %{LogLevel}, ThreadNo: %{ThreadNo}, Tag: %{Tag}, FundAccount: %{FundAccount}"
}
}
}

input 中添加 file 项表示通过文件进行输入,path 为文件的绝对路径(如果配置非绝对路径,Logstash会给出报错提示),start_position => beginning 表示每次从文件头开始读取。

filter中则进行对输入数据的相关处理进行配置(filter可以不配置,效果是原样输出)。

grok是Logstash的核心插件之一,可以根据配置的表达式进行数据筛选并存入指定的变量名中。grok提供了一系列标准的匹配模板,不过由于grok底层也是基于正则表达式,因此也可以直接输入正则表达式进行匹配。

这里搬运一个官网上的例子:

55.3.244.1 GET /index.html 15824 0.043

针对上述格式的数据,可以通过grok提供的标准表达式模板进行匹配:

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

示例中,IP为预定义的模板,client为准备存入的变量名。很容易看出,grok的标准语法如下:

%{SYNTAX:SEMANTIC}

SYNTAX:匹配值的类型,例如15824可以用NUMBER类型所匹配,55.3.244.1可以使用IP类型匹配。
SEMANTIC:存储该值的一个变量名,例如GET可能代表的是REST请求中指定的方法,那么用method来进行保存。

当然,像上方的配置文件示例中一样,通过原生的正则表达式来进行匹配也可以,不使用预定义模板的格式如下:

(?<field_name>the pattern here)

其中field_name表示保存匹配到内容的变量名,后面部分则是表达式,例如:

093124.597[0][30100]

对应的匹配表达式为:

?<Time>[0-9]{6}\.[0-9]{3})\[(?<LogLevel>\d)\]\[(?<ThreadNo>[0-9]*)\]

根据匹配到的值可以通过drop进行一个筛选,例如只需要LogLevel值为error的数据,可以在filter中添加如下配置:

if [LogLevel] != "error" {
drop {}
}

output这里同样配置了file,也就是将输入的数据经过处理后输出到另一个指定文件中,path为输出文件的绝对路径,format则指定了输出的格式。

接下来启动Logstash来观察一下效果,在bin目录打开命令行并输入启动命令:

再看一下输入文件和输出文件中的效果,首先是输入文件test.log:

接下来是输出文件logstash.log,成功达到了了字段匹配以及筛选的效果:

最后补充一点,Logstash的插件非常多,配置项也非常多。建议直接在官网进行学习,再介绍下如何阅读官网的配置详解:

导航栏右侧有input、filter、output等插件的栏目,通过点击导航栏或者左侧正文部分的具体配置项,可以点击进一步查看配置详情:

ELK学习之Logstash篇的更多相关文章

  1. ELK学习之Logstash+Kafka篇

    上一篇介绍了一下Logstash的数据处理过程以及一些基本的配置功能,同时也提到了Logstash作为一个数据采集端,支持对接多种输入数据源,其中就包括Kafka.那么这次的学习不妨研究一下Logst ...

  2. ELK学习笔记之Logstash详解

    0x00 Logstash概述 官方介绍:Logstash is an open source data collection engine with real-time pipelining cap ...

  3. ELK stack elasticsearch/logstash/kibana 关系和介绍

    ELK stack elasticsearch 后续简称ES logstack 简称LS kibana 简称K 日志分析利器 elasticsearch 是索引集群系统 logstash 是日志归集集 ...

  4. Java工程师学习指南 完结篇

    Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...

  5. ELK 性能(1) — Logstash 性能及其替代方案

    ELK 性能(1) - Logstash 性能及其替代方案 介绍 当谈及集中日志到 Elasticsearch 时,首先想到的日志传输(log shipper)就是 Logstash.开发者听说过它, ...

  6. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  7. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  8. Python3学习(3)-高级篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 文件读写 源文件test.txt line1 line2 line3 读取文件内容 f = ope ...

  9. Python3学习(2)-中级篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 切片:取数组.元组中的部分元素 L=['Jack','Mick','Leon','Jane','A ...

随机推荐

  1. Spring Cloud分区发布实践(1) 环境准备

    最近研究了一下Spring Cloud里面的灰度发布, 看到各种各样的使用方式, 真是纷繁复杂, 眼花缭乱, 不同的场景需要不同的解决思路. 那我们也来实践一下最简单的场景: 区域划分: 服务分为be ...

  2. CC攻击和C2的区别

    [一]背景 今天被旁边姐姐问C2.CC是什么,虽然平时老看到这个词,身边也有自己写C2工具的大佬.但好像突然被问到有点懵,不知道怎么回答. [二]内容 CC ( Challenge Collapsar ...

  3. bugku-misc 9-16

    宽带信息泄露 拿到一个bin后缀的文件,知道是一个二进制文件,但是题目提到的和宽带有关,flag就是用户名.可以使用RoutePassView这个工具,使用的时候记得关闭杀毒软件. 工具可以在这里下载 ...

  4. Windows协议 LDAP篇 - 域用户和计算机用户

    域用户 查询域用户 通过SAMR协议查询(net user就是通过这种协议查询的),samr也不是一种专门的协议,是一个RPC接口 在impacket里有个脚本samrdump.py,就是专门调用这个 ...

  5. Lateral Movement

    简介 这次去宁夏护网,发现我有的朋友连最基本的横向渗透有些都不晓得,他们问我 我也表达不清楚...,就想着写篇文章总结下吧 (慢慢更..) 可以发我邮箱讨论:muxue@protonmail.com ...

  6. 并发编程——线程中sleep(),yield(),join(),wait(),notify(),notifyAll()区别

    前言 今天简单的讲一讲线程中sleep(),join(),yield(),wait(),notify(),notifyAll()这些方法的使用以及区别. 不过在讲这些方法之前,需要简单的介绍一下锁池和 ...

  7. HDFS总结

    hadoop分布式文件存储系统,用来解决海量数据的存储问题 HDFS的组成------核心配置文件:hdfs-site.xml.core-site.xml NameNode:负责整个HDFS集群的管理 ...

  8. RationalRose使用

    UML 概述 什么是 UML? Unified Modeling Language (UML)又称统一建模语言或标准建 模语言,是始于 1997 年一个 OMG 标准,它是一个支持模型化 和软件系统开 ...

  9. Linux的磁盘管理和文件系统

    一.磁盘结构 1.1.硬盘的物理结构 盘头:硬盘有多个盘片,每盘片2面 磁头:每面一个磁头 1.2.硬盘的数据结构 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据,硬盘的最小存储单位 磁道 ...

  10. Shell-01-变量

    变量 系统常用变量 #!/bin/bash echo "默认shell: $SHELL" echo "当前用户家目录: $HOME" echo "内部 ...