logstash之grok插件自定义规则学习

2023-12-11 06:15

本文主要是介绍logstash之grok插件自定义规则学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1、前言
    • 2、Grok提供的常用Patterns说明及举例
      • 2.1 常用的表达式说明
    • 3、使用grok插件进行日志字段处理
    • 4、案例1:处理nginx的日志
      • 4.1、查看nginx日志格式
      • 4.2、对nginx的日志进行过滤处理
    • 5、案例2:处理tomcat的日志
      • 5.1、[安装logstash-filter-multiline](https://blog.csdn.net/weixin_44729138/article/details/115747384)
      • 5.2、对tomcat的日志进行过滤处理

1、前言

近期通过ELK(Elasticsearch, Logstash, Kibana)对Nginx产生的日志进行采集(往期文章),但是在对nginx的日志格式进行预处理的时候使用到了logstash的grok的插件,特意在此为大家分享下个人的学习总结。

2、Grok提供的常用Patterns说明及举例

要学习Grok的默认表达式,我们就要找到它的具体配置路径,路径如下:

patterns路径
[logstash安装路径]/vendor/bundle/jruby/x.x.x/gems/logstash-patterns-core-x.x.x/patterns

如我的如下:

/u01/isi/application/index/logstash-7.10.0/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns

2.1 常用的表达式说明

链接地址:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/legacy/grok-patterns

  • USERNAME 或 USER
    用户名:由数字、大小写及特殊字符(._-)组成的字符串。如:Tom、323、isi_186等
  • EMAILLOCALPART
    电子邮件用户名部分:首位由大小写字母组成,其他位由数字、大小写及特殊字符(_.±=:)组成的字符串。
    注意,国内的QQ纯数字邮箱账号是无法匹配的,需要修改正则。比如:stone、Gary_Lu、abc-123等
  • EMAILADDRESS
    电子邮件,比如:stone@abc.com、Gary_Lu@gmail.com、abc-123@163.com等
  • HTTPDUSER
    Apache服务器的用户,可以是EMAILADDRESS或USERNAME
  • INT
    整数:包括0和正负整数,比如:0、-123、43987等
  • BASE10NUM 或 NUMBER
    十进制数字:包括整数和小数,比如:0、18、5.23等
  • BASE16NUM
    十六进制数字,整数,比如:0x0045fa2d、-0x3F8709等
  • BASE16FLOAT
    十六进制数字,整数和小数
  • WORD
    字符串,包括数字和大小写字母
    比如:String、3529345、ILoveYou等
  • NOTSPACE
    不带任何空格的字符串
  • SPACE
    空格字符串
  • QUOTEDSTRING 或 QS
    带引号的字符串,比如:“This is an apple”、'What is your name?'等
  • UUID
    标准UUID,比如:550E8400-E29B-11D4-A716-446655440000
  • MAC
    MAC地址,可以是Cisco设备里的MAC地址,也可以是通用或者Windows系统的MAC地址
  • IP
    IP地址,IPv4或IPv6地址
    比如:127.0.0.1、FE80:0000:0000:0000:AAAA:0000:00C2:0002等
  • HOSTNAME
    主机名称
  • IPORHOST
    IP或者主机名称
  • HOSTPORT
    主机名(IP)+端口,比如:127.0.0.1:3306、api.stozen.net:8000等
  • PATH
    路径,Unix系统或者Windows系统里的路径格式,比如:/usr/local/nginx/sbin/nginx、c:\windows\system32\clr.exe等
  • URIPROTO
    URI协议,比如:http、ftp等
  • URIHOST
    URI主机,比如:www.stozen.net、10.0.0.1:22等
  • URIPATH
    URI路径,比如://www.stozen.net/abc/、/api.php等
  • URIPARAM
    URI里的GET参数,比如:?a=1&b=2&c=3
  • URIPATHPARAM
    URI路径+GET参数,比如://www.stozen.net/abc/api.php?a=1&b=2&c=3
  • URI
    完整的URI,比如:http://www.stozen.net/abc/api.php?a=1&b=2&c=3
  • MONTH
    月份名称,比如:Jan、January等
  • MONTHNUM
    月份数字,比如:03、9、12等
  • MONTHDAY
    日期数字,比如:03、9、31等
  • DAY
    星期几名称,比如:Mon、Monday等
  • YEAR
    年份数字
  • HOUR
    小时数字
  • MINUTE
    分钟数字
  • SECOND
    秒数字
  • TIME
    时间,比如:00:01:23
  • DATE_US
    美国日期格式,比如:10-15-1982、10/15/1982等
  • DATE_EU
    欧洲日期格式,比如:15-10-1982、15/10/1982、15.10.1982等
  • ISO8601_TIMEZONE
    ISO8601时间格式,比如:+10:23、-1023等
  • TIMESTAMP_ISO8601
    ISO8601时间戳格式,比如:2016-07-03T00:34:06+08:00
  • DATE
    日期,美国日期%{DATE_US}或者欧洲日期%{DATE_EU}
  • DATESTAMP
    完整日期+时间,比如:07-03-2016 00:34:06
  • HTTPDATE
    http默认日期格式,比如:03/Jul/2016:00:36:53 +0800
  • LOGLEVEL
    Log表达式,日志等级,比如:Alert、alert、ALERT、Error等

3、使用grok插件进行日志字段处理

grok在线工具:https://www.5axxw.com/tools/v2/grok.html
但是鉴于这个太慢太卡了,我自己用docker搭建一个,总共也就三步走:

  1. docker pull epurs/grokdebugger #拉取镜像
  2. docker run -itd --name=grok -p8000:80 epurs/grokdebugger #运行容器
  3. 页面访问http://192.168.16.115:8000/
    在这里插入图片描述

4、案例1:处理nginx的日志

4.1、查看nginx日志格式

在这里插入图片描述

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
  1. $remote_addr:客户端ip
  2. $remote_user:客户端的用户,通过在做了nginx访问控制后显示访问的用户名,否则为"-"
  3. $time_local:访问时间和时区
  4. $request:请求的URI和HTTP协议
  5. $status:HTTP请求状态
  6. $body_bytes_sent:发送给客户端文件内容大小
  7. $http_referer:url跳转来源
  8. $http_user_agent:用户终端浏览器等信息
  9. $http_x_forwarded_for:用户代理/蜘蛛、被转发请求的原始ip
    ``
    在这里插入图片描述

4.2、对nginx的日志进行过滤处理

以下为nginx中的一段access.log日志

124.71.129.73 - - [15/Apr/2021:11:19:14 +0800] "GET /proxy/count.haiwainet.cn/imgpv/592/5c7498c75a6acaa1ae50.png HTTP/1.0" 404 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.76" "118.26.130.253"
202.168.188.174 - - [15/Apr/2021:11:19:14 +0800] "GET /rongmeiti-wenhai-hongqi/openAPI/token/reflashToken HTTP/1.1" 200 53 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_202)" "-"
124.71.129.73 - - [15/Apr/2021:11:19:14 +0800] "POST /wenhai-api/essql/getDataBySql HTTP/1.0" 200 199940 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_221)" "111.32.83.42"
124.71.129.73 - - [15/Apr/2021:11:19:14 +0800] "POST /wenhai-api/essql/getDataBySql HTTP/1.0" 200 139 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_221)" "111.32.83.42"
60.194.35.67 - - [15/Apr/2021:11:19:14 +0800] "POST /wenhaiFt-datapush/openAPI/analysis/getSearchInfosInRaw HTTP/1.1" 200 2953812 "-" "Apache-HttpClient/4.5.13 (Java/1.8.0_112)" "-"
过滤规则表达式
%{IPV4:remote_ip} \- \- \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:status} %{NUMBER:bytes} \"%{NOTSPACE:domain}\" \"%{GREEDYDATA:access_url}\" \"%{GREEDYDATA:real_ip}\"

5、案例2:处理tomcat的日志

5.1、安装logstash-filter-multiline

详见地址:https://blog.csdn.net/weixin_44729138/article/details/115747384

不修改tomcat的日志配置

5.2、对tomcat的日志进行过滤处理

19-Mar-2021 14:45:06.943 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/root/pkg/apache-tomcat-9.0.33/webapps/docs]
19-Mar-2021 14:45:06.953 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/root/pkg/apache-tomcat-9.0.33/webapps/docs] has finished in [10] ms
19-Mar-2021 14:45:06.555 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/root/pkg/apache-tomcat-9.0.33/temporg.apache.catalina.LifecycleException: Protocol handler initialization failedat org.apache.catalina.core.StandardService.initInternal(StandardService.java:533)at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.lang.reflect.Method.invoke(Method.java:498)Caused by: java.net.BindException: Address already in useat sun.nio.ch.Net.bind0(Native Method)at sun.nio.ch.Net.bind(Net.java:433)at sun.nio.ch.Net.bind(Net.java:425)at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:229)at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:212)at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1141)at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1154)at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)at org.apache.catalina.connector.Connector.initInternal(Connector.java:1010)... 13 more
19-Mar-2021 14:45:06.775 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [383] milliseconds
19-Mar-2021 14:45:06.794 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
过滤规则表达式
%{NOTSPACE:Day_time} %{NOTSPACE:Day} %{LOGLEVEL} \[%{WORD}\] %{GREEDYDATA :message}

这篇关于logstash之grok插件自定义规则学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/479708

相关文章

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

基于Spring实现自定义错误信息返回详解

《基于Spring实现自定义错误信息返回详解》这篇文章主要为大家详细介绍了如何基于Spring实现自定义错误信息返回效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景目标实现产出背景Spring 提供了 @RestConChina编程trollerAdvice 用来实现 HTT

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

SpringBoot自定义注解如何解决公共字段填充问题

《SpringBoot自定义注解如何解决公共字段填充问题》本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间... 目录1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3

dubbo3 filter(过滤器)如何自定义过滤器

《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进... 目录dubbo3 filter(过滤器)简介dubbo 过滤器运行时机自定义 filter第一种 @A

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

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

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

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容