@onedmgoflthl

Как построить запрос Elasticsearch?

Приветствую, господа!
Есть ELK-стак версии 5.0
С разных серверов шлются многострочные события в один индекс. Одна из метрик - состояние, "LaneIndic".
Как правильно построить запрос, в котором я для каждого сервера вытащу последнее значение этого состояния?
Таким запросом я получаю последнее значение LaneIndic, среди всех серверов.
GET /logstash-test-06/log/_search?
{
   "_source": ["beat.hostname", "LaneIndic", "@timestamp"],
    "query" : {
        "match_all": {}
    },
    "size": 1,
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ]
}

А вот как получить тоже самое, но для каждого уникального значения beat.hostname?
  • Вопрос задан
  • 759 просмотров
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Скорее всего нужно делать агрегацию.
Сначала агрегируете по "beat.hostname" с order = "@timestamp"
Затем по LaneIndic, size=1
Примерно так:
{
    "aggs" : {
        "host" : {
            "terms" : {
                "field" : "beat.hostname"
            },
            "aggs" : { "size":1,
                "lane" : { "terms" : { "field" : "LaneIndic" }, "order" : { "@timestamp" : "desc" }}
            }
        }
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
un1t
@un1t
Например так:
вместо

"query" : {
    "match_all": {}
},


вставить
"query" : {
    "match": {"beat.hostname": "имя сервера"}
},
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы