0

我在我的 Ubuntu 14.04 系统上使用collectd 5.4withlogstash和用于监控目的。我的配置文件如下所示:elasticsearchkibanacollectd

Hostname "my-host-name"

Interval 1

LoadPlugin cpu
LoadPlugin load
LoadPlugin df
LoadPlugin memory
LoadPlugin swap

LoadPlugin interface
<Plugin interface>
    Interface "eth0"
    IgnoreSelected false
</Plugin>

LoadPlugin network
<Plugin network>
    Server "127.0.0.1" "25826"
</Plugin>

df问题是在我启用插件之前一切都很好。启用插件后,插件输出中df缺少type_instance字段memory。这是前面提到的输出:

{"@version":"1","@timestamp":"2014-09-04T07:20:42.143Z","host":"my-host","plugin":"memory","collectd_type":"memory","value":6250332160.0}
{"@version":"1","@timestamp":"2014-09-04T07:20:42.143Z","host":"my-host","plugin":"memory","collectd_type":"memory","type_instance":"buffered","value":55103488.0}
{"@version":"1","@timestamp":"2014-09-04T07:20:42.143Z","host":"my-host","plugin":"memory","collectd_type":"memory","type_instance":"cached","value":1283186688.0}
{"@version":"1","@timestamp":"2014-09-04T07:20:42.143Z","host":"my-host","plugin":"memory","collectd_type":"memory","type_instance":"free","value":665567232.0}

查看给定输出的第一行。没有type_instance领域。预期的行为是有"type_instance":"used". 它只发生在used场上,而且是随机发生的。在我启用df插件之前一切正常。

4

2 回答 2

2

我希望这个答案仍然有帮助。
我遇到了同样的问题,并通过修复 logstash 的 collectd 插件来解决。
我使用了 collectd 5.4.1 和 logstash 1.4.2。

1. 原因

正如您所说,当您同时使用 df 和 memory 插件时会发生问题。
这是问题场景。

假设 collectd 在一个 UDP 数据包中顺序设置以下 df 和 memory 数据。

{"@version":"1","@timestamp":"2014-10-31T06:04:08.371Z","host":"example", "type_instance":"used" ,"plugin":"df ","plugin_instance":"root","collectd_type":"df_complex","value":5076176896.0}

{"@version":"1","@timestamp":"2014-10-31T06:04:08.371Z","host":"example", "type_instance":"used" ,"plugin":"memory ","collectd_type":"memory","value":7530356736.0}

如果之前在 UDP 数据包中设置了 collectd UDP 协议,则不会设置相同的数据(可能是为了最小化数据包大小)

因此,因为 collectd 在 df 数据中将“type_instance”设置为“used”,所以它不会在内存数据中再次设置“type_instance”。(参见协议规范:https ://collectd.org/wiki/index.php/Binary_protocol )

但是当“plugin”值更改时,logstash collectd plugin 将“type_instance”重置为空白。

2.如何解决问题

collectd 插件是用 jruby 编写的。因此,您可以轻松修复源。
编辑 lib/logstash/inputs/collectd.rb。
找到以下 2 行并修复它们。

来自:
411 行:@collectd.delete(k) if !['host', '@timestamp'].include?(k)
417 行:@collectd.delete(k) if !['host', '@timestamp ', 'plugin', 'plugin_instance'].include?(k)

To:
411 line: @collectd.delete(k) if !['host', '@timestamp' , 'type_instance' ].include?(k)
417 line: @collectd.delete(k) if !['host' , '@timestamp', 'plugin', 'plugin_instance' , 'type_instance' ].include?(k)

修复后,问题就消失了。

于 2014-11-04T07:55:46.440 回答
1

collectd 输入插件自 1.4 版以来已被弃用,以支持将 udp 输入插件与 collectd 编解码器一起使用。collectd 编解码器已重构,不存在此问题。它保留事件之间的 type_instance 直到被覆盖。

于 2014-11-04T16:30:36.553 回答