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

相关文章

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

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

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

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机