Thu Sep 27 15:30:27 BST 2012:- Invalid token $_POST[custom], which indicates the amount, userid
这是我正在尝试使用grok解析logstash的日志文件.
前几个字段还可以,它看起来非常接近DATESTAMP_OTHER,但我认为BST的英国时区搞砸了.
到目前为止,但不知道如何使它工作!
%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %([PMCEB][SD]T) %{YEAR} %{GREEDYDATA:message}
如何为时间格式写一个grok模式01/27/2015 09:32:44 AM我尝试了%{DATESTAMP:timestamp}但它没有接受AM,任何帮助都非常感谢.
我有这些日志,我试图从每一行用grok提取多个信息.但似乎没有考虑到一些比赛,尽管它们对我来说似乎很好.
这是一个示例行:
"#wtb# GetSP ok. Referer:http://test.redacted.com/path?query=string. Wtb:535e2554bdfdf33a22f564d0. Name:Client. Eans:3017565410073."
Run Code Online (Sandbox Code Playgroud)
并且继承人'conf文件的相关部分:
grok{
break_on_match => false
match => [
"msg", "Referer:%{URI:referer}\.",
"msg", "Wtb:%{WORD:wtb}",
"msg", "Name:(?<name>[^\.]+)",
"msg", "Eans:(?<eans>[\d,]+)",
"referer", "https?://%{HOSTNAME:host}"
]
tag_on_failure => []
}
Run Code Online (Sandbox Code Playgroud)
我正在使用多个匹配,因为每行可以是样本中给出的各种参数的任意组合.
在Kibana,该事件具有referer与host添加字段,但所有的人失踪(wtb,name,eans).我不知道为什么.自添加最后一个模式后,它在成功匹配后不会停止.任何人都可以发现我错过的东西吗?
这是我的日志:
68.192.186.96 - - [18/May/2015:12:54:42 +0000] GET http://test.com/sectionId/592/apiVersion/2/type/json HTTP/1.1 200 575 \"-\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36\" \"icon_seq=0; PHPSESSID=frmnhfrrc25ullikbv71thc283\"
Run Code Online (Sandbox Code Playgroud)
这是我的模式
%{IPORHOST:remoteip} \- \- \[%{HTTPDATE:timestamp}\] %{WORD:verb} %{NOTSPACE:request} HTTP/%{NUMBER:httpversion} %{NUMBER:status} %{NUMBER:requestNum} \"\-\" %{QUOTEDSTRING:agent}
Run Code Online (Sandbox Code Playgroud)
当我检查时,日志中的反斜杠给我带来了问题。我该如何逃脱?谢谢!
我正在编写一种grok 模式来解析cinder-api的fluenced中的日志,其中一行是:
2015-09-17 17:44:49.663 ^[[00;32mDEBUG oslo_concurrency.lockutils [^[[00;36m-^[[00;32m] ^[[01;35m^[[00;32mAcquired semaphore "singleton_lock"^[[00m ^[[00;33mfrom (pid=30534) lock /usr/local/lib/python2.7/dist-packages/oslo_concurrency/lockutils.py:198^[[00m
Run Code Online (Sandbox Code Playgroud)
和^[[00;32m其他此类事件是ASCII 颜色代码,在终端中打印时打印如下:
我需要解析该行,并且当没有使用(测试的)模式的
颜色代码时我能够做到这一点%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{LOGLEVEL:loglevel}%{SPACE}{NOTSPACE:api}%{SPACE}\[(?:%{DATA:request})\]%{SPACE}%{GREEDYDATA:message}
如何修改 grok 模式以便能够解析彩色日志行?
我发现以下内容是否可以帮助任何人找到解决方案:
^[实际上是ESC键,八进制代码为\033,十六进制代码为\x1B,十进制 ASCII 代码为27 ,也用^[表示。不幸的是,我还不是一个正则表达式专家,因此遇到以下问题:假设我有一个包含多个链式异常的Java堆栈跟踪,我想要达到的是提取以"由...引起"的最后一行.
javax.servlet.ServletException: Something bad happened
at com.example.myproject.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:60)
.
.
Caused by: com.example.myproject.MyProjectServletException
.
.
Caused by: This is the line I want to capture
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现Caused by.(?!.*Caused by)基于负向前瞻,在我删除了所有标签和空格后,给了我最后一个"由...引起"(但不是其余部分).有没有办法让我得到我想要的结果?如果必须删除所有空格,那对我来说没问题.谢谢!
编辑:对不起,我想我忘记了一些非常重要的事情.使用'substring'将是Java中的完美解决方案,但我需要的是一个正则表达式,我可以在Logstash中用于grok模式.
我有一个简单的logstash grok过滤器:
filter {
grok {
match => { "message" => "^%{TIMESTAMP_ISO8601:timestamp} %{NOTSPACE:name} %{WORD:level} %{SPACE} %{GREEDYDATA:message}$" }
overwrite => [ "message" ]
}
}
Run Code Online (Sandbox Code Playgroud)
这可行,它解析我的日志,但根据Kibana,时间戳值以数据类型输出string.
logstash @timestamp字段具有数据类型date.
grok文档说您可以指定数据类型转换,但只支持int和float:
如果您希望转换语义的数据类型,例如将字符串更改为整数,则使用目标数据类型将其后缀.例如%{NUMBER:num:int},它将num语义从字符串转换为整数.目前唯一支持的转换是int和float.
这表明我应该把它留作字符串,但是,如果索引支持datetime值,为什么你不希望它正确存储并可以作为日期时间进行排序?
这是我的骗子模式
2017年9月25日08:58:17,861 p = 14774 u = ec2用户| 14774 1506329897.86160:检查any_errors_fatal
我正在尝试读取用户,但是只给出ec2,没有给出完整的单词
抱歉,我是grok过滤器的新手
我目前的模式:
%{TIMESTAMP_ISO8601:timestamp} p =%{WORD:process_id} u =%{WORD:user_id}
电流输出
...
...
...
"process_id": [
[
"14774"
]
],
"user_id": [
[
"ec2"
]
]
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 ELK(弹性搜索、kibana、logstash、filebeat)来收集日志。我有一个带有以下几行的日志文件,每一行都有一个 json,我的目标是使用 Logstash Grok 取出 json 中的键/值对并将其转发到弹性搜索。
2018-03-28 13:23:01 charge:{"oldbalance":5000,"managefee":0,"afterbalance":"5001","cardid":"123456789","txamt":1}
2018-03-28 13:23:01 manage:{"cuurentValue":5000,"payment":0,"newbalance":"5001","posid":"123456789","something":"new2","additionalFields":1}
Run Code Online (Sandbox Code Playgroud)
我正在使用Grok Debugger制作正则表达式模式并查看结果。我目前的正则表达式是:
%{TIMESTAMP_ISO8601} %{SPACE} %{WORD:$:data}:{%{QUOTEDSTRING:key1}:%{BASE10NUM:value1}[,}]%{QUOTEDSTRING:key2}:%{BASE10NUM:value2}[,}]%{QUOTEDSTRING:key3}:%{QUOTEDSTRING:value3}[,}]%{QUOTEDSTRING:key4}:%{QUOTEDSTRING:value4}[,}]%{QUOTEDSTRING:key5}:%{BASE10NUM:value5}[,}]
Run Code Online (Sandbox Code Playgroud)
正如人们所见,它是硬编码的,因为真实日志中 json 中的键可以是任何单词,值可以是整数、双精度或字符串,而且键的长度各不相同。所以我的解决方案是不可接受的。我的解决结果如下图,仅供参考。我正在使用Grok 模式。
我的问题是,尝试在 json 中提取键是否明智,因为弹性搜索也使用 json?其次,如果我尝试从 json 中取出键/值,是否有正确、简洁的 Grok 模式?
解析上述行中的第一行时,Grok 模式的当前结果给出以下输出。
{
"TIMESTAMP_ISO8601": [
[
"2018-03-28 13:23:01"
]
],
"YEAR": [
[
"2018"
]
],
"MONTHNUM": [
[
"03"
]
],
"MONTHDAY": [
[
"28"
]
],
"HOUR": [
[
"13",
null
]
],
"MINUTE": [
[
"23",
null
]
],
"SECOND": [
[ …Run Code Online (Sandbox Code Playgroud) 这两个选项的有效 logstash 配置是什么?
else if [pipeline] == "tomcat_all" {
grok {
match => [ "message", "%{MONTH}%{SPACE}%{MONTHDAY},%{SPACE}%{YEAR}%{SPACE}%{HOUR}:?%{MINUTE}(?::?%{SECOND})%{SPACE}(?:AM|PM)%{SPACE}%{NOTSPACE:class}%{SPACE}%{NOTSPACE:type_log}%{SPACE}%{WORD:loglevel}:%{SPACE}%{GREEDYDATA:log_text}" ]
match => [ "message", "%{TIME:timestamp}%{SPACE}\|-%{WORD:loglevel}%{SPACE}in%{SPACE}%{NOTSPACE:class}%{SPACE}%{GREEDYDATA:log_text}" ]
...
else if [pipeline] == "123" {
grok {
match => [ "message", "%{MONTH}%{SPACE}%{MONTHDAY},%{SPACE}%{YEAR}%{SPACE}%{HOUR}:?%{MINUTE}(?::?%{SECOND})%{SPACE}(?:AM|PM)%{SPACE}%{NOTSPACE:class}%{SPACE}%{NOTSPACE:type_log}%{SPACE}%{WORD:loglevel}:%{SPACE}%{GREEDYDATA:log_text}" ]
}
grok {
match => [ "message", "%{TIME:timestamp}%{SPACE}\|-%{WORD:loglevel}%{SPACE}in%{SPACE}%{NOTSPACE:class}%{SPACE}%{GREEDYDATA:log_text}" ]
}
Run Code Online (Sandbox Code Playgroud)
Logstash 似乎在两种配置下都可以正常启动并且没有报告错误,但是对于多个 grok 模式,grok 解析还不能正常工作。