如何将参数传递给收集的perl插件的读取函数



我正在尝试实现一个收集插件,它应该在同一台机器上报告服务器进程的多个实例的数据。

我的TYPE_CONFIG函数很好 - 它获取每个配置项并解析它。

我正在努力解决的是TYPE_READ函数 - 我希望读取器的每次调用仅报告其中一个服务器实例,以便,如果一个实例的调用失败,收集的速率调用其他实例的方法,不受影响。

所以我尝试从TYPE_CONFIG方法内部注册多个TYPE_READ方法。

不幸的是,collectd 不会将任何参数传递给读取方法......一种替代方法是在 config 中构建一个实例列表,只注册一个读取器,然后遍历其中的列表 - 这有效,但具有上面提到的缺点:如果一个实例未能报告其统计信息,守护进程将降低所有实例的查询率。

另一种选择可能是使用 Perl 的匿名函数 -- 但我不确定如何。以下方法不起作用:

    my @data = [$m_instance, $connection];
    plugin_register(TYPE_READ, "foo", sub { return mongo_read(@data); });

收集拒绝这样的调用,并带有:Collectd::plugin_register: Invalid data

也许有没有一些简单的方法可以以plugin_register可接受的方式创建这样的函数?

方形背板 [ ] 创建一个数组引用,而不是一个数组。

my @data = ($m_instance, $connection);

my $data = [$m_instance, $connection];
plugin_register(TYPE_READ, "foo", sub { return mongo_read($data); });

然后处理对 mongo_read() 子数组的引用。

最新更新