2017-02-14 4 views
0

Я с ума схожу с моей конфигурацией logstasg.Заменить @timestamp в logstash

я не могу найти способ, чтобы заменить поле @timestamp с другим:

Вот что logstash получить:

{ 
          "offset" => 6718968, 
        "Varnish_txid" => "639657758", 
         "plateform" => "cdnfronts", 
         "Referer" => "-", 
         "input_type" => "log", 
         "respsize" => "281", 
          "source" => "/var/log/varnish/varnish4xx-5xx.log", 
           "UA" => "Microsoft-WebDAV-MiniRedir/5.1.2600", 
          "type" => "varnish-logs", 
          "tags" => [ 
     [0] "json", 
     [1] "varnish", 
     [2] "beats_input_codec_json_applied", 
     [3] "_dateparsefailure" 
    ], 
      "st_snt2c_or_sntfromb" => "405", 
         "RemoteHost" => "32.26.21.21", 
         "@timestamp" => 2017-02-14T13:38:47.808Z, 
       "Varnish.Handling" => "pass", 
    "tot_bytes_rcvby_c_or_sntby_b" => "-", 
     "time_req_rcv4c_or_snt4b" => "[14/Feb/2017:14:38:44 +0100]", 
         "@version" => "1", 
          "beat" => { 
     "hostname" => "cdn1", 
      "name" => "cdn1", 
     "version" => "5.1.2" 
    }, 
          "host" => "cdn1", 
        "time_1st_byte" => "0.010954", 
        "Varnish_side" => "c", 
        "reqfirstline" => "OPTIONS http://a.toto.com/ HTTP/1.1" 
} 

Вот мой logstash конф:

input { 
    beats { 
     port => 5000 
     codec => "json" 
     ssl => true 
     ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt" 
     ssl_key => "/etc/logstash/ssl/logstash-forwarder.key" 

    } 
} 
filter { 
    if "json" in [tags] { 
    json { 
     source => "message" 
    } 
    if "varnish" in [tags] { 
    date { 
     locale => "en" 
     match => [ "[time_req_rcv4c_or_snt4b]","dd/MMM/yyyy:HH:mm:ss Z" ] 
     remove_field => "[time_req_rcv4c_or_snt4b]" 
     } 
    } 
    } 
} 
output { 
    if "varnish" in [tags] { 
     elasticsearch { 
     hosts => ["elasticsearch:9200"] 
     index => "logstash-varnish-%{+YYYY.MM.dd}" 
    } 
    } else { 
     elasticsearch { 
     hosts => ["elasticsearch:9200"] 
     } 
    } 

    stdout { 
     codec => rubydebug 
    } 
} 

Я пробовал:

match => [ "time_req_rcv4c_or_snt4b","dd/MMM/yyyy:HH:mm:ss Z" ] 
    remove_field => "time_req_rcv4c_or_snt4b" 

и

match => [ "[time_req_rcv4c_or_snt4b]","dd/MMM/yyyy:HH:mm:ss Z" ] 
    remove_field => "[time_req_rcv4c_or_snt4] 

Кто-нибудь может объяснить мне, что я пропустил. На данный момент я не нашел ничего интересного в Google.

ответ

2

Вашего выхода:

"time_req_rcv4c_or_snt4b" => "[14/Feb/2017:14:38:44 +0100]", 

Ваша дата поля имеет [] вокруг него, так что вам нужно, чтобы они соответствовали вашей дате шаблона или раздеть их, когда вы первый матч даты.

+0

Большое спасибо Alcanzar! Я думал, что мое регулярное выражение вернет только шаблон –