如何在 CollectD 的自定义 python 插件中访问插件读取?
How can I access plugins reading in a custom python plugin for CollecD?
我有以下需求:
- 在 CollecD 中注册插件列表(即 CPU、内存、温度等);
- 每次收集到新指标时,我都想获取它的值并执行命令。例如,每次收集到有关 CPU 使用情况的新指标时,我想 - 假设 - 将其写入文件;
到目前为止,我的方法是编写自定义 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
从未调用过回调。
我有以下需求:
- 在 CollecD 中注册插件列表(即 CPU、内存、温度等);
- 每次收集到新指标时,我都想获取它的值并执行命令。例如,每次收集到有关 CPU 使用情况的新指标时,我想 - 假设 - 将其写入文件;
到目前为止,我的方法是编写自定义 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
从未调用过回调。