Collectd-Perl/Python插件-注册函数不工作

Collectd-Perl/Python插件-注册函数不工作,python,perl,plugins,registration,collectd,Python,Perl,Plugins,Registration,Collectd,我想问一下Collectd的插件Perl和Python及其注册函数 我尝试用Perl(以及Python)编写插件,设置读写函数,然后将它们注册到Collectd(plugin_register functions)中。在所有情况下,它都不起作用。每次日志都显示: 找到了“my_plugin”插件的配置,但该插件 未加载或未注册配置回调。 严重性=警告 我在perl.conf中加载插件 下面我附上直接来自Collectd.perl文档的插件示例。这个插件和我的插件都有相同的结果 package C

我想问一下Collectd的插件Perl和Python及其注册函数

我尝试用Perl(以及Python)编写插件,设置读写函数,然后将它们注册到Collectd(plugin_register functions)中。在所有情况下,它都不起作用。每次日志都显示:

找到了“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");
packagecollectd::Plugins::FooBar;
严格使用;
使用警告;
使用收集的qw(:全部);
子foobar_read
{
我的$vl={plugin=>foobar',type=>gauge'};
$vl->{'values'}=[rand(42)];
插件调度值($vl);
返回1;
}
子foobar_写入
{
我的($type,$ds,$vl)=@;
对于(my$i=0;$i<标量(@$ds);+$i){
打印“$vl->{'plugin'}($vl->{'type'}):$vl->{'values'}->[$i]\n”;
}
返回1;
}
子foobar_匹配
{
我的($ds、$vl、$meta、$user_data)=@;
如果(匹配($ds$vl)){
返回FC_MATCH_MATCHES;
}否则{
返回FC\u MATCH\u NO\u MATCH;
}
}
插件寄存器(类型读取,“foobar”,“foobar\u读取”);
插件寄存器(类型写入,“foobar”,“foobar\u写入”);
fc_寄存器(fc_匹配、“foobar”、“foobar_匹配”);

如果可以,发布您的配置

文档中说,
LoadPlugin
配置位于collectd.conf文件中(从日志文件来看,这似乎并不重要)

将foobar.pm模块置于
/path/to/perl/plugins/Collectd/plugins/FoorBar.pm
与指定的路径匹配。。。(匹配插件名称和插件pm文件的大小写)

loadpluginperl
# ...
IncludeDir“/path/to/perl/plugins”
BaseName“Collectd::Plugins”
启用调试器“”
加载插件“FooBar”
富“酒吧”

我使用命令
loadpluginname\u of\u my\u plugin
。因为它是我自己的插件,所以我需要在那里注册函数/方法,但尽管有文档说明,我还是没有成功。使用DBI插件和Postgres数据库-结束于以下日志:
DBI插件:cdbi\u连接\u数据库:DBI\u驱动程序\u打开\u r(Pg)失败。severity=err
我希望它现在能正常工作。驱动程序不是Pg,而是pgsql。谢谢检查您是否能够使用Perl在命令行上从外部连接it postgres db。如果是这种情况,那么您可能需要将相同的路径LD_LIBRARY_PATH复制到collectd服务器(以便可能找到正确的postgres库)。
LoadPlugin perl
# ...
<Plugin perl>
  IncludeDir "/path/to/perl/plugins"
  BaseName "Collectd::Plugins"
  EnableDebugger ""
  LoadPlugin "FooBar"

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