有什么方法可以将从 Telegraf 收集的指标发送到 FluentD,然后发送到 InfluxDB?
我知道可以将 FluentD 中的数据写入 InfluxDB;但是如何将数据从 Telegraf 传送到 FluentD,基本上使用 FluentD 作为缓冲区(而不是使用 Kafka 或 Redis)?
虽然使用一些可用的 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
注意:这只是我自己的概念证明的一个简单尴尬的配置