【问题标题】:Collectd - Randomly Missing 'type_instance' FieldCollectd - 随机缺少“type_instance”字段
【发布时间】:2014-09-04 07:48:15
【问题描述】:

我使用collectd 5.4 以及logstashelasticsearchkibana 在我的Ubuntu 14.04 系统上进行监控。我的collectd 配置文件如下所示:

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 插件后,memory 插件的输出中缺少type_instance 字段。这是前面提到的输出:

{"@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 插件之前一切正常。

【问题讨论】:

    标签: logstash collectd


    【解决方案1】:

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

    1.原因

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

    假设collectd在一个UDP包中依次设置了后面的df和内存数据。

    {"@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 协议之前在 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)

    收件人:
    411 行:@collectd.delete(k) if !['host', '@timestamp', 'type_instance'].include?(k)
    417 行:@collectd.delete(k) if !['host', '@timestamp', 'plugin', 'plugin_instance', 'type_instance'].include?(k)

    修复后问题消失了。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-02
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多