Как получить уникальный счетчик поля с помощью Kibana + Elastic Search

Можно ли запрашивать отдельный/уникальный счетчик поля с помощью Kibana? Я использую эластичный поиск в качестве моего бэкэнда для Кибаны.

Если да, то каков синтаксис запроса? Вот ссылка на интерфейс Kibana. Я хотел бы сделать мой запрос: http://demo.kibana.org/#/dashboard

Я разбираю журналы доступа nginx с помощью logstash и сохраняю данные в режиме поиска. Затем я использую Kibana для запуска запросов и визуализации моих данных в диаграммах. В частности, я хочу узнать количество уникальных IP-адресов для определенного периода времени с помощью Kibana.

Ответ 1

Для Kibana 4 перейдите в этот ответ

Это легко сделать с панелью терминов:

Adding a terms panel to Kibana

Если вы хотите выбрать количество отдельных IP-адресов, которые находятся в ваших журналах, вы должны указать в поле clientip, вы должны поместить достаточно большое число в длину (в противном случае он будет подключаться к другому IP-адресу в той же группе ) и укажите в таблице стилей. После добавления панели вы получите таблицу с IP-адресом и количество IP-адресов:

Table with IP and count

Ответ 2

Теперь Kibana 4 позволяет использовать агрегаты. Помимо создания панели, подобной той, которая была объяснена в этом ответе для Kibana 3, теперь мы можем видеть количество уникальных IP-адресов в разные периоды, то есть (IMO) что ФП хотел в первую очередь.

Чтобы создать такую ​​панель, вы должны перейти в Visualize → Выберите свой индекс → Выберите вертикальную гистограмму, а затем на панели визуализации:

  • В оси Y мы хотим получить уникальное количество IP-адресов (выберите поле, в котором вы сохранили IP-адрес), а по оси X мы хотим, чтобы гистограмма даты использовала наше поле времени.

Building a visualization

  • После нажатия кнопки "Применить" у нас должен быть график, который показывает уникальное количество IP-адресов, распределенных по времени. Мы можем изменить временной интервал на оси X, чтобы увидеть уникальные IP почасовые/ежедневные...

Final plot

Просто учтите, что уникальные подсчеты approximate. Для получения дополнительной информации проверьте также этот ответ.

Ответ 3

Помните, что с уникальным счетчиком вы используете метрику "мощность", которая не всегда гарантирует точный уникальный счет.: -)

показатель мощности является приближенным алгоритмом. Он основан на Алгоритм HyperLogLog++ (HLL). HLL работает путем хеширования ваших входных данных и используя биты из хэша, чтобы сделать вероятностные оценки на мощность.

В зависимости от количества данных я могу получить разницу в 700+ записей, отсутствующих в наборе данных 300 000 через Unique Count in Elastic, которые в действительности действительно уникальны.

Подробнее здесь: https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html

Ответ 4

Создайте запрос "topN" на "clientip", а затем гистограмму с подсчетом на "clientip" и установите запрос "topN" в качестве источника. Затем вы увидите количество разных ips за время.

Ответ 5

Уникальные значения значений полей достигаются с помощью граней. См. документацию ES для полной истории, но суть в том, что вы создадите запрос, а затем попросите ES подготовить грани к результатам для подсчета значений найденных в полях. Это зависит от вас, чтобы настроить используемые поля и даже описать, как вы хотите вернуть значения. Самый простой из фасетных типов - это просто сгруппировать по срокам, которые будут похожи на IP-адрес выше. Вы можете стать довольно сложным с ними, даже требуя запроса в пределах вашего аспекта!

{
    "query": {
        "match_all": {}
    },
    "facets": {
        "terms": {
            "field": "ip_address"
        }
    }
}