0

有什么方法可以将从 Telegraf 收集的指标发送到 FluentD,然后发送到 InfluxDB?

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

4

1 回答 1

0

虽然使用一些可用的 FluentD 可能是可行的,尽管输出插件已经过时,例如InfluxDB-Metrics,但我无法让插件正常工作,而且它已经六年多没有更新了,所以它可能不适用于较新版本的 FluentD。

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

这样做的警告是 JSON 数据是嵌套的,并且没有为 InfluxDB 正确格式化。解决方法是使用Fluent Bit 中的嵌套过滤器来“提升”嵌套数据格式,并为 InfluxDB 正确重新格式化。

以下是磁盘空间的示例,它不是 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

注意:这只是我自己的概念证明的一个简单尴尬的配置

于 2020-02-17T18:04:08.887 回答