使用Grok Debuger,我想解析一些自定义数据:
1 1“设备1” 1“输入1” 0“开”“关”“ 2020-01-01T00:00:00.1124303 + 00:00”
到目前为止,我有:
%{INT:id}%{INT:device}%{QUOTEDSTRING:device_name}%{INT:input}%{QUOTEDSTRING:input_name}%{INT:state}%{QUOTEDSTRING:on_phrase}%{QUOTEDSTRING:off_phrase} \“ %{TIMESTAMP_ISO8601:何时} \“
但是,我得到的东西像是字符串的双引号%{QUOTEDSTRING)
,以及带有时间和日期的两个小时和分钟%{TIMESTAMP_ISO8601:when}
{
"id": [
[
"1"
]
],
"device": [
[
"1"
]
],
"device_name": [
[
""Device 1""
]
],
"input": [
[
"1"
]
],
"input_name": [
[
""Input 1""
]
],
"state": [
[
"0"
]
],
"on_phrase": [
[
""On""
]
],
"off_phrase": [
[
""Off""
]
],
"when": [
[
"2020-01-01T00:00:00.1124303+00:00"
]
],
"YEAR": [
[
"2020"
]
],
"MONTHNUM": [
[
"01"
]
],
"MONTHDAY": [
[
"01"
]
],
"HOUR": [
[
"00",
"00"
]
],
"MINUTE": [
[
"00",
"00"
]
],
"SECOND": [
[
"00.1124303"
]
],
"ISO8601_TIMEZONE": [
[
"+00:00"
]
]
}
另外,在谈到时,我有些困惑,logstash.conf
因为我不确定要放在里面index
的内容output
。以下代码来自github的先前示例:
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
manage_template => false
index => "sample-%{+YYYY.MM.dd}"
}
}
我猜我的看起来像这样:
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{INT:id} %{INT:device} %{QUOTEDSTRING:device_name} %{INT:input} %{QUOTEDSTRING:input_name} %{INT:state} %{QUOTEDSTRING:on_phrase} %{QUOTEDSTRING:off_phrase} \"%{TIMESTAMP_ISO8601:when}\"" }
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
manage_template => false
index => "sample-%{????????}"
}
}
再次,我不清楚我应该怎么做 "sample-%{????????}"
关于双引号:只需使用DATA而不是QUOTEDSTRING即可:
"%{DATA:device_name}"
小时和分钟中重复的条目来自时区:第一个条目是实际的小时,第二个条目是时区的小时。分钟也一样。
要摆脱它,您将需要一个自定义模式:
"(?<when>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?(?<ISO8601_TIMEZONE>Z|[+-](?:2[0123]|[01]?[0-9])(?::?(?:[0-5][0-9])))?)"
(如果您根本对解析时间戳不感兴趣,只需再次使用DATA)。
因此,您的模式可能如下所示:
%{INT:id} %{INT:device} "%{DATA:device_name}" %{INT:input} "%{DATA:input_name}" %{INT:state} "%{DATA:on_phrase}" "%{DATA:off_phrase}" "(?<when>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?(?<ISO8601_TIMEZONE>Z|[+-](?:2[0123]|[01]?[0-9])(?::?(?:[0-5][0-9])))?)"
关于指数:
logstash-%{+YYYY.MM.dd}
sample-%{+YYYY.MM.dd}
如果您想每天有单独的索引,可以使用sample-
一个索引
谢谢,万分感谢!这篇文章之外的一个问题是我给语义命名,
%{INT:input}
因为它看起来像是保留名称,并且未在Kibana中显示。我把它命名为%{INT:input_num}
,一切都OK。但是,"cba24e50-4422-11ea-87a6-196047a921ba" is not a configured index pattern ID Showing the default index pattern: "sample-*" (7ce7e210-442d-11ea-b280-431f48906f3f)
当我转到“发现”选项卡时,我收到一个弹出通知。你知道这意味着什么吗?这很可能是一些旧的不存在的索引模式缓存在kibana中的某个地方。您如何访问它?也许有书签?索引模式可能出现在URL中。
好的,我一直在使用Mac
docker-compose up
,docker-compose down
然后localhost:5601
在Firefox中重新键入。您是说sample-*
可能在URL中?不,我是说旧的'cba24e50-4422-11ea-87a6-196047a921ba'缓存在某个地方,可能在浏览器中
好的,是的,那我就不用担心。再次感谢您的回答,加载了有关ELK的更多问题,但是又一天又一次:-)我现在将标记您的回答。