2015-02-26 11 views
9

Mam drupal watchdog plik syslog, który chcę analizować pod zasadniczo dwa pola zagnieżdżonych, syslog część i część wiadomości tak, aby uzyskać ten wynikmieć filtr grok tworzyć pola zagnieżdżone w wyniku

syslogpart: { 
    timestamp: "", 
    host: "", 
    ... 
}, 
messagepart:{ 
    parsedfield1: "", 
    parsedfield2: "", 
    ... 
} 

Próbowałem wykonaniem niestandardowego wzór, który wygląda tak:

DRUPALSYSLOG (%{SYSLOGTIMESTAMP:date} %{SYSLOGHOST:logsource} %{WORD:program}: %{URL:domain}\|%{EPOCH:epoch}\|%{WORD:instigator}\|%{IP:ip}\|%{URL:referrer}\|%{URL:request}\|(?<user_id>\d+)\|\|)

a następnie uruchomić match => ['message', '%{DRUPALSYSLOG:drupal}'}

ale nie dostaję zagnieżdżonej odpowiedzi, otrzymuję blokadę tekstu drupal: "ALL THE MATCHING FIELDS IN ONE STRING", a następnie wszystkie dopasowania oddzielnie, ale nie zagnieżdżone pod drupalem, ale raczej na tym samym poziomie.

Odpowiedz

9

Tak, to jest oczekiwane. Nie sądzę, że istnieje sposób na zagnieżdżanie pól z grokiem. Podejrzewam, że będziesz musiał użyć mutate filter, aby przenieść je na swoje miejsce.

mutate { 
    rename => { 
     "date" => "[drupal][date]" 
     "instigator" => "[drupal][instigator]" 
     ... 
    } 
    } 

Jeśli masz dużo pól, wygodniej jest użyć ruby filter. Jest to szczególnie ważne, jeśli prefiksy pól Drupal z np. "drupal". - wtedy napiszesz filtr, aby przenieść wszystkie pola z tym prefiksem do subpola o tej samej nazwie.

+1

Składnia wspornik jest obsługiwana bezpośrednio w definicji wzorca. Nie ma potrzeby mutacji/zmiany nazwy! Zobacz odpowiedź Juliena poniżej. –

9

Rzeczywiście, można zrobić coś takiego w swojej konfiguracji wzorca

%{WORD:[drupal][program]} 

Będzie utworzyć obiekt json jak

drupal:{ 
    program: "..." 
} 
+0

Znacznie prostsze niż zaakceptowana odpowiedź. –

+0

Tak, to działa, chyba że chcesz utworzyć subpola '@ metadata' (lub, prawdopodobnie, inne pola z nietypowymi znakami w nazwie). –

Powiązane problemy