如何在 CollectD 的自定义 python 插件中访问插件读取?

How can I access plugins reading in a custom python plugin for CollecD?

我有以下需求:

到目前为止,我的方法是编写自定义 Python 插件,但我不知道如何访问其他插件的读取。例如:

配置文件

LoadPlugin cpu
<Plugin cpu>
  ReportByState = true
  ReportByCpu = true
  ValuesPercentage = true
</Plugin>

LoadPlugin python
<Plugin python>
    LogTraces true
    ModulePath "/opt/collectd/plugins"
    Import "my_custom_python_plugin"
</Plugin>

my_custom_python_plugin

import collectd


def read_func():
  # Here I wanna execute my fancy code 
  # with the metrics collected by other plugins (i.e. CPU)


collectd.register_read(read_func)

如何实现?

事实证明,每次插件发布指标时,来自 collectd 的 write 回调都会被调用。它包含一个 values 对象,可以针对您想要的任何指标进行解析。即:

collectd.conf

Hostname "graph_host"

Interval 5.0

LoadPlugin "logfile"
<Plugin "logfile">
  LogLevel "info"
  File "some/dir/log"
  Timestamp true
</Plugin>

LoadPlugin memory
<Plugin memory>
</Plugin>

LoadPlugin python
<Plugin python>
    LogTraces true
    ModulePath "/opt/collectd/plugins"
    Import "my_plugin"
</Plugin>

my_plugin.py

if values.plugin == "memory" and values.type == "memory" and values.type_instance == "free":
  # do whatever I want


collectd.register_write(write)

我之前没有注意到这一点,因为我正在使用 cpu 插件对其进行测试,该插件本身存在错误 - 发生在 Mac 上的权限问题 - 因此,没有生成任何指标并且 write 从未调用过回调。