如何使用 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
注意:这只是我自己概念验证的一个简单笨拙的配置
是否有任何方法可以将从 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
注意:这只是我自己概念验证的一个简单笨拙的配置