Журналы IIS и журналы событий

Прежде всего спасибо за любой совет и ваше время.

Недавно я настроил стек Elk для компании, в которой только начал работать. (Это мой первый опыт использования Logstash и Nxlog.) Что я хотел бы сделать, так это отправить журналы IIS и журналы событий с одного и того же веб-сервера на logstash с помощью nxlog.

Я просто не понимаю, как отправить два типа журналов из одного источника и заставить logstash.conf правильно фильтровать эти данные.

Это мой nxlog.conf

## This is a sample configuration file. See the nxlog reference manual about the
## configuration options. It should be installed locally and is also available
## online at http://nxlog.org/nxlog-docs/en/nxlog-reference-manual.html

## Please set the ROOT to the folder your nxlog was installed into,
## otherwise it will not start.

#define ROOT C:\Program Files\nxlog
define ROOT C:\Program Files (x86)\nxlog

Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
LogFile %ROOT%\data\nxlog.log

<Extension json>
    Module xm_json
</Extension>
<Input iis_1>  
      Module    im_file
      File    "F:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log"
    ReadFromLast True
    SavePos True
    Exec    if $raw_event =~ /^#/ drop();
</Input>  
<Input iis_2>  
      Module    im_file
      File    "F:\inetpub\logs\LogFiles\W3SVC2\u_ex*.log"
    ReadFromLast True
    SavePos True
    Exec    if $raw_event =~ /^#/ drop();
</Input>
<Input iis_4>  
      Module    im_file
      File    "F:\inetpub\logs\LogFiles\W3SVC4\u_ex*.log"
    ReadFromLast True
    SavePos True
    Exec    if $raw_event =~ /^#/ drop();
</Input>  
<Input eventlog>
        Module im_msvistalog
        Exec $EventReceivedTime = integer($EventReceivedTime) / 1000000; to_json();
</Input>
<Output out_iis>  
    Module  om_tcp
    Host    10.191.132.86
    Port    5555
    OutputType  LineBased
</Output>  
<Route 1>  
    Path    iis_1, iis_2, iis_4, eventlog=> out_iis
</Route> 

Мой текущий logstash.conf

input {  
      tcp {
              type => "iis"
              port => 5555
              host => "10.191.132.86"
      }
}
filter {  
    if [type] == "iis" {
        grok {
            match => ["@message", "%{TIMESTAMP_ISO8601:timestamp} %{IPORHOST:hostip} %{WORD:method} %{URIPATH:page} %{NOTSPACE:query} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clientip} %{NOTSPACE:useragent} %{NOTSPACE:referrer} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:scstatus} %{NUMBER:timetaken}"]
        }
    }
}
output {  
    elasticsearch {
    protocol => "http"
        host => "10.191.132.86"
        port => "9200"
    }
}

Похоже, вы можете фильтровать разные данные, устанавливая тип и выполняя, если тип еще этот тип. Но если они исходят из одного и того же источника, как указать разные типы?

:) Спасибо!


person Paul Shwag    schedule 17.04.2015    source источник


Ответы (2)


Способ сделать это — отфильтровать по известной записи в каждом журнале, которая не существует в другом, например [cs_bytes и т. д.]:

e.g.

if [iisfield] {
   mark type as IIS
else 
   mark type as EventLog
}

Я написал агент IIS и журнала событий, который записывает журналы для Logit.io, возможно, они уже делают все, что вам нужно.

person Lee Smith    schedule 17.04.2015
comment
Круто, я попробую это. Спасибо. Вы знаете, могу ли я иметь несколько выходов, как это? Я возился с этим сегодня днем, когда у меня есть время. (Еще не удалось, ха-ха.) ‹Вывод out_iis› Module om_tcp Host 10.191.132.86 Port 5555 OutputType LineBased ‹/Output› ‹Output out_events› Module om_tcp host 10.191.132.86 Port 5556 ‹Route 1› Path iis_1, iis_4= iis_2, iis_2, iis_2, iis_2, iis_2, iis_2 out_iis ‹/Route› ‹Route 2› Path eventlog=› out_iis2 ‹/Route 2› - person Paul Shwag; 17.04.2015
comment
Да, вы можете иметь несколько выходов в своей конфигурации, он будет копировать каждый журнал на каждый выход, вы также можете сделать то же самое с входами, однако все фильтры работают с каждым журналом, через который вы проходите. - person Lee Smith; 18.04.2015
comment
Также имейте в виду, что logstash подберет любой файл в каталоге конфигурации, поэтому, если у вас есть копия, он запустит их дважды и т. д., вы можете разделить свои конфигурации по файлам, например. 00_inputs.conf, 01_filters.conf, 02_outputs.conf, номер важен, так как он читает их по порядку - person Lee Smith; 18.04.2015
comment
Если вы добавите тип в вывод 'output { if [type] == iis { elasticsearch { protocol => http host => 10.191.132.86 port => 9200 } } }', это гарантирует, что вы получите только тот тип журналов, который вы хотите отправить на правильный выход - person Lee Smith; 18.04.2015
comment
Круто, сегодня попробую! - person Paul Shwag; 20.04.2015

NXLog задает для поля SourceModuleName значение iis_1, iis_2 и т. д. Вместо этого вы можете использовать это.

person b0ti    schedule 18.04.2015
comment
Спасибо за этот совет, я искал пример синтаксиса, использующего это, и ничего не нашел. (По крайней мере, это было ясно.) У вас случайно нет небольшого примера? - person Paul Shwag; 20.04.2015