Logstash切词管理

发布时间 2023-09-13 10:05:37作者: 木易-故事里的人

当谈到日志管理时,Logstash是一个强大的工具,它可以帮助您分析和处理大量的日志数据。在Logstash中,切词管理是一个非常重要的概念,它可以帮助您将原始的日志数据拆分成更小、更易于处理的单元。在本文中,我们将讨论Logstash中的切词管理,以及如何使用它来优化您的日志处理流程。

什么是切词管理?

切词管理是一种将文本数据拆分成更小、更易于处理的单元的过程。在Logstash中,切词管理通常用于将原始的日志数据拆分成不同的字段,以便更容易地搜索、过滤和分析。例如,您可以将一个长的日志消息拆分成多个字段,如时间戳、日志级别、消息内容等等。

Logstash中的切词管理

在Logstash中,切词管理是通过使用grok过滤器来实现的。grok过滤器使用正则表达式来匹配和解析日志数据,并将其拆分成不同的字段。grok过滤器支持许多预定义的模式,如日期、时间、IP地址等等,同时也支持自定义模式。

以下是一个使用grok过滤器进行切词管理的示例:

ruby
filter {  
  grok {  
    match => { "message" => "%{COMBINEDAPACHELOG}" }  
  }  
}

 

在这个示例中,我们使用了一个预定义的模式COMBINEDAPACHELOG来匹配和解析Apache访问日志。这个模式将日志消息拆分成多个字段,如时间戳、客户端IP地址、请求行等等。通过使用这个过滤器,我们可以更容易地搜索、过滤和分析Apache访问日志。

自定义切词模式

除了使用预定义的模式外,grok过滤器还支持自定义模式。您可以使用自定义模式来匹配和解析您自己的日志格式。以下是一个使用自定义模式进行切词管理的示例:

ruby
filter {  
  grok {  
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{WORD:level} %{GREEDYDATA:message}" }  
  }  
}

 

在这个示例中,我们使用了一个自定义模式来匹配和解析日志消息。这个模式将日志消息拆分成时间戳、日志级别和消息内容等字段。通过使用这个过滤器,我们可以更容易地搜索、过滤和分析我们的日志数据。

总结

切词管理是Logstash中一个非常重要的概念,它可以帮助您将原始的日志数据拆分成更小、更易于处理的单元。通过使用grok过滤器和预定义或自定义模式,您可以轻松地将日志数据拆分成不同的字段,并优化您的日志处理流程。

 

正则grok示例:

示例1:
log
1 {"@timestamp":"2023-09-11T06:49:01+00:00","request_id":"fe560eef6ac00ed674591e4c8f17a909","server_protocol":"HTTP/1.1","http_user_agent":"Mozilla/5.0 (Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 QIHU 360ENT","host":"10.55.44.80","clientip":"10.51.13.176","size":0,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"10.55.44.80","url":"/index.html","xff":"-","referer":"-","status":"304"}

 

表达式
1 \{"@timestamp":"(?<@timestamp>(.*))","request_id":"(?<request_id>(.*))","server_protocol":"(?<server_protocol>(.*))","http_user_agent":"(?<http_user_agent>(.*)),"host":"(?<host>(.*))","clientip":"(?<clientip>(.*))","size":(?<size>(.*)),"responsetime":(?<responsetime>(.*)),"upstreamtime":"(?<upstreamtime>(.*))","upstreamhost":"(?<upstreamhost>(.*)),"http_host":"(?<http_host>(.*))","url":"(?<url>(.*)),"xff":"(?<xff>(.*))","referer":"(?<referer>(.*))","status":"(?<status>(.*))"\} \{"@timestamp":"(?<@timestamp>([0-9]{4}-[0-9]{2}-[0-9]{2}[A-Z][0-9]{2}:[0-9]{2}:[0-9]{2}[+][0-9]{2}:[0-9]{2}))","request_id":"(?<request_id>(.*))","server_protocol":"(?<server_protocol>(.*))","http_user_agent":"(?<http_user_agent>(.*)),"host":"(?<host>(.*))","clientip":"(?<clientip>(.*))","size":(?<size>(.*)),"responsetime":(?<responsetime>(.*)),"upstreamtime":"(?<upstreamtime>(.*))","upstreamhost":"(?<upstreamhost>(.*)),"http_host":"(?<http_host>(.*))","url":"(?<url>(.*)),"xff":"(?<xff>(.*))","referer":"(?<referer>(.*))","status":"(?<status>(.*))"\}

 

注:其中 .* 可以匹配全部,使用.* 将大体写出后在修改详细的正则表达式
最外层括号根据具体需求修改
例:\{\} \[\]
 
示例2
log
[2023-09-11 17:32:28.134] [admin-center-server] [] [TID:N/A] [INFO] [8] [com.alibaba.nacos.naming.client.listener] [com.netflix.config.ChainedDynamicProperty] : Flipping property: order-center-server.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647

 

表达式
\[(?<log.time>([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}))\]\s\[(?<application.name>([A-Za-z\-]+))\]\s\[(?<log.id>.*)\]\s\[(?<log.level>(INFO|WARN|ERROR|DEBUG))\]\s\[(?<log.pid>.*)\]\s\[(?<log.thread>.*)\]\s\[(?<log.class>.*)\]\s:\s(?<msg>.*)

 

日志格式规则时,可直接使用grok表达式,日志格式不规则时只能使用正则表达式

 

 

今日语录

  烈火试真金,逆境试强者