【ELK之logstash】 grok入门:自测实例+常用正则(grok-patterns)

2024-04-23 03:38

本文主要是介绍【ELK之logstash】 grok入门:自测实例+常用正则(grok-patterns),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景
研究了grok几天,虽然知识还是很浅薄,但还是在这里做个总结。

场景 
在使用logstash进行日志收集工作的时候,filter是个很重要的插件,而其中的Grok能很好的解析日志。

logstash教程:https://blog.csdn.net/qq_34646817/article/details/81232083 
grok教程:https://blog.csdn.net/qq_34646817/article/details/81232121#t1

基础知识 
grok作为解析日志的插件,内含120种模式,即配置的正则。所以学习之前,不妨先去学习下

正则表达式https://deerchao.cn/tutorials/regex/regex.htm

 

Gork基础:

Gork支持 预置正则、自定义正则、插件过滤、Ruby代码过滤。性能应该是依次递减。

 

写Gork正则基本套路:

至少打开3个网页对照:

1.在线debug:http://grok.51vagaa.com/

支持自定义正则,修改后自动执行。如果经常写gork建议自己搭建一个debugger服务自己用。

 

2.Grok预定义正则含义:

https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

不想理解去自行百度查预置正则含义吧:https://blog.csdn.net/cai750415222/article/details/86614854

 

3.最基础的是正则符号含义API:

正则表达式https://deerchao.cn/tutorials/regex/regex.htm

http://www.net-add.com/a/zidonghuayunwei/rizhifenxi/2018/0717/77.html

 

4.在debugger网页尽情尝试吧,实践出真理。

Tips:

不要急慢慢来就不会被逼疯,如果现在很暴躁建议晚点或者明天再来debug..哈哈 本人死磕5个小时就一个简单的log匹配,硬是没搞懂,第二天用debugger一下就明白后总结的经验。

 

以下是Copy他人的使用示例:

二、自测示例
下一章罗列了常用的一些正则,规则详情也有;在进行记忆学习前,我先展示下我自己的自测学习示例。

日志
我这边有一个log4j的日志,部分展示如下

[2018-07-10T16:22:30,001] AbstractBeanFactory(doGetBean:248): Returning cached instance of singleton bean 'mainCtl'
[2018-07-10T16:22:30,007] MainCtl(doControl:52): current tradecode:trigger_timer,flowsn:1
[2018-07-10T16:22:30,008] FlowParser(getFlowInfo:462): debugow:C:\Users\61661\Downloads\tinyWebDemo\tinyWebDemo1\src\main\resources\flow\trigger_timer.flow
[2018-07-10T16:22:30,009] MainCtl(doControl:60): flowInfos:{1=id:1,name:script}
[2018-07-10T16:22:30,011] AbstractBeanFactory(doGetBean:248): Returning cached instance of singleton bean 'enumTools'
[2018-07-10T16:22:30,013] AbstractBeanFactory(doGetBean:248): Returning cached instance of singleton bean 'jsDemo'
[2018-07-10T16:22:30,013] JsDemo(init:18): js demo init
[2018-07-10T16:22:30,019] TinyLog(debug:17): [null-trigger_timer] do function trigger_timer_1
[2018-07-10T16:22:30,019] TinyLog(info:21): [null-trigger_timer] start timer......
[2018-07-10T16:22:30,020] MainCtl(doControl:103): :2ms

grok配置
grok的编写配置虽然不难,但是很容易出错,要善于学会使用grok debugger来测试。 
这边给一个中文版的测试网站(英文的要翻墙):http://grok.qiexun.net/

测试结果如下图,表达式为:

\[%{TIMESTAMP_ISO8601:logdate}\] %{WORD:AA}\(%{WORD:BB}:%{WORD:BB}\): %{GREEDYDATA:C}
1


编写conf文件
说明:以下命令根据自己的路径进行调整

当前目录下编写conf文件

input {
    file {
         #日志所在目录
        path => ["/opt/data/test.log"]
        type => "system"
        #从文件开始的地方读
        start_position => "beginning"
        #这个是我爬过的坑 T.T ,写上下面的这段,反复重启的时候,才会从文件开始的地方读
        sincedb_path => "/dev/null"
    }
}
filter {
    grok {
      match => { "message" => "\[%{TIMESTAMP_ISO8601:logdate}\] %{WORD:AA}\(%{WORD:BB}:%{WORD:BB}\): %{GREEDYDATA:C}" }
    }
    date {
      match => [ "logdate", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
}
output{
     stdout{
       codec=>rubydebug{}
    }
}

logstash 解析
执行命令

/opt/elk/logstash-6.2.2/bin/logstash -f test.conf  
1
最后结果如下(截取了一部分):

{
          "host" => "hadoop02",
       "message" => "[2018-07-10T16:22:30,019] TinyLog(debug:17): [null-trigger_timer] do function trigger_timer_1",
      "@version" => "1",
       "logdate" => "2018-07-10T16:22:30,019",
            "AA" => "TinyLog",
          "tags" => [
        [0] "_dateparsefailure"
    ],
             "C" => "[null-trigger_timer] do function trigger_timer_1",
            "BB" => [
        [0] "debug",
        [1] "17"
    ],
          "path" => "/opt/data/test.log",
    "@timestamp" => 2018-08-01T16:43:18.303Z,
          "type" => "system"
}
{
          "host" => "hadoop02",
       "message" => "[2018-07-10T16:22:30,019] TinyLog(info:21): [null-trigger_timer] start timer......",
      "@version" => "1",
       "logdate" => "2018-07-10T16:22:30,019",
            "AA" => "TinyLog",
          "tags" => [
        [0] "_dateparsefailure"
    ],
             "C" => "[null-trigger_timer] start timer......",
            "BB" => [
        [0] "info",
        [1] "21"
    ],
          "path" => "/opt/data/test.log",
▽   "@timestamp" => 2018-08-01T16:43:18.303Z,
          "type" => "system"
}
{
          "host" => "hadoop02",
       "message" => "[2018-07-10T16:22:30,020] MainCtl(doControl:103): :2ms",
      "@version" => "1",
       "logdate" => "2018-07-10T16:22:30,020",
            "AA" => "MainCtl",
          "tags" => [
        [0] "_dateparsefailure"
    ],
             "C" => ":2ms",
            "BB" => [
        [0] "doControl",
        [1] "103"
    ],
          "path" => "/opt/data/test.log",
    "@timestamp" => 2018-08-01T16:43:18.303Z,
          "type" => "system"
}

三、Gork常用的正则
说明:左边是名称,右边的是正则,意义都有在注解里面说明 
当然,你自己测一下就知道了。
https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

http://grok.51vagaa.com/patterns#

 

 

这篇关于【ELK之logstash】 grok入门:自测实例+常用正则(grok-patterns)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/927683

相关文章

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA