找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 748|回复: 1

ELK实战之一-Logstash&Grok正则实战

[复制链接]

31

主题

20

回帖

279

积分

管理员

积分
279
发表于 2024-1-13 12:34:25 | 显示全部楼层 |阅读模式
1.1  Logstash配置详解

Logstash 是一个开源的数据收集引擎,它具有备实时数据传输能力。它可以统一过滤来自不同源的数据,并按照开发者的制定的规范输出到目的地。

Logstash 通过管道进行运作,管道有两个必需的元素,输入和输出,还有一个可选的元素,过滤器。输入插件从数据源获取数据,过滤器插件根据用户指定的数据格式修改数据,输出插件则将数据写入到目的地。

图片8.png

  • 输入 input { ... }
  • 过滤器 filter { ... }
  • 输出 output { ... }

使用Logstash之前,需要了解一个概念:事件,Logstash 每读取一次数据的行为叫做事件。Logstach 目录中创建一个配置文件,命名为 logstash.conf或者其他名称;

Logstash过滤器插件位于 Logstash 管道的中间位置,对事件执行过滤处理,配置在 filter {},且可以配置多个,使用 grok 插件演示,grok 插件用于过滤杂乱的内容,将其结构化,增加可读性,如下案例一:

input {
     stdin {}
}
filter {
     grok {
     match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
     }
}
output {
     stdout {
        codec => "rubydebug"
     }
}

图片9.png

输入如下代码:

192.168.0.111 GET /index.html 13843 0.059

图片10.png

Grok内置的默认类型有很多种,可以通过官网查看支持的类型:


图片11.png

USERNAME [a-zA-Z0-9._-]+
USER %{USERNAME}
EMAILLOCALPART [a-zA-Z][a-zA-Z0-9_.+-=:]+
EMAILADDRESS %{EMAILLOCALPART}@%{HOSTNAME}
INT (?:[+-]?(?:[0-9]+))
BASE10NUM (?<![0-9.+-])(?>[+-]?(??:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
NUMBER (?:%{BASE10NUM})
BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+))
BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(??:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\b
POSINT \b(?:[1-9][0-9]*)\b
NONNEGINT \b(?:[0-9]+)\b
WORD \b\w+\b
NOTSPACE \S+
SPACE \s*
DATA .*?
GREEDYDATA .*
QUOTEDSTRING (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))
UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}
# URN, allowing use of RFC 2141 section 2.3 reserved characters
URN urn:[0-9A-Za-z][0-9A-Za-z-]{0,31}?:%[0-9a-fA-F]{2}|[0-9A-Za-z()+,.:=@;$_!*'/?#-])+

使用自定义的Grok类型,更多时候logstash grok没办法提供你所需要的匹配类型,这个时候我们可以使用自定义;
n 直接使用oniguruma语法去匹配文本片段,语法如下:

(?<field_name>the pattern here)

假设你需要匹配的文本片段为一个长度为10或11的十六进制的值,使用下列语法可以获取该片段,并把值赋予queue_id,如下配置:

(?<queue_id>[0-9A-F]{10,11})

192.168.0.111 GET /index.html 15824 0.043 1

n 创建自定义pattern文件,语法如下:

创建文件夹patterns,在此文件夹下面创建一个文件,文件名随意,例如:postfix;

mkdir patterns

POSTFIX_QUEUEID [0-9A-F]{10,11}

input {
     stdin {}
}
filter {
grok {
patterns_dir => ["./patterns"]
match => { "message" => "%{IP:client_id_address} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:http_response_time} %{POSTFIX_QUEUEID:queue_id}" }
}
}
output {
     stdout {
        codec => "rubydebug"
     }
}

192.168.0.111 GET /index.html 15824 0.043 ABC24C98567

图片12.png

31

主题

20

回帖

279

积分

管理员

积分
279
 楼主| 发表于 2024-1-13 12:35:56 | 显示全部楼层

楼主太厉害了!楼主,I*老*虎*U!我觉得京峰教育学习网真是个好地方!
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表