Почему LogStash не создает отдельные столбцы для журналов IIS вasticSearch? - PullRequest
0 голосов
/ 14 сентября 2018

Наш сервер IIS генерирует журналы в следующем формате: -

Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken

2018-09-13 08:47:52 ::1 GET / - 80 U:papl ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/68.0.3440.106+Safari/537.36 - 200 0 0 453
2018-09-13 08:47:52 ::1 GET /api/captcha.aspx rnd=R43YM 80 U:papl ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/68.0.3440.106+Safari/537.36 http://localhost/ 200 0 0 36

Теперь я хочу настроить logstash таким образом, чтобы он мог создавать отдельные столбцы для IP, RequestMethodType, т.е. GET или POST, PageName, которыйздесь /api/captcha.aspx.

Но он создает один столбец с именем «message» вasticSearch и сохраняет все значение в этом поле сообщения.

Итак, какие изменения я должен внести вlogstash для создания отдельных столбцов в ElasticSearch для IP, RequestMethod (POST / GET) и PageName?

В настоящее время я использую следующий фильтр: -

match => {"message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} %{URIPATH:uriStem} %{NOTSPACE:uriQuery} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clientIP} %{NOTSPACE:protocolVersion} %{NOTSPACE:userAgent} %{NOTSPACE:cookie} %{NOTSPACE:referer} %{NOTSPACE:requestHost} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:win32response} %{NUMBER:bytesSent} %{NUMBER:bytesReceived} %{NUMBER:timetaken}" 

В этом он создал толькоПоле сообщений и сохраняет все значения в этом единственном поле.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 14 сентября 2018

Примечание: для проверки вашего паттерна вы можете использовать этот сайт , что позволяет сэкономить много времени при работе с паттернами.

Шаблон, который вы используете, слишком длинный, если вам нужны только IP, request и pageName, вам следует просто попытаться извлечь то, что вам нужно.В дополнение к этому более короткий шаблон будет выполняться быстрее и более гибким для изменения.

Этот фильтр правильно извлекает то, что вы просили:

match => {"message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:PageName}"}

С этим шаблоном и предоставленными вами журналами, вы получите этот результат (с сайтом, на который я ссылался выше):

enter image description here

Я протестировал фильтр с logstash:

filter {
    grok { match => {"message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:PageName}"} }
}
output {
    stdout { codec => json }
}

С этим входом:

2018-09-16 04:11:52 Веб-сервер W3SVC10 107.6.166.194 GET / axestrack / homepagedata / uname = satish34 & pwd = 3445 & panelid = 1 80 - 223.188.235.131 HTTP / 1.1 Dalvik / 1.6.0 + (Linux; + U; + Android + 4.4.4; + 2014818 + MIUI / V7.5.2.0.KHJMIDE) - - vehicletrack.biz 200 0 0 730 229 413

Я получаю такой результат:

{
   "client":"107.6.166.194",
   "method":"GET",
   "@version":"1",
   "host":"frsred-0077",
   "message":"2018-09-16 04:11:52 W3SVC10 webserver 107.6.166.194 GET /axestrack/homepagedata/ uname=satish34&pwd=3445&panelid=1 80 - 223.188.235.131 HTTP/1.1 Dalvik/1.6.0+(Linux;+U;+Android+4.4.4;+2014818+MIUI/V7.5.2.0.KHJMIDE) - - vehicletrack.biz 200 0 0 730 229 413\r",
   "@timestamp":"2018-09-18T08:13:23.539Z",
   "PageName":"/axestrack/homepagedata/"
}
...