2

Elasticsearch にイベント ログ メッセージを保存するための最適化されたアーキテクチャを考え出そうとしています。

ここに私の仕様/ニーズがあります:

  • メッセージは読み取り専用です。入力すると、レポートのために照会されるだけです。
  • フリーテキスト検索はありません。ユーザーはレポートにフィルターのみを使用します。
  • timestamp範囲クエリを実行できる必要があります。
  • 主に (他のフィールドに加えて)agentおよびインタラクションでフィルタリングする必要があります。customer
  • customersagents同じに属していlocationます。

したがって、最も頻繁に実行されるクエリは次のようになります: get all LogItems given client_id, customer_id, and timestamprange.

LogItem次のようになります。

"_source": {
    "agent_id" : 14,
    "location_id" : 2,
    "customer_id" : 5289,
    "timestamp" : 1320366520000, //Java Long millis since epoch
    "event_type" : 7,
    "screen_id" : 12
}

データのインデックス作成についてサポートが必要です。

私はelasticsearchインデックスとは何かを読んできましたか? そしてelasticsearchを使用して顧客にイベントを提供し、優れたインデックス作成アーキテクチャのアイデアを得ることができますが、プロからの支援が必要です.

だからここに私の質問があります:

  1. この記事では、「1 日 1 つのインデックス」を作成することを提案しています。そのアーキテクチャで範囲クエリを実行するにはどうすればよいですか? (例: インデックス範囲でクエリを実行できますか?)

  2. 現在、私は 1 つの大きなインデックスを使用しています。location_id ごとに 1 つのインデックスを作成する場合、シャードを使用してレコードをさらに整理するにはどうすればよいですか?

  3. 上記の仕様を考慮して、提案できるより良いアーキテクチャはありますか?

  4. どのフィールドでフィルタリングする必要がありますか?

編集:これは私のアプリから実行されたサンプルクエリです:

{
  "query" : {
    "bool" : {
      "must" : [ {
        "term" : {
          "agent_id" : 6
        }
      }, {
        "range" : {
          "timestamp" : {
            "from" : 1380610800000,
            "to" : 1381301940000,
            "include_lower" : true,
            "include_upper" : true
          }
        }
      }, {
        "terms" : {
          "event_type" : [ 4, 7, 11 ]
        }
      } ]
    }
  },
  "filter" : {
    "term" : {
      "customer_id" : 56241
    }
  }
}
4

2 に答える 2

1

Take a good look at logstash (and kibana). They are all about solving this problem. If you decide to roll your own architecture for this, you might copy some of their design.

于 2013-10-13T13:16:19.097 に答える