0

Я пытаюсь настроить фильтр логстаста для определения фильтра фильтра apache. Это в основном «в сочетании» LogFormat с некоторым дополнительным полем, здесь является определение формата журнала апач:определение фильтра logstash для расширенного журнала apache

LogFormat "%h %{X-LB-Client-IP}i %l %u %m %t \"%{Host}i\" \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %D" combinextended 

Вот содержимое журнала Пример файла:

12.123.456.789 122.123.122.133 - - GET [06/May/2015:18:42:41 +0200] "www.example.com" "GET /fr-fr/test/content/ HTTP/1.1" 200 14023 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121718 Gentoo Firefox/3.0.5" 7729 

я настроил logstash-вперед, чтобы отправить файлы:

{ 
    "paths": [ 
    "/var/log/mysite/extended.log", 
    "/var/log/myothersite/extended.log" 
    ], 
    "fields": { "type": "apache-extended" } 
} 

Я настроил сервер logstash с рисунком ГРОК в файле в /etc/logstash/conf.d, названный 13-apache-extended.conf:

filter { 
if [type] == "apache-extended" { 
    grok { 
    match => { "message" => "%{IPORHOST:proxyip} %{IPORHOST:clientip} %{USER:ident} %{USER:auth} %{WORD:method} \[%{HTTPDATE:timestamp}\] \"%{IPORHOST:host}\" \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) \"%{GREEDYDATA:referer}\" \"%{GREEDYDATA:agent}\" %{NUMBER:responsetime}" } 
    } 
    } 
} 

Я тестировал его в https://grokdebug.herokuapp.com/ и, казалось, хорошо:

образец журнала:

12.123.456.789 122.123.122.133 - - GET [06/May/2015:18:42:41 +0200] "www.example.com" "GET /fr-fr/test/content/ HTTP/1.1" 200 14023 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121718 Gentoo Firefox/3.0.5" 7729 

Выкройка:

%{IPORHOST:proxyip} %{IPORHOST:clientip} %{USER:ident} %{USER:auth} %{WORD:method} \[%{HTTPDATE:timestamp}\] \"%{IPORHOST:host}\" \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) \"%{GREEDYDATA:referer}\" \"%{GREEDYDATA:agent}\" %{NUMBER:responsetime} 

Но когда я перезапустить logstash на основном сервере, Я получил ошибку:

{:timestamp=>"2015-05-06T18:36:28.846000+0200", :message=>"Exception in lumberjack input", :exception=>#<LogStash::ShutdownSignal: LogStash::ShutdownSignal>, :level=>:error} 
{:timestamp=>"2015-05-06T18:36:44.342000+0200", :message=>"Error: Expected one of #, {, } at line 35, column 142 (byte 969) after filter {\n if [type] == \"apache-extended\" {\n grok {\n  match => { \"message\" => \"%{IPORHOST:proxyip} %{IPORHOST:clientip} %{USER:ident} %{USER:auth} %{WORD:method} \\[%{HTTPDATE:timestamp}\\] \""} 
{:timestamp=>"2015-05-06T18:36:44.349000+0200", :message=>"You may be interested in the '--configtest' flag which you can\nuse to validate logstash's configuration before you choose\nto restart a running system."} 

Любая идея очень ценится.

Спасибо.

ответ

1

Я протестировал вашу проблему, и у меня есть 2 возможных решения.

  1. Вы уверены, что ваш дровосек настроен правильно? Вы проверили его с помощью основного файла журнала?
  2. Уверены ли вы, что у вас одинаковый шаблон в вашем конфиге, когда вы отправляете сообщение? Потому что я заметил шаблон, который вы публикуете, и вывод ошибки не совпадают.

    %{IPORHOST:proxyip} %{IPORHOST:clientip} %{USER:ident} %{USER:auth} %{WORD:method} \[%{HTTPDATE:timestamp}\] \"%{IPORHOST:host}\" \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) \"%{GREEDYDATA:referer}\" \"%{GREEDYDATA:agent}\" %{NUMBER:responsetime}

! =

%{IPORHOST:proxyip} %{IPORHOST:clientip} %{USER:ident} %{USER:auth} %{WORD:method} \[%{HTTPDATE:timestamp}\] \"} 

Вам не разрешается ставить входит в ваш шаблон для семантики и вам нужно \ каждый специальный символ.

Эта ошибка («Ошибка: ожидаемая одна из #, {,} в строке 35, столбец 142 (байт 969)) обычно означает, что у вас есть синтаксическая ошибка в этом месте, например, когда вы забыли избежать специального

Я проверил вашу конфигурацию без лесоруба, и все работает правильно.

Вход Пример: 12.123.456.789 122.123.122.133 - - GET [06/May/2015:18:42:41 +0200] "www.example.com" "GET /fr-fr/test/content/ HTTP/1.1" 200 14023 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121718 Gentoo Firefox/3.0.5" 7729

Config:

input { 
    file { 
     path => "d:/Git/LogstashELKElision/logstash/bin/log/test.log" 
     type => extendedapache 
     }} 
    filter { 
    if [type] == "extendedapache" { 
    grok { 
     match => [ "message", "%{IPORHOST:proxyip} %{IPORHOST:clientip} %{USER:ident} %{USER:auth} %{WORD:method} \[%{HTTPDATE:timestamp}\] \"%{IPORHOST:host}\" \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) \"%{GREEDYDATA:referer}\" \"%{GREEDYDATA:agent}\" %{NUMBER:responsetime}" ] 
    } 
     } 
    } 
    output { 
     elasticsearch { hosts => ["localhost:9200"] } 
     stdout { codec => rubydebug } 
    }input { 
    file { 
     path => "d:/Git/LogstashELKElision/logstash/bin/log/test.log" 
     type => extendedapache 
     }} 
    filter { 
    if [type] == "extendedapache" { 
    grok { 
     match => [ "message", "%{IPORHOST:proxyip} %{IPORHOST:clientip} %{USER:ident} %{USER:auth} %{WORD:method} \[%{HTTPDATE:timestamp}\] \"%{IPORHOST:host}\" \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) \"%{GREEDYDATA:referer}\" \"%{GREEDYDATA:agent}\" %{NUMBER:responsetime}" ] 
    } 
     } 
    } 
    output { 
     elasticsearch { hosts => ["localhost:9200"] } 
     stdout { codec => rubydebug } 
    } 
0

Вы хотите прочитать apache logs.I думаю, что вы можете попробовать под кодом.

input { 
    file { 
    path => "/var/log/apache2/*.log" 
    type => "apache" 
    start_position => "beginning" 
    sincedb_path => "/dev/null" 
    } 
} 

filter { 
    if [path] =~ "access" { 
    mutate { replace => { "type" => "apache_access" } } 
    grok { 
     match => { "message" => "%{COMBINEDAPACHELOG}" } 
    } 
    } 
    date { 
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z"] 
    } 
} 

output { 
    elasticsearch { hosts => localhost } 
    stdout { codec => rubydebug } 
} 
+0

что именно вы хотите увидеть ?? –

+0

Просто правильно сконфигурированный файл конфигурации. Кроме того, (хотя этот вопрос составляет более 6 месяцев), он специально сказал, что шаблон «COMBINEDAPACHELOG» не улавливает входные данные, которые генерируют журналы –