1

同じマシン上のサーバープロセスの複数のインスタンスのデータを報告することになっているcollectd-pluginを実装しようとしています。

私の TYPE_CONFIG 関数は問題ありません。各構成項目を取得して解析します。

私が苦労しているのはTYPE_READ関数です-リーダーの各呼び出しでサーバーインスタンスの1つだけを報告して、1つのインスタンスで呼び出しが失敗した場合にcollectdが呼び出すレートを報告したいと思います他のインスタンスのメソッドは影響を受けません。

そこでTYPE_CONFIGメソッド内から複数のTYPE_READメソッドを登録してみました。

残念ながら、collectd は read-method に引数を渡しません... 1 つの代替方法は、config でインスタンスのリストを作成し、リーダーを 1 つだけ登録してから、その中のリストをループすることです。これは機能しますが、言及されている欠点があります。上記: 1 つのインスタンスがその統計情報の報告に失敗した場合、デーモンはすべてのインスタンスの照会率を下げます。

もう 1 つの方法は、Perl の無名関数を使用することかもしれませんが、方法はわかりません。以下は機能しません。

    my @data = [$m_instance, $connection];
    plugin_register(TYPE_READ, "foo", sub { return mongo_read(@data); });

Collectd は、次のような呼び出しを拒否しますCollectd::plugin_register: Invalid data

おそらく、plugin_register に受け入れられる方法でそのような関数を作成する簡単な方法はありますか?

4

1 に答える 1

0

正方形のバケツ [ ] は、配列ではなく配列参照を作成します。

my @data = ($m_instance, $connection);

また

my $data = [$m_instance, $connection];
plugin_register(TYPE_READ, "foo", sub { return mongo_read($data); });

そして、mongo_read() サブルーチンで配列への参照を処理します。

于 2015-01-21T00:24:14.610 に答える