2016-04-19 2 views
0

сообщение выглядит как_grokparsefailure на лаке войти

1.2.3.4 "-" - - [19/Apr/2016:11:42:18 +0200] "GET http://monsite.vpù/api/opa/status HTTP/1.1" 200 92 "-" "curl - API-Player - PREPROD" hit OPA-PREPROD-API - 0.000144958 

Мой рисунок Grok является

grok { 
     match => { "message" => "%{IP:clientip} \"%{DATA:x_forwarded_for}\" %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} (%{NOTSPACE:hitmiss}|-) (%{NOTSPACE:varnish_conf}|-) (%{NOTSPACE:varnish_backend}|-) %{NUMBER:time_firstbyte}"} 
    } 

У меня есть grokparsefailure тег, тогда как все мои поля выполнены правильно за исключением последнего, я получаю 0 вместо из 0.000144958

полное сообщение в ЭС

{ 
    "_index": "logstash-2016.04.19", 
    "_type": "syslog", 
    "_id": "AVQt7WSCN-2LsQj9ZIIq", 
    "_score": null, 
    "_source": { 
    "message": "212.95.71.201 \"-\" - - [19/Apr/2016:11:50:12 +0200] \"GET http://monsite.com/api/opa/status HTTP/1.1\" 200 92 \"-\" \"curl - API-Player - PREPROD\" hit OPA-PREPROD-API - 0.000132084", 
    "@version": "1", 
    "@timestamp": "2016-04-19T09:50:12.000Z", 
    "type": "syslog", 
    "host": "212.95.70.80", 
    "tags": [ 
     "_grokparsefailure" 
    ], 
    "application": "varnish-preprod", 
    "clientip": "1.2.3.4", 
    "x_forwarded_for": "-", 
    "ident": "-", 
    "auth": "-", 
    "timestamp": "19/Apr/2016:11:50:12 +0200", 
    "verb": "GET", 
    "request": "http://monsite.com/api/opa/status", 
    "httpversion": "1.1", 
    "response": "200", 
    "bytes": "92", 
    "referrer": "\"-\"", 
    "agent": "\"curl - API-Player - PREPROD\"", 
    "hitmiss": "hit", 
    "varnish_conf": "OPA-PREPROD-API", 
    "varnish_backend": "-", 
    "time_firstbyte": "0.000132084", 
    "geoip": { 
     "ip": "1.2.3.4", 
     "country_code2": "FR", 
     "country_code3": "FRA", 
     "country_name": "France", 
     "continent_code": "EU", 
     "region_name": "C1", 
     "city_name": "Strasbourg", 
     "latitude": 48.60040000000001, 
     "longitude": 7.787399999999991, 
     "timezone": "Europe/Paris", 
     "real_region_name": "Alsace", 
     "location": [ 
     7.787399999999991, 
     48.60040000000001 
     ] 
    }, 
    "agentname": "Other", 
    "agentos": "Other", 
    "agentdevice": "Other" 
    }, 
    "fields": { 
    "@timestamp": [ 
     1461059412000 
    ] 
    }, 
    "highlight": { 
    "agent": [ 
     "\"curl - API-Player - @[email protected]@/[email protected]\"" 
    ], 
    "varnish_conf": [ 
     "[email protected]@[email protected]/[email protected]" 
    ], 
    "application": [ 
     "@[email protected]@/[email protected]@[email protected]@/[email protected]" 
    ], 
    "message": [ 
     "1.2.3.4 \"-\" - - [19/Apr/2016:11:50:12 +0200] \"GET http://monsote.com/api/opa/status HTTP/1.1\" 200 92 \"-\" \"curl - API-Player - @[email protected]@/[email protected]\" hit [email protected]@[email protected]/[email protected] - 0.000132084" 
    ] 
    }, 
    "sort": [ 
    1461059412000 
    ] 
} 

Ответ: kibana не отображает очень мало цифр

ответ

0

Проблема возникла из фильтра syslog, используя grok внутри, как описано здесь https://kartar.net/2014/09/when-logstash-and-syslog-go-wrong/. Решение было тогда удалить тег в моем собственном фильтре.

Другая проблема заключается в том, что kibana не отображает число, подобное 0,0000xxx, но они все равно правильно сохранены, поэтому я могу использовать его в любом случае.

1

Вы получите только grokparsefailure, если grok, гм, не удастся. Итак, это не тот грок, который производит тег. Используйте параметр tag_on_failure в вашем groks, чтобы предоставить уникальный тег для каждого grok.

Что касается вашей синтаксической проблемы, я готов поспорить, что ваш grok работает нормально. Обратите внимание, что elasticsearch может создавать поля динамически и будет догадываться о типе поля на основе первых увиденных данных. Если ваши первые данные были «0», это сделало бы поле целым, а последующие записи были бы перенесены в этот тип. Вы можете вытащить карту, чтобы посмотреть, что произошло.

Вам необходимо управлять созданным сопоставлением. Вы можете указать, что поле является float в самом grok (% {NUMBER: myField: int}) или путем создания собственного шаблона.

Также обратите внимание, что NOTSPACE соответствует «-», поэтому ваши шаблоны для varnish_backend и т. Д. Не совсем корректны.

+0

Спасибо Ален, я удалил весь свой индекс, чтобы создать новый созданный индекс. Теперь правильное отображение (это строка) для time_firstbyte, но все равно '0' и grokparsefailure. Я также применил вашу идею (: int) – glmrenard

+0

Веб-сайт http://grokconstructor.appspot.com/do/match#result подтверждает мой шаблон grok как OK (см. Изображение) – glmrenard

+0

Я пробовал вашу идею 'grok { match => { "message" => "% {IP: clientip} \"% {DATA: x_forwarded_for} \ "% {USER: ident}% {USER: auth} \ [% {HTTPDATE: timestamp} \] \" (?:% {WORD: глагол}% {NOTSPACE: request} (?: HTTP /% {NUMBER: httpversion})? |% {DATA: rawrequest}) \ "% {NUMBER: response} (?:% {NUMBER: bytes} | -)% {QS: referrer}% {QS: agent} (% {NOTSPACE: hitmiss} | -)% {USERNAME: varnish_conf}% {USERNAME: varnish_backend}% {NUMBER: time_firstbyte: int} "} tag_on_failure => ["_grokparsefailure_varnish"] ', но мое сообщение grok по-прежнему _grokparsefailure ' – glmrenard

Смежные вопросы