Minggu ini saya baru faham cara betul menggunakan @[metadata] dan tags sewaktu debug masalah dengan logstash.

Kita boleh guna metadata untuk buat field sementara. Dengan ini field tersebut tidak akan dimasukkan ke output akhir - elasticsearch, fail dll.

Contohnya, saya guna filter http untuk membuat carian di Virustotal.com :

 target_headers => "[@metadata][vt-response-header]" 

Dalam [@metadata] dan ada field yang berkaitan dengan response headers.


"@metadata" => {                                                                                                                                                          
                      "host" => "xubuntu-analyst",                                                                                                                                    
						  "vt-response-header" => {                                                                                                                                                     
                   "content-length" => "26069",                                                                                                                                       
                     "content-type" => "application/json; charset=utf-8",                                                                                                             
            "x-cloud-trace-context" => "8a2f5af869d4ba6507e881c857cce5ab",                                                                                                            
                    "cache-control" => "no-cache",                                                                                                                                    
                             "date" => "Wed, 24 Mar 2021 03:59:11 GMT",                                                                                                               
                           "server" => "Google Frontend"                                                                                                                              
        
						  },                 
}

Saya boleh mengakses data tersebut dengan @[metadata][vt-response-header] dan menggunakannya untuk penyataan if/else. Contohnya:

if ("Google" in [@metadata][vt-response-header][server]){
 ...

}

Yang penting sekali kandungan field [@metadata] tidak akan masuk ke dalam output akhir. Jadi tak perlu guna filter mutate untuk padamkan field yang berkenaan.

Tags juga menarik kerana ada kebiasaannya mesej kesilapan seperti grokparsefailure boleh digunakan seperti berikut:

output { 
 
 if "_grokparsefailure" not in [tags]{
      elasticsearch {...}
  }

} 

Kita juga boleh masukkan nilai sendiri dengan arahan " add_tags => "

Rujukan:

1. https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html