如何使用 FluentD 作为 Telegraf 和 InfluxDB 之间的缓冲区

How to use FluentD as a buffer between Telegraf and InfluxDB

是否有任何方法可以将从 Telegraf 收集的指标传送到 FluentD,然后传送到 InfluxDB?

我知道可以将数据从 FluentD 写入 InfluxDB;但是如何将数据从 Telegraf 发送到 FluentD,基本上使用 FluentD 作为缓冲区(而不是使用 Kafka 或 Redis)?

虽然可以使用一些可用但过时的输出插件来处理 FluentD,例如 InfluxDB-Metrics,但我无法使该插件正常工作并且它尚未更新在六年多的时间里,所以它可能不适用于较新版本的 FluentD。

然而,Fluent Bit 内置了一个 Influxdb 输出,所以我能够让它工作。需要注意的是它没有 Telegraf 插件。所以我找到的解决方案是在 Fluent Bit 中设置一个 tcp input plugin,并设置 Telegraf 在它的输出部分写入 JSON 格式的数据。

这样做的警告是,JSON 数据是嵌套的,并且格式不适合 InfluxDB。解决方法是在 Fluent Bit 中使用 nest filters 来 'lift' 嵌套数据格式,并为 InfluxDB 重新正确格式化。

下面是 disk-space 的示例,它不是 Fluent Bit 指标本身支持的指标,但 Telegraf 本身支持:

@SET me=${HOST_HOSTNAME}

[INPUT]  ## tcp recipe  ## Collect data from telegraf
    Name          tcp
    Listen        0.0.0.0
    Port          5170
    Tag           telegraf.${me}
    Chunk_Size    32
    Buffer_Size   64
    Format        json
[FILTER]  ## rename the three tags sent from Telegraf to prevent duplicates
    Name          modify
    Match         telegraf.*
    Condition Key_Value_Equals name disk
    Rename        fields   fieldsDisk
    Rename        name     nameDisk
    Rename        tags     tagsDisk
[FILTER]  ## un-nest nested JSON formatted info under 'field' tag
    Name          nest
    Match         telegraf.*
    Operation     lift
    Nested_under  fieldsDisk
    Add_prefix    disk.
[FILTER]  ## un-nest nested JSON formatted info under 'disk' tag
    Name          nest
    Match         telegraf.*
    Operation     lift
    Nested_under  tagsDisk
    Add_prefix    disk.
[OUTPUT]  ## output properly formatted JSON info
    Name          influxdb
    Match         telegraf.*
    Host          influxdb.server.com
    Port          8086
    #HTTP_User     whatever
    #HTTP_Passwd   whatever
    Database      telegraf.${me}
    Sequence_Tag  point_in_time
    Auto_Tags     On

注意:这只是我自己概念验证的一个简单笨拙的配置