2014-04-07 16 views
20

Używam Logstash + Elasticsearch + Kibana do przeglądania moich plików dziennika Tomcat.Logstash: jak dodać nazwę pliku jako pole?

Dla każdego wpisu dziennika potrzebuję znać nazwę pliku, z którego pochodzi. Chciałbym dodać go jako pole. Czy jest jakiś sposób na zrobienie tego? Mam trochę googleed i znalazłem tylko this SO question, ale odpowiedź nie jest już aktualna.

Do tej pory jedynym rozwiązaniem widzę jest określenie oddzielną konfigurację dla każdej możliwej nazwy pliku z innym „add_field” tak:

input { 
    file { 
    type => "catalinalog" 
    path => [ "/path/to/my/files/catalina**" ] 
    add_field => { "server" => "prod1" } 
    } 
} 

Ale potem trzeba przekonfigurować logstash za każdym razem pojawia się nowa możliwość Nazwa pliku. Jakieś lepsze pomysły?

Odpowiedz

35

Witam Dodałem filtr grok, aby to zrobić. Chciałem tylko, aby nazwa pliku nie była ścieżką, ale możesz to zmienić w zależności od potrzeb.

filter { 
    grok { 
    match => ["path","%{GREEDYDATA}/%{GREEDYDATA:filename}\.log"] 
    } 
} 
+0

dziękuję za odpowiedź :) Czy to nie sprawdzi nazwy pliku WEWNĄTRZ zawartości pliku logu? – machinery

+2

Zwykle nie pracowałbyś z grokiem w polu wiadomości, ale korzystam z pola ścieżki, które jest specjalnym polem dodawanym automatycznie przez logstash. –

+0

Wielkie dzięki :) Twoje rozwiązanie działa - po dodaniu znaku procentowego przed "{GREEDYDATA: nazwa pliku}". Zaktualizuj swoją odpowiedź, a zaakceptuję ją jako rozwiązanie. Po prostu nie wiedziałem o istnieniu pola "ścieżka". – machinery

1

w przypadku chcesz połączyć wiadomość i nazwę pliku w jednym przypadku:

filter { 
grok { 
    match => { 
     message => "ERROR (?<function>[\S]*)" 
     } 
} 
grok { 
    match => { 
     path => "%{GREEDYDATA}/%{GREEDYDATA:filename}\.log" 
     } 
}} 

wynik w ElasticSearch (koncentrować się na „filename” i pól „funkcja”):

"_index": "logstash-2016.08.03", 
    "_type": "logs", 
    "_id": "AVZRyEI49-A6kyBCq6Yt", 
    "_score": 1, 
    "_source": { 
     "message": "27/07/16 12:16:18,321 ERROR blaaaaaaaaa.internal.com", 
     "@version": "1", 
     "@timestamp": "2016-08-03T19:01:33.083Z", 
     "path": "/home/admin/mylog.log", 
     "host": "my-virtual-machine", 
     "function": "blaaaaaaaaa.internal.com", 
     "filename": "mylog" 
    }