elasticsearch logstash/grok自定义文件
我是ELK stack的全新用户。我在从日志中筛选出特定部分时遇到了一个小问题 示例日志:elasticsearch logstash/grok自定义文件,elasticsearch,logging,logstash,logstash-grok,elasticsearch,Logging,Logstash,Logstash Grok,我是ELK stack的全新用户。我在从日志中筛选出特定部分时遇到了一个小问题 示例日志: [2017-05-30 13:58:09,336] INFO [com.qwerty.test.core.services.impl.order.OrderEntryService] (OrderEntryService.java:5426) [http-/0.0.0.0:1111-111] {{CT,1496145487308}{IP,111.11.111.11}{JTX,1511059/176275
[2017-05-30 13:58:09,336] INFO [com.qwerty.test.core.services.impl.order.OrderEntryService] (OrderEntryService.java:5426) [http-/0.0.0.0:1111-111] {{CT,1496145487308}{IP,111.11.111.11}{JTX,1511059/176275501}{OBJT,goodsMovement.reportsUtils.ConsignmentStocksList}{OPT,SQ}{PID,111111}{SS,SSCPLTMPRODPL}{TRT,SAP_LOGISTIC_REPORT}{UID,StudentSaSo-8}}: Saving order: K1010101
grok {
match => { "message" => "(?<timestamp>%{YEAR}-%{MONTHNUM2}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{NONNEGINT})\] %{LOGLEVEL:loglevel} * \[(?<logger>[A-Za-z0-9$_.]+)\] \(%{JAVAFILE:class}:%{NONNEGINT:line}\) \[%{NOTSPACE:thread}\] %{GREEDYDATA:message_TEST}"}
}
和我的grok过滤器:
[2017-05-30 13:58:09,336] INFO [com.qwerty.test.core.services.impl.order.OrderEntryService] (OrderEntryService.java:5426) [http-/0.0.0.0:1111-111] {{CT,1496145487308}{IP,111.11.111.11}{JTX,1511059/176275501}{OBJT,goodsMovement.reportsUtils.ConsignmentStocksList}{OPT,SQ}{PID,111111}{SS,SSCPLTMPRODPL}{TRT,SAP_LOGISTIC_REPORT}{UID,StudentSaSo-8}}: Saving order: K1010101
grok {
match => { "message" => "(?<timestamp>%{YEAR}-%{MONTHNUM2}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{NONNEGINT})\] %{LOGLEVEL:loglevel} * \[(?<logger>[A-Za-z0-9$_.]+)\] \(%{JAVAFILE:class}:%{NONNEGINT:line}\) \[%{NOTSPACE:thread}\] %{GREEDYDATA:message_TEST}"}
}
grok{
match=>{“message”=>“(?%{YEAR}-%{MONTHNUM2}-%{MONTHDAY}%{HOUR}:%{MINUTE}:%{SECOND},%{NONNEGINT})\]%{LOGLEVEL:LOGLEVEL}*\[(?[A-Za-z0-9$\.]+)\]\%{JAVAFILE:class}:%{NONNEGINT:line})\[%{NOTSPACE:thread\]%{GREEDYDATA:message TEST}}
}
所以我需要过滤掉“ID”、“PID”、“IP”和“UID”,我不知道如何配置这个特定的定制模式。
我尝试使用来自的模式,但它对我不起作用开始您的工作很好。不是最后一部分
%{greedyddata:message_TEST}
,它只会将消息的其余部分保存到message_TEST
中,而是实际执行对象的解析。类似的操作会将对象中的PID
、IP
和UID
字段保存到相应的变量中(请记住,此模式依赖于字段顺序):
现在我们来解释一下它的作用。外部一对花括号是对象的限制。然后,我们将处理对象内部由一对花括号限制的每个字段
- 第一:打开花括号
{
- 然后,第一个内部字段是
,我们对保存它不感兴趣-所以只需告诉grok有一些字符串被花括号限制:{CT,1496145487308}
{.*}
- 接下来是我们需要保存的IP字段:
。它以花括号开始,然后是我们必须保存的IP地址(匹配中的最后一个IP是存储IP地址的变量的名称):{IP,111.11.111.11}
{IP,%{IPV4:IP}
- 现在我们有三组字符串,它们被花括号包围,我们不需要保存:
,对于grok,它看起来像:{JTX,1511059/176275501}{OBJT,goodsMovement.reportsUtils.commissionstockslist}{OPT,SQ}
({.*}{3}
- 然后是PID字段:
,因为grok PID只是一个正整数,类似于被花括号包围的IP,前面有{PID,111111}
:PID,
{PID,%{POSINT:PID}
- 我们不想保存的另外两个组。与前面的组类似,跳过它们:
({.*}){2}
- 最后一个字段是:
,这只是grok的一个数据字符串。类似于IP和PID将其保存在各自的变量中:{UID,StudentSaSo-8}
{UID,%{data:UID}
- 最后我们有一个右括号:
}
(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{NONNEGINT})\] %{LOGLEVEL:loglevel} * \[(?<logger>[A-Za-z0-9$_.]+)\] \(%{JAVAFILE:class}:%{NONNEGINT:line}\) \[%{NOTSPACE:thread}\] {%{DATA}{IP,%{IPV4:IP}}({.*}){3}{PID,%{POSINT:PID}}({.*}){2}{UID,%{DATA:UID}}}
[代码><代码>({{码码码><码码码>({{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{年}}{{{{年}}{{{{年}}{{年}{{{年}{年}{码}{{{{{年}}{{码码码}}}{{{{{{{{{{{{{年}年}}}{{{{{{{{年}年}年}}年}年}}}}{{{{{{{{{{{{年}年}年}年}}年}年}年}年}年}年}年}{{{{{{{{{{{{{{{{{年}年}年}}}{UID,%{DATA:UID}
谢谢alexK的回复,但在您的评论之后,我的日志又有一个问题。它们不规则。有些行只有IP和PID或JTX、PID和UID,而且它们混合在一起,我的意思是IP、UID等字段不总是在同一位置…:/i映射整个日志就像您编写的{CT、%%数据:CT}{IP、%%IPV4:IP}{JTX一样{NONNEGINT:jtx}{OBJT,%%{GREEDYDATA:OBJT}{OPT%{GREEDYDATA:OPT}{PID,%%{POSINT:PID}{SS,%%{GREEDYDATA:SS}{TRT,%%{GREEDYDATA:TRT}{UID,%%DATA:UID}}{PID,{GREEDYDATA log\u message有没有办法通过自动搜索给定字段或类似的内容来实现这一点吗?