У меня есть некоторые необработанные данные
{
{
"id":1,
"message":"intercept_log,UDP,0.0.0.0,68,255.255.255.255,67"
},
{
"id":2,
"message":"intercept_log,TCP,172.22.96.4,52085,239.255.255.250,3702,1:"
},
{
"id":3,
"message":"intercept_log,UDP,1.0.0.0,68,255.255.255.255,67"
},
{
"id":4,
"message":"intercept_log,TCP,173.22.96.4,52085,239.255.255.250,3702,1:"
}
}
Требование
Я хочу сгруппировать эти данные по значению части сообщения сообщения. Выходное значение такое
{
{
"GroupValue":"TCP",
"DocCount":"2"
},
{
"GroupValue":"UDP",
"DocCount":"2"
}
}
Пытаться
- Я пробовал с этими кодами, но не удалось
GET systemevent*/_search
{
"size": 0,
"aggs": {
"tags": {
"terms": {
"field": "message.keyword",
"include": " intercept_log[,,](.*?)[,,].*?"
}
}
},
"track_total_hits": true
}
- Теперь я пытаюсь использовать конвейеры для удовлетворения этой потребности.
- ggs, похоже, только группирует поля.
- У кого-нибудь есть идея получше?
Ссылка на сайт
Обновлять
Моя сцена немного особенная. Я собираю журналы с разных серверов, а затем импортирую журналы в es. Следовательно, существует большая разница между полями сообщений. Если вы напрямую используете операторы скрипта для группировки статистики, это приведет к сбою группы или неточной группировке. Я пытаюсь отфильтровать некоторые данные в соответствии с условиями, а затем использую скрипт для группировки кода операции (код комментария 1), но этот код не может сгруппировать правильные результаты.
Это моя сцена, чтобы добавить:
Наша команда использует es для анализа журнала сервера, использует rsyslog для пересылки данных в серверный центр, а затем использует logstash для фильтрации и извлечения данных в es. В настоящее время в ES есть поле, называемое сообщением, и значением сообщения является подробная информация журнала. В это время нам нужно подсчитать данные, содержащие некоторые значения в сообщении.
код комментария 1
POST systemevent*/_search
{
"size": 0,
"query": {
"bool": {
"must": [
{
"match_phrase": {
"message": {
"query": "intercept_log"
}
}
}
]
}
},
"aggs": {
"protocol": {
"terms": {
"script": "def values = /,/.split(doc['message.keyword'].value); return values.length > 1 ? values[1] : 'N/A'",
"size": 10
}
}
},
"track_total_hits": true
}
код комментария 2
POST test2/_search
{
"size": 0,
"aggs": {
"protocol": {
"terms": {
"script": "def values = /.*,.*/.matcher( doc['host.keyword'].value ); if( name.matches() ) {return values.group(1) } else { return 'N/A' }",
"size": 10
}
}
}
}