0

collectd 5.4と一緒logstashに使用し、Ubuntu 14.04 システムelasticsearchkibanaの監視目的で使用します。私のcollectd構成ファイルは次のようになります。

Hostname "my-host-name"

Interval 1

LoadPlugin cpu
LoadPlugin load
LoadPlugin df
LoadPlugin memory
LoadPlugin swap

LoadPlugin interface
<Plugin interface>
    Interface "eth0"
    IgnoreSelected false
</Plugin>

LoadPlugin network
<Plugin network>
    Server "127.0.0.1" "25826"
</Plugin>

df問題は、プラグインを有効にするまで、すべてが完全に正常に機能することです。プラグインを有効にすると、プラグインの出力にdf欠落したフィールドが表示されます。前述の出力は次のとおりです。type_instancememory

{"@version":"1","@timestamp":"2014-09-04T07:20:42.143Z","host":"my-host","plugin":"memory","collectd_type":"memory","value":6250332160.0}
{"@version":"1","@timestamp":"2014-09-04T07:20:42.143Z","host":"my-host","plugin":"memory","collectd_type":"memory","type_instance":"buffered","value":55103488.0}
{"@version":"1","@timestamp":"2014-09-04T07:20:42.143Z","host":"my-host","plugin":"memory","collectd_type":"memory","type_instance":"cached","value":1283186688.0}
{"@version":"1","@timestamp":"2014-09-04T07:20:42.143Z","host":"my-host","plugin":"memory","collectd_type":"memory","type_instance":"free","value":665567232.0}

与えられた出力の最初の行を見てください。type_instanceフィールドはありません。期待される動作は"type_instance":"used". フィールドでのみ発生してusedおり、ランダムに発生しています。dfプラグインを有効にするまで、すべて正常に動作します。

4

2 に答える 2

2

この回答がまだ役立つことを願っています。
同じ問題があり、logstash の collectd プラグインを修正することで解決しました。
私は collectd 5.4.1 と logstash 1.4.2 を使用しました。

1.理由

あなたが言ったように、dfとメモリプラグインを同時に使用すると問題が発生します。
これが問題のシナリオです。

collectd が次の df とメモリ データを 1 つの UDP パケットに順番に設定すると仮定します。

{"@version":"1","@timestamp":"2014-10-31T06:04:08.371Z","host":"example", "type_instance":"used" ,"plugin":"df ","plugin_instance":"root","collectd_type":"df_complex","value":5076176896.0}

{"@version":"1","@timestamp":"2014-10-31T06:04:08.371Z","host":"example", "type_instance":"used" ,"plugin":"memory ","collectd_type":"memory","value":7530356736.0}

collectd UDP プロトコルは、以前に UDP パケットで設定した場合、同じデータを設定しません (おそらくパケット サイズを最小化するため)。

そのため、collectd は df データに "type_instance" を "used" として設定したため、メモリ データに "type_instance" を再設定しません。(プロトコル仕様を参照してください: https://collectd.org/wiki/index.php/Binary_protocol )

しかし、logstash collectd プラグインは、「プラグイン」の値が変更されると、「type_instance」を空白としてリセットします。

2. 問題の解決方法

collectd プラグインは jruby で書かれています。したがって、ソースを簡単に修正できます。
lib/logstash/inputs/collectd.rb を編集します。
次の 2 行を見つけて修正します。

From:
411 行: @collectd.delete(k) if !['host', '@timestamp'].include?(k)
417 行: @collectd.delete(k) if !['host', '@timestamp ', 'plugin', 'plugin_instance'].include?(k)

To:
411 行: @collectd.delete(k) if !['host', '@timestamp' , 'type_instance' ].include?(k)
417 行: @collectd.delete(k) if !['host' , '@timestamp', 'plugin', 'plugin_instance' , 'type_instance' ].include?(k)

修正後、問題はなくなりました。

于 2014-11-04T07:55:46.440 に答える