2017-02-14 20 views
0

У меня есть следующий журнал JSON, который я загружаю в logstash и выводя в ElasticSearch. Когда «@timestamp» находится в журнале, запись не отображается в Kibana. Однако, когда я переименую поле JSON в журнал на «timestamp» (удалить @), он работает. Как я могу исправить это, чтобы он правильно собирал записи с полем @timestamp? Благодарю.Kibana не собирает записи с полем @timestamp

JSON Log:

{ 
    "@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 {} избавляется от дополнительного поля timestamp, поэтому оно не будет отображаться в ваших ES-документах.

0

Это потому, что Kibana, создает @timestamp поле для себя по умолчанию для индексации событий. Так как у вас есть одноименное поле, Kibana пытается переопределить его со временем браузера.

Так что вы можете сделать, это, как @ sysadmin1138 предложил, мутировать@timestamp поле, заменив значение в новое поле и удалить существующий @timestamp так, что вы не получите переопределены ,

Если вы хотите, у вас все еще может быть поле @timestamp, если вы его заменили новым полем. В этом случае у вас могут быть две метки времени: одна по умолчанию Kibana@timestamp плюс новое поле временной метки, которое вы создали, чтобы иметь возможность индексировать события по вашему желанию на основе требуемой метки времени.