Ich habe einen einfachen ELK-Stack, wo mehrere Maschinen Logs an einen ElasticSearch (ES) -Server schicken und ich sie mit Kibana überprüfe.ElasticSearch findet System.NullReferenceException, aber nicht NullReferenceException - warum?
Mein Problem ist, dass ich viele System.NullReferenceException
Übereinstimmungen sehen kann, aber keine von NullReferenceException
, die mich sehr verwirrt.
Hier wird die Abfrage Ich versuche zu laufen:
GET _search
{
"query": {
"match": {
"message": "NullReferenceException"
}
}
}
Und das Ergebnis ist:
{
"took": 47,
"timed_out": false,
"_shards": {
"total": 1681,
"successful": 1681,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
Allerdings, wenn ich verwenden Sie die folgende Abfrage:
GET _search
{
"query": {
"match": {
"message": "System.NullReferenceException"
}
}
}
I erhalten:
{
"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
...
Die Nachrichtenspalte scheint analysiert zu werden. Wenn ich die Zuordnung anfordern:
GET logs-good-qa_849-2016.05.05/_mapping/MobileWebService
bekomme ich wieder dieses:
# 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"
}
}
}
}
}
}
woraus ich schließe, dass das Nachrichtenfeld durch die Worttrennzeichen und indiziert bzw. gebrochen werden sollte. Soweit ich weiß .
ist ein Wortbegrenzer, also verstehe ich nicht was los ist.
Irgendwelche Ideen?
Das ist eine ausgezeichnete Erklärung. Vielen Dank. Also, ich denke, ich muss hinzufügen "." zu den Trennzeichen und alles neu indizieren. Können Sie den besten Weg vorschlagen? – mark
Ich bin nicht sicher, nur '.' Hinzuzufügen ist eine gute Idee, da Sie das Risiko der Teilung von Dezimalzahlen, z. '3.4' würde in' 3' und '4' aufgeteilt und das ist wahrscheinlich nicht das was du willst. Der beste Weg, um das zu erreichen, was Sie wollen, wäre ein benutzerdefinierter Analysator, der [den ngram-Token-Filter] (https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenfilter) nutzt. html) und/oder [der edgeNgram-Token-Filter] (https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenfilter.html), um Präfixe und Suffixe für jedes Token zu erzeugen . – Val
Kundenspezifischer Analysator? Hört sich gruselig an. Ich fange an zu denken, dass ich vielleicht zu viel verlangte, obwohl ich nicht glaube, dass mein Wunsch, nach "NullReferenceException" zu suchen, zu groß ist. Fehle ich etwas (ich könnte, da ich sehr neu in diesem ganzen Geschäft von ELK bin)? – mark