2017-02-14 28 views
0

我有以下JSON日志,我输入logstash并输出到ElasticSearch。当“@timestamp”在日志中时,该记录不会出现在Kibana中。但是,当我将日志中的JSON字段重命名为“timestamp”(删除@)时,它将起作用。我该如何解决这个问题,以便它正确地使用@timestamp字段拾取条目?谢谢。Kibana没有使用@timestamp字段获取记录

JSON登录:

{ 
    "@timestamp": "2017-02-14T15:55:05.070Z", 
    "@version": "1", 
    "action": "create", 
    "controller": "MyController", 
    "db": 10.51, 
    "duration": 40.77, 
    "format": "json", 
    "message": "[200] POST /api/mycontroller (MYCONTROLLER#create)", 
    "method": "POST", 
    "path": "/api/mycontroller", 
    "remote_ip": "55.11.99.000", 
    "status": 200, 
    "user_id": 8888, 
    "view": 12.91 
} 

logstash.conf

input { 
    tcp { 
     port => 5000 
    } 
} 
filter { 
    json { 
    source => "message" 
    } 
} 
output { 
    elasticsearch { 
     hosts => "elasticsearch:9200" 
    } 
    stdout {codec => rubydebug} 
} 

回答

0

这通常是如何做的是把时间戳从源到现场,是不是@timestamp,然后add a date { } filter转该字段的值为@timestamp

filter { 
    date { 
    match => [ "timestamp", ISO8601 ] 
    } 
    mutate { 
    remove_field => [ "timestamp" ] 
    } 
} 

在后期处理中这似乎很奇怪,但Logstash喜欢这种方式。 mutate {}摆脱了额外的时间戳字段,所以它不会显示在您的ES文档中。

0

这是因为Kibana,确实创建了一个@timestamp字段默认情况下为索引事件。因此,由于您的域名具有相同名称,因此Kibana正试图用浏览器的时间覆盖它。

所以,你能做些什么是@ sysadmin1138建议,发生变异@timestamp场通过替换值到一个新的领域和删除现有@timestamp,这样你就不会得到覆盖。

如果您希望仍然可以使用@timestamp字段,只要您将其替换为新字段即可。在这种情况下,您可能会有两个时间戳,一个是默认的Kibana@timestamp加上您创建的新时间戳字段,以便您可以根据所需的时间戳根据需要自由索引事件。