【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

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类