2016-09-29 5 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 plugin: cdbi_connect_database: dbi_driver_open_r (Pg) не удалось. severity = err' – Martin