Добрый день!
Из индекса нужно выделить количество пользовательских сессий с различными ошибками. Для этого используется такого вида запрос:
"aggs": {
"ERBL": {
"cardinality": {
"script": "if (doc['error.ERBL.code']){ doc['info.PID'].value }"
}
},
"ERVS": {
"cardinality": {
"script": "if (doc['error.ERVS.code']){ doc['info.PID'].value }"
}
},
"ERVS_CH": {
"cardinality": {
"script": "if (doc['error.ERVS_CH.code']){ doc['info.PID'].value }"
}
}
... и так далее для других ошибок
"All": {
"cardinality": {
"field": "info.PID"
}
}
Все поля с ошибками имеют вид error._имя_ошибки_.code
.
info.PID это идентификатор пользователя.
Маппинг для ошибок выглядит так:
"ERBL": {
"properties": {
"code": {
"type": "integer"
},
"msg": {
"type": "string",
"index": "not_analyzed",
"doc_values": false
}
}
}
В результате получаем общее количество сессий и количество сессий с различными типами ошибок, высчитывается процент ошибок и отправляется внешним скриптом в мониторинг.
Обязательно ли расписывать каждую ошибку отдельно, как мы сейчас делаем, или это можно сделать проще? И можно ли как-то получить сразу % ошибочных сессий от общих, а не высчитывать их отдельно в отправляющем скрипте?
Спасибо!