Здравствуйте, я пытаюсь выполнить некоторые манипуляции с данными в скриптовом поле в Кибане.У меня возникла проблема, когда я могу вернуть все другие значения ключей в журнале, кроме ключей message и error.message.Они возвращают 0 результатов даже с данными в полях.
Использование Kibana Версия: 6.4.2
Вот пример документа:
{
"_index": "filelogbeat-production-6.4.2-2019.02.09",
"_type": "doc",
"_id": "Dje50mgB3uHiSvgnLMBn",
"_score": 1,
"_source": {
"offset": 309376,
"prospector": {
"type": "log"
},
"source": """C:\inetpub\logs\ct-data-service\error.log""",
"message": "================================================================================",
"fileset": {
"module": "iis",
"name": "access"
},
"error": {
"message": "Provided Grok expressions do not match field value: [================================================================================]"
},
"input": {
"type": "log"
},
"@timestamp": "2019-02-09T14:46:07.646Z",
"beat": {
"hostname": "Removed",
"name": "Removed",
"version": "6.4.2"
},
"host": {
"name": "Removed"
}
}
},
Я могу сослаться на
doc['host.name'].value; //these return values
doc['offset'].value;
doc['source'].value;
Вот сценарийвозвращение поля для исходного ключа.
[
{
"_id": "RVW50mgBvqEbiJJnH8Vp",
"ipAddress": [
"C:\\inetpub\\logs\\LogFiles\\W3SVC5\\u_extend192.log"
]
},
Я пробовал создавать сценарии, если поле существует с:
if (doc.containsKey('message')) {
return doc['message'].value;
}
или
if (doc.containsKey('error')) {
return doc['error'].value;
}
или
if (doc.containsKey('error.message')) {
return doc['error.message'].value;
}
возвращает
First 10 results
[]
Это по-прежнему не дает результатов.В журналах iis поле сообщения не всегда присутствует, поэтому я выполнил запрос es в инструментах разработчика:
GET /filelogbeat-production-6.4.2-2019.02.09/_search
{
"query": {
"exists": {
"field": "message"
}
}
}
Вот как я получил образец документа.Я предполагаю, что использование .contains - это способ запуска скриптового поля только при наличии поля сообщения.
Даже при наличии данных, к которым у меня нет доступа к значению сообщения с помощью скриптовых полей, оно всегда возвращает нольтак же и поле error.message.
Я не уверен, почему это не возвращает никаких значений.
Также, вы можете попробовать перехватить блоки безболезненным языком?Кажется, я не могу заставить работать ловушки для попыток.
Также в редакторе результатов предварительного просмотра я могу добавить дополнительные поля для сообщений об ошибках error.message и @timestamp из выпадающего списка, и в вывод добавляется только временная метка.value.
Я использую doc ['source']. value в поле скриптового поля, и при предварительном просмотре я добавил поля message и error.message из выпадающего списка дополнительных полей.
Это то, что возвращает, нет ошибок или результатов сообщений, но я точно знаю, что из-за моего запроса выше, что данные существуют, и я, очевидно, вижу их на своей панели инструментов.Это также под строковым типом в выпадающем списке.
[
{
"_id": "RVW50mgBvqEbiJJnH8Vp",
"@timestamp": "2019-02-05T04:24:05.000Z",
"ipAddress": [
"C:\\inetpub\\logs\\LogFiles\\W3SVC5\\u_extend192.log"
]
},
, если я делаю следующее:
def path = doc['source'].value;
if (path != null) {
return "value " + path;
}else{
return "no value";
}
Я получаю:
[
{
"_id": "RVW50mgBvqEbiJJnH8Vp",
"ipAddress": [
"value C:\\inetpub\\logs\\LogFiles\\W3SVC5\\u_extend192.log"
]
},
, если я делаю:
def path = doc['message'].value;
if (path != null) {
return "value " + path;
}else{
return "no value";
}
Я получаю:
First 10 results
[]
, если я делаю это, никакие значения не возвращаются
if (doc.containsKey('message')) {
def path = doc['message'].value;
if (path != null) {
return "value " + path;
}else{
return "no value";
}
}else{
return "no key";
}
, если я делаю
if (doc.containsKey('message')) {
return "values";
}
он возвращает значения, поэтому кажется, что поле сообщения вызывает какую-то ошибку, которая не отображается в выводе или что-то, о чем я не знаю.
Я пробовал так много разных методов в предоставленной онлайн-консоли сценариев для выполнения полей со сценариямис предварительным просмотром, но не получал никаких ошибок.Затем я посмотрел, как выполнить запросasticsearch и запустить встроенные безболезненные сценарии, чтобы выяснить, есть ли какие-либо проблемы с доступом к полю.
GET /filelogbeat-production-6.4.2-2019.02.11/_search {
"query": {
"bool": {
"must": [{
"exists": {
"field": "message"
}
}],
"filter": [{
"script": {
"script": {
"inline": "doc['message'].value"
}
}
}]
}
}
}
запуск этого запроса в инструментах разработки
"type": "search_phase_execution_exception", "reason": "all shards failed", "phase": "query", "grouped": true, "failed_shards": [{
"shard": 0,
"index": "filelogbeat-production-6.4.2-2019.02.11",
"node": "hQksfgxQROiRSoSnDW3liQ",
"reason": {
"type": "script_exception",
"reason": "runtime error",
"script_stack": ["org.elasticsearch.index.mapper.TextFieldMapper$TextFieldType.fielddataBuilder(TextFieldMapper.java:670)", "org.elasticsearch.index.fielddata.IndexFieldDataService.getForField(IndexFieldDataService.java:115)", "org.elasticsearch.index.query.QueryShardContext.lambda$lookup$0(QueryShardContext.java:280)", "org.elasticsearch.search.lookup.LeafDocLookup$1.run(LeafDocLookup.java:88)", "org.elasticsearch.search.lookup.LeafDocLookup$1.run(LeafDocLookup.java:85)", "java.security.AccessController.doPrivileged(Native Method)", "org.elasticsearch.search.lookup.LeafDocLookup.get(LeafDocLookup.java:85)", "org.elasticsearch.search.lookup.LeafDocLookup.get(LeafDocLookup.java:39)", "doc['message'].value", " ^---- HERE"],
"script": "doc['message'].value",
"lang": "painless",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [message] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
}
}
}]
}, "status": 500
}
для сопоставления созданного filebeat для индекса все поля сообщения имеют следующее сопоставление:
"message": {
"type": "text",
"norms": false
},
Ошибка, которую он выдает:
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [message] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
}
Может ли это быть причиной моей проблемы в безболезненном предварительном просмотреполе, но не показывает исключение?
Есть ли проблема с использованием текстовых полей со скриптовыми полями?