Kibanaを使用してフィールドの個別/一意のカウントを照会することは可能ですか? Kibanaのバックエンドとしてエラスティック検索を使用しています。
もしそうなら、クエリの構文は何ですか?クエリを作成したいKibanaインターフェイスへのリンクは次のとおりです。 http://demo.kibana.org/#/dashboard
私はlogstashでnginxアクセスログを解析し、データをエラスティック検索に保存しています。次に、Kibanaを使用してクエリを実行し、データをグラフで視覚化します。具体的には、Kibanaを使用して、特定の期間の一意のIPアドレスの数を知りたいです。
Kibana 4の場合は この回答に進みます
これは、用語パネルを使用して簡単に行えます。
ログにある個別のIPの数を選択する場合は、フィールドclientip
に指定する必要があります。長さには十分な数を指定する必要があります(そうしないと、同じグループの異なるIPに参加します)スタイルテーブルで指定します。パネルを追加すると、IPとそのIPのカウントを含むテーブルが作成されます。
現在、Kibana 4では集計を使用できます。 Kibana 3で この回答 で説明したようなパネルを作成することとは別に、今では、異なる期間で一意のIPの数を見ることができます。場所。
このようなダッシュボードを作成するには、視覚化->インデックスの選択->縦棒グラフの選択を行ってから、視覚化パネルで行ってください:
一意のカウントがapproximateであることを考慮してください。詳細については、 this answer も確認してください。
「カーディナリティ」メトリックを使用している一意のカウントに注意してください。これは常に正確な一意のカウントを保証するものではありません。 :-)
カーディナリティメトリックは近似アルゴリズムです。 HyperLogLog ++(HLL)アルゴリズムに基づいています。 HLLは、入力をハッシュし、ハッシュからのビットを使用して、カーディナリティーの確率的推定を行います。
データの量に応じて、ElasticのUnique Countを使用して、300kデータセットに700個以上のエントリが存在しないという違いを取得できます。
詳細はこちら: https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html
「clientip」で「topN」クエリを作成してから、「clientip」でカウントしたヒストグラムを作成し、「topN」クエリをソースとして設定します。その後、時間ごとに異なるIPのカウントが表示されます。
フィールド値の一意のカウントは、ファセットを使用して実現されます。詳細については ES documentation を参照してください。ただし、要点はクエリを作成し、フィールドで見つかった値をカウントするために結果のファセットを準備するようにESに依頼することです。使用するフィールドをカスタマイズし、値を返す方法を説明することもできます。最も基本的なファセットタイプは、上記のIPアドレスのような用語でグループ化することです。これらは非常に複雑になる可能性があり、ファセット内でクエリが必要になることもあります!
{
"query": {
"match_all": {}
},
"facets": {
"terms": {
"field": "ip_address"
}
}
}
Eggsを使用すると簡単にできます。今のところクエリを書き留めます。
GET index/_search
{
"size":0,
"aggs": {
"source": {
"terms": {
"field": "field",
"size": 100000
}
}
}
}
これにより、field
のさまざまな値がドキュメントカウントとともに返されます。