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