Collectd - Perl/Python 插件 - 注册功能不工作
Collectd - Perl/Python plugin - registration functions not working
想问一下Collectd的插件Perl和Python及其注册功能。
我尝试用 Perl(以及 Python)编写插件代码,设置读写函数,然后将它们注册到 Collectd(plugin_register 函数)。在所有情况下它都不起作用。每次,日志显示:
Found a configuration for the "my_plugin" plugin, but the plugin
isn't loaded or didn't register a configuration callback.
severity=warning
我在 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");
Post你的配置如果可以的话。
文档说 LoadPlugin
配置在 collectd.conf 文件中(不是那个看起来从您的日志文件中了解您的情况)。
将您的 foobar.pm 模块放在 /path/to/perl/plugins/Collectd/Plugins/FoorBar.pm
与您指定的路径相匹配... (匹配插件名称和插件pm文件的大小写)。
LoadPlugin perl
# ...
<Plugin perl>
IncludeDir "/path/to/perl/plugins"
BaseName "Collectd::Plugins"
EnableDebugger ""
LoadPlugin "FooBar"
<Plugin FooBar>
Foo "Bar"
</Plugin>
</Plugin>
想问一下Collectd的插件Perl和Python及其注册功能。
我尝试用 Perl(以及 Python)编写插件代码,设置读写函数,然后将它们注册到 Collectd(plugin_register 函数)。在所有情况下它都不起作用。每次,日志显示:
Found a configuration for the "my_plugin" plugin, but the plugin isn't loaded or didn't register a configuration callback. severity=warning
我在 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");
Post你的配置如果可以的话。
文档说 LoadPlugin
配置在 collectd.conf 文件中(不是那个看起来从您的日志文件中了解您的情况)。
将您的 foobar.pm 模块放在 /path/to/perl/plugins/Collectd/Plugins/FoorBar.pm
与您指定的路径相匹配... (匹配插件名称和插件pm文件的大小写)。
LoadPlugin perl
# ...
<Plugin perl>
IncludeDir "/path/to/perl/plugins"
BaseName "Collectd::Plugins"
EnableDebugger ""
LoadPlugin "FooBar"
<Plugin FooBar>
Foo "Bar"
</Plugin>
</Plugin>