質問

logstash と elasticsearch を使用してログ システムを構築しています。RabbitMQ は、2 つのログスタッシュ間のログ メッセージをキューに入れていました。

メッセージパスは以下のような感じです。

source log -> logstash -> rabbitMQ -> logstash(parse) -> elasticsearch

しかし、rabbitMQ にどれだけ多くのマシンを追加しても、メッセージの処理に使用されるマシン リソースは 1 つだけであることがわかりました。

クラスターはメッセージの損失を防ぐために信頼性と冗長性を高めるだけであるという記事をいくつか見つけました。

しかし、私が望むのは、マシンを追加して RabbitMQ クラスター全体のスループット (入出力) を向上させることです。

スループットを向上させるために RabbitMQ クラスターを構成するにはどうすればよいですか?

コメントは大歓迎です。

--

PS.ここにさらに情報を追加する必要があります。

私のシステム制限では、私がテストしたのは、4マシンのクラスターシステムで7000/秒のメッセージを受信し、1700/秒のメッセージを出力できますが、HAを有効にせず、1つの交換を1つのキューにバインドするだけで、キューは1つのノードにバインドするだけです。1つのノードに1つのキューをバインドすることがスループットのボトルネックだと思います。また、現在ルーティング キーを変更するのは難しいため、ルーティング キーを 1 つだけ使用し、メッセージをさまざまなノードに分散してシステム全体のスループットを向上させたいと考えています。

以下は私のlogstash-indexer構成です

rabbitmq {
codec       => "json"
auto_delete => false
durable     => true
exchange    => "logstash-exchange"
key         => "logstash-routingKey"
queue       => "logstash-queue"
host        => "VIP-of-rabbitMQ"
user        => "guest"
password    => "guest"

passive     => false
exclusive   => false


threads     => 4
prefetch_count => 512   }
役に立ちましたか?

解決

さらにキューを追加する必要があります。キューを 1 つだけ使用していると思います。つまり、1 つの erlang プロセスに関連付けられているということです。あなたが望むのは、複数のキューを使用することです。

以下は、メッセージを別のキューに送信するために logstash にロジックを追加する方法の簡単で汚い例です。

filter {

  # check if path contains source subfolder
  if "foo" in [path] {
    mutate { add_field => [ "source", "foo"] }
  }
  else if "bar" in [path] {
    mutate { add_field => [ "source", "bar"] }
  }
  else {
    mutate { add_field => [ "source", "unknown"] }
  }
}

次に、出力で次のようにします。

  rabbitmq {
    debug => true
    durable => true
    exchange_type => "direct"
    host => "your_rabbit_ip"
    key => "%{source}"
    exchange => "my_exchange"
    persistent => true
    port => 5672
    user => "logstash"
    password => "xxxxxxxxxx"
    workers => 12
  }

更新しました:

この男が持っているリポジトリを見てください。https://github.com/simonmacmullen

あなたはこれに興味があると思います:https://github.com/simonmacmullen/random-exchange

This exchange type is for load-balancing among consumers.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top