0

Sensu をモニタリング システムとして使用し、Graphite をグラフィックスのバックエンドとして使用したいと考えています。

AMQP プロトコル経由で RabbitMQ からデータを受信するように Sensu を構成したいので、Carbon を次のように構成しました。

# vim /etc/carbon/carbon.conf

# Enable AMQP if you want to receve metrics using an amqp broker
ENABLE_AMQP = True

# Verbose means a line will be logged for every metric received
# useful for testing
AMQP_VERBOSE = True

AMQP_HOST = 10.0.3.16
AMQP_PORT = 5672
AMQP_VHOST = /sensu
AMQP_USER = sensu
AMQP_PASSWORD = kubuntu710
AMQP_EXCHANGE = metrics_my
AMQP_METRIC_NAME_IN_BODY = True

私の理解では、Carbon はいくつかの頻度で RabbitMQ (AMQP 経由) からデータを要求し、Whisper 経由で保存します。

一方、Sensu はいくつかのメトリクスを RabbitMQ に保存します。次のように構成しました。

root@sensu_server:/etc/sensu/conf.d# vim graphite_handler_amqp.json

{
  "handlers": {
    "graphite_amqp": {
      "type": "transport",
      "pipe": {
        "type": "topic",
        "name": "metrics_my",
        "durable": "true"
      },
      "mutator": "only_check_output"
    }
  }
}

そしてもちろん、このハンドラーを次のようにアタッチしました。

root@sensu_server:/etc/sensu/conf.d# cat metrics_cpu.json
{
  "checks": {
    "metrics_cpu": {
      "type": "metric",
      "command": "/opt/sensu/embedded/bin/metrics-cpu-pcnt-usage.rb",
      "interval": 10,
      "subscribers": ["MONGO"],
      "handlers": ["graphite_amqp"]
    }
  }
}

すべて問題ありませんが、グラファイトはメトリックを描画できません。これはグラファイト側からのログです:

13/06/2016 18:57:16 :: New AMQP connection made

これは、Sensu サーバー側の rabbitMQ からのものです。

=INFO REPORT==== 13-Jun-2016::15:57:16 ===
accepting AMQP connection <0.25298.0> (10.0.3.95:43722 -> 10.0.3.16:5672)

=ERROR REPORT==== 13-Jun-2016::15:57:16 ===
Channel error on connection <0.25298.0> (10.0.3.95:43722 -> 10.0.3.16:5672, vhost: '/sensu', user: 'sensu'), channel 1:
operation exchange.declare caused a channel exception precondition_failed: "inequivalent arg 'durable' for exchange 'metrics_my' in vhost '/sensu': received 'true' but current is 'false'"

Sensu が true に設定する必要があるのに、rabbitMQ が "durable": を "false" に設定すると考えるのはなぜですか?

そのようなロジックで自分の経験を共有できる人はいますか?

PS。tcp ハンドラーのみを使用した構成は、私にとっては正常に機能しています。

4

1 に答える 1

0
operation exchange.declare caused a channel exception precondition_failed: "inequivalent arg 'durable' for exchange 'metrics_my' in vhost '/sensu': received 'true' but current is 'false'"

交換metrics_myは既に存在し、durable プロパティが false に設定されています。他のプロセスが、同じ交換を異なる値の耐久性 (true) で再宣言しようとしています。

プロセスが起動すると、指定した構成を使用してRabbitMQを構成しようとしているように見えます-必要な交換とキューが存在することを確認してください.

ただし、RabbitMQ では、交換とキューが作成された後にそれらの一部のプロパティを変更することはできません。そのため、プロセスの 1 つが起動し、交換が存在することを確認しようとしていますが、耐久性のあるプロパティに異なる値を指定しているため失敗しています。それがすでに何であるか。

私の推測では、炭素と扇子はmetrics_my交換用の耐久値が異なるように構成されていると思います。

あなたが提供した構成のスニペットに基づいて、カーボンの耐久性プロパティを変更するオプションはありませんが、センスの場合は変更できます。

耐久性がどうあるべきかについて全員に同意してもらい、交換を削除して(耐久性が異なる場合)、すべてを再起動する必要があります。

PS: 永続プロパティは、交換がディスクに保持され、RabbitMQ プロセスの再起動後も存続する必要があることを指定します。

于 2016-07-17T20:47:41.887 に答える