2016-05-09 6 views
0

私は基本的なELKスタックを持っています。複数のマシンがElasticSearch(ES)サーバーにログをプッシュし、Kibanaを使用してそれらを検査します。ElasticSearchはSystem.NullReferenceExceptionを検出しますが、NullReferenceExceptionは検出しません - なぜですか?

私の問題は、System.NullReferenceExceptionがたくさん見えることですが、NullReferenceExceptionのどれも、私を大きく困惑させることはありません。

ここで私が実行しようとしていますクエリです:私は

GET _search 
{ 
    "query": { 
    "match": { 
     "message": "System.NullReferenceException" 
    } 
    } 
} 

GET _search 
{ 
    "query": { 
    "match": { 
     "message": "NullReferenceException" 
    } 
    } 
} 

そして結果は次のとおりです。ただし

{ 
    "took": 47, 
    "timed_out": false, 
    "_shards": { 
    "total": 1681, 
    "successful": 1681, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 0, 
    "max_score": null, 
    "hits": [] 
    } 
} 

、私は次のクエリを使用している場合取得:

{ 
    "took": 31, 
    "timed_out": false, 
    "_shards": { 
    "total": 1681, 
    "successful": 1681, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 12796, 
    "max_score": 1.7968642, 
    "hits": [ 
     { 
     "_index": "logs-good-qa_849-2016.05.05", 
     "_type": "MobileWebService", 
     "_id": "28327d702db62623059027479162a3d73ef909f6", 
     "_score": 1.7968642, 
     "_source": { 
      "@timestamp": "2016-05-05T19:04:20.741Z", 
      "message": "Object reference not set to an instance of an object. \r\nSystem.NullReferenceException: Object reference not set to an instance of 
... 

メッセージの列が解析されているようです。私はマッピング要求した場合:

GET logs-good-qa_849-2016.05.05/_mapping/MobileWebService 

を私は戻ってこれを取得:私は、メッセージフィールドは、単語の区切り文字で分割され、それぞれインデックスが作成されていなければならないと結論

# GET logs-good-qa_849-2016.05.05/_mapping/MobileWebService 
{ 
    "logs-good-qa_849-2016.05.05": { 
    "mappings": { 
     "MobileWebService": { 
     "properties": { 
      "@timestamp": { 
      "type": "date", 
      "format": "strict_date_optional_time||epoch_millis" 
      }, 
      "@version": { 
      "type": "string" 
      }, 
      "host": { 
      "type": "string" 
      }, 
      "level": { 
      "type": "string" 
      }, 
      "logger": { 
      "type": "string" 
      }, 
      "message": { 
      "type": "string" 
      }, 
      "path": { 
      "type": "string" 
      }, 
      "qa_build": { 
      "type": "string" 
      }, 
      "tags": { 
      "type": "string" 
      }, 
      "ts": { 
      "type": "string" 
      } 
     } 
     } 
    } 
    } 
} 

いるから。私が知る限り、.は単語区切り文字なので、何が起こっているのか分かりません。

アイデア?

答えて

1

のはmessageフィールドの内容を分析してみましょう:

curl -XGET 'localhost:9200/accounts_2016_dev/_analyze?pretty' -d 'Object reference not set to an instance of an object. \r\nSystem.NullReferenceException: Object reference not set to an instance of' 

は、我々が得るのトークンの一つは、以下の通りです:

{ 
    "token" : "nsystem.nullreferenceexception", 
    "start_offset" : 57, 
    "end_offset" : 87, 
    "type" : "<ALPHANUM>", 
    "position" : 12 
    } 

あなたは、ドットは次のように使用されていない見ることができるように単語区切り記号は後ろにスペースがないため使用できません。より一般的には、test.dotを分析すると、という単一のトークンが生成され、test. dot(ドットの後ろに1つ以上のスペースがある)を分析すると、2つのトークンtestdotが生成されます。

このため、NullReferenceExceptionとの照合はできません。

+0

これは優れた説明です。ありがとうございました。だから、私は "を追加する必要があると思います。"単語デリミタに戻し、すべてのインデックスを再作成します。そうする最善の方法を提案できますか? – mark

+0

10進数を分割するリスクがあるので、 '.'を追加するだけではわかりません。 '3.4'は' 3'と '4'に分割されます。これはおそらくあなたが望むものではありません。必要なものを達成する最も良い方法は、[ngram token filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenfilter)を活用したカスタムアナライザを作成することです。 html)および/または[edgeNgram token filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenfilter.html)を使用して、各トークンの接頭辞および接尾辞を生成します。 – Val

+0

カスタムアナライザ?恐ろしい音。私は「NullReferenceException」をそのまま検索したいという私の望みがあまりにも多すぎるとは思っていませんが、あまりにも多くを求めているかもしれないと思い始めています。私は何かを逃していますか(ELKのこの事業全体にとって非常に新しいものですから) – mark

関連する問題