2016-09-29 47 views
3

我想問一下Collectd的插件Perl和Python及其註冊函數。Collectd - Perl/Python插件 - 註冊功能不起作用

我試圖在Perl(也是在Python)中編寫插件,設置讀寫功能,之後將它們註冊到Collectd(plugin_register函數)中。在所有情況下,它都沒有工作。每次,日誌顯示:

發現了「my_plugin」插件的配置,但該插件 沒有加載或沒有註冊的配置回調。 嚴重性=警告

我在perl.conf中加載我的插件。

下面我附上直接來自Collectd.perl文檔的插件示例。這個插件,以及我的插件,都有相同的結果。

package Collectd::Plugins::FooBar; 
    use strict; 
    use warnings; 
    use Collectd qw(:all); 

    sub foobar_read 
    { 
    my $vl = { plugin => 'foobar', type => 'gauge' }; 
    $vl->{'values'} = [ rand(42) ]; 
    plugin_dispatch_values ($vl); 
    return 1; 
    } 
    sub foobar_write 
    { 
    my ($type, $ds, $vl) = @_; 
    for (my $i = 0; $i < scalar (@$ds); ++$i) { 
     print "$vl->{'plugin'} ($vl->{'type'}): $vl->{'values'}->[$i]\n"; 
    } 
    return 1; 
    } 

    sub foobar_match 
    { 
    my ($ds, $vl, $meta, $user_data) = @_; 
    if (matches($ds, $vl)) { 
     return FC_MATCH_MATCHES; 
    } else { 
     return FC_MATCH_NO_MATCH; 
    } 
    } 

    plugin_register (TYPE_READ, "foobar", "foobar_read"); 
    plugin_register (TYPE_WRITE, "foobar", "foobar_write"); 
    fc_register (FC_MATCH, "foobar", "foobar_match"); 

回答

1

如果可以,請發佈您的配置。

的文檔說LoadPlugin配置雲在collectd.conf文件(不是這似乎在你的情況從你的日誌文件沒關係)。

把你foobar.pm模塊在/path/to/perl/plugins/Collectd/Plugins/FoorBar.pm與您指定的路徑...(符合插件和插件時文件名的情況下)匹配它。

LoadPlugin perl 
# ... 
<Plugin perl> 
    IncludeDir "/path/to/perl/plugins" 
    BaseName "Collectd::Plugins" 
    EnableDebugger "" 
    LoadPlugin "FooBar" 

    <Plugin FooBar> 
    Foo "Bar" 
    </Plugin> 
</Plugin> 
+0

我使用'LoadPlugin name_of_my_plugin'命令。因爲它是我自己的插件,所以我需要以某種方式在那裏註冊函數/方法,但是儘管有文檔說明,但我並沒有成功。 – Martin

+0

現在工作嗎? – blackpen

+0

不幸的不是。使用DBI插件和Postgres數據庫 - 它結束於以下日誌: 'dbi插件:cdbi_connect_database:dbi_driver_open_r(Pg)失敗。嚴重性=錯誤' – Martin