【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

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

Redis中的常用的五种数据类型详解

《Redis中的常用的五种数据类型详解》:本文主要介绍Redis中的常用的五种数据类型详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis常用的五种数据类型一、字符串(String)简介常用命令应用场景二、哈希(Hash)简介常用命令应用场景三、列表(L