KibanaでIPごとの通信量を集計しランキングにしたい


#1

それぞれ現行最新の6.6を使い、
Filebeat -> Logstash -> ElasticSearchとデータ取り込みはできています。
Proxyのログから
・DATA型のIPアドレス(IPV4型ではなく)
・INT型の通信量
がElasticSearchへ取り込まれており、IPアドレスの件数などはKibanaのVisualizeで出せているのですが、「ログ全体」から「IPアドレスごと」に「各行にある通信量を足した合計」を出し、かつランキング形式で表示する手法にたどり着いていません。

ログ全体からIPアドレスが記載されている行の合計ではなく、
もう一段階先のIPアドレスごとの通信量の足した合計(集計)はどのようにすればよいでしょうか。
ElasticSearchのクエリは見かけたことがあるのですが、Kibanaの画面上でどうすればよいかがわかると助かります。


(tsgkdt) #2

どのようなデータ構造でElasticsearchに格納されているかが分かりませんので、回答がずれているかもしれませんが...

以下に示すようなデータ構造があり、IPアドレスごとの通信量のトップn件を求めたい、ということでしたら、後述するような設定で可能かと思います。

データ構造

192.168.0.1の合計は300(データ件数は3)
192.168.0.20の合計は400(データ件数は1)
192.168.0.100の合計は150(データ件数は15)

ip_addr(IPアドレス) int_volume(通信量)
192.168.0.1 100
192.168.0.1 100
192.168.0.1 100
192.168.0.20 400
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10
192.168.0.100 10

KibanaのVisualization

Metricsのところでは、
AggregationにSUM, fieldに通信量を示す int_volumeを指定しました。

Bucketsのところでは、Split rowsを選択し、
AggregationにTerms, fieldにIPアドレスを示すip_addrを指定しました。
Sizeでは、テストデータでは、IPアドレスが3種類しかありませんがTop10件の場合は、Sizeを10にします。

Tableの設定画面例だとこのようなイメージです。右に結果が出て期待した結果が得られていることが確認できるかと思います。

ご参考になれば幸いです。


#3

早速のレス、ありがとうございました。

言われたとおり出来ないと思っていたら
LogstashでINT型に指定してたのですがElasticSearch側でtextになってまして、
テンプレートを作ることで解決しました。

今度はこのIPアドレスを別の表からホスト名にしてみたいとか夢膨らんでいます
助かりました。ありがとうございました