使用 Telegraf 网关
作者:Rick Brown / 用例, 产品, 开发者
2019 年 11 月 18 日
导航至
如果您在贸易展上遇到 InfluxData,或者我们为您提供演示,您可能会看到名为“Rick’s House”的仪表板。我就是那个“Rick”,这就是我将数据发送到 InfluxDB Cloud 的方式,目前看起来是这样的
我的家庭网络包含许多服务器(其中许多是 Proxmox 中的 LXC 容器)、许多软件组件(Node-Red、MQTT、MariaDB 等)以及各种智能家居传感器(SmartThings、小米、宜家)。它已经发展了很多年,我现在发现我想在一个地方监控整个设置,因为如果不监控一切,我就无法可视化正在发生的事情,并且如果不可视化正在发生的事情,就很难理解要执行哪些自动化或我可能需要做什么维护。这是一个长期运行的虚荣项目,我在旅程中发现了 InfluxDB。部分原因是我发现我在实施该软件时“达到惊艳效果的时间”如此之快,以至于我申请加入 InfluxData!
所以,我想从存储在 InfluxDB 中的数据可视化我的家庭网络。我希望所有内容都直接写入我的本地 InfluxDB OSS 实例,但我也希望能够写入远程实例,例如 InfluxDB Cloud。我还希望这适用于比我的更大的用例。为此,有一些限制
- InfluxDB Cloud 只能接受 HTTP 摄取。任何 UDP 消息(Proxmox 将 UDP 写入 InfluxDB 端点)都会在通过互联网之前被丢弃。
- 用户名和密码可能会更改,因此我需要在 LAN 上的每台机器上编辑每个 Telegraf 配置文件。
- 访问令牌可能会随着时间的推移而更改(尤其是在我迁移到 InfluxDB Cloud v2 时),因此我需要在 LAN 上的每台机器上编辑每个 Telegraf 配置文件。
- 我在企业网络中遇到过这样的情况:我必须经过漫长的安全流程才能从数据中心的某个主机打开一个传出的 TCP 端口。如果我需要为许多主机执行此操作才能将 Telegraf 数据发送到远程 InfluxDB,则安全许可的经过时间将相应更长。
- 我想高效地将数据发送到 InfluxDB 的远程实例。这意味着我应该考虑像批量处理输出这样的概念。如果我使用 Telegraf 网关写入 InfluxDB,则可以在该整理器中配置批量处理和相关设置,并且这些设置用于所有写入。如果我直接从客户端库写入 InfluxDB,则每个客户端库可能都有不同的批量处理机制,因此我需要在多个位置配置它。
如果我可以将所有更新整理到一个地方,则上述所有管理问题都将消失。
因此,实施 Telegraf 的中间实例(Telegraf 网关)是这些用例的良好解决方案。要创建它,我需要做一些事情
-
- 安装 Telegraf 的容器
- 为 UDP 和 HTTP 启用 Telegraf 输入
- 为我要写入数据的位置启用 Telegraf 输出
所以,我需要为我的 Telegraf 网关创建一个配置。Telegraf 从 /etc/telegraf/telegraf.conf
和 /etc/telegraf/telegraf.d/.conf
读取默认配置,所以让我们创建这些。
首先,这是我的 /etc/telegraf/telegraf.conf 用于全局设置
[[global_tags]]
[[agent]]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "3s"
flush_interval = "10s"
flush_jitter = "5s"
precision = ""
debug = false
quiet = false
logfile = "/var/log/telegraf/telegraf.log"
logfile_rotation_interval = "0d"
logfile_rotation_max_size = "1MB"
logfile_rotation_max_archives = 5
hostname = ""
现在是一些特定的配置文件,用于为 Telegraf 提供充当 InfluxDB 服务器的端点
/etc/telegraf/telegraf.d/socket_listener.conf
[[inputs.socket_listener]]
service_address = "udp://:8089"
/etc/telegraf/telegraf.d/influxdb_listener.conf
# Influx HTTP write listener
[[inputs.influxdb_listener]]
service_address = ":8086"
read_timeout = "10s"
write_timeout = "10s"
max_body_size = "500MiB"
max_line_size = "64KiB"
database_tag = "bucket_name"
请注意上面配置中 database_tag = "bucket_name"
的使用。当我使用其 URL 直接写入 InfluxDB HTTP 端点(我从 Node-Red 执行此操作)时,我选择要写入的数据库。我不希望丢失此信息,因此 Telegraf 将其存储在名为 bucket_name 的标签中。当然,我不希望将其作为标签发送到 InfluxDB,因为它会毫无目的地增加我的 基数,因此输出配置将需要删除它。Telegraf 通过配置行 exclude_database_tag = true
来实现这一点。这是输出配置
/etc/telegraf/telegraf.d/output_influxdb.conf
# Local InfluxDB
[[outputs.influxdb]]
urls = ["http://ip_address_of_local_InfluxDB_server:8086"]
database_tag = "bucket_name"
exclude_database_tag = true
# SE Cloud
[[outputs.influxdb]]
urls = ["https://FQDN_of_Influx_Cloud:8086"]
database = "database_name_to_write_to"
username = "my_username"
password = "my_password"
timeout = "30s"
# Cloud 2 instance
[[outputs.influxdb_v2]]
urls = ["https://FQDN_of_Influx_Cloud_2"]
token = "The_Token_Generated_within_Influx_Cloud_2"
organization = "my_registered_email_address_on_Influx_Cloud_2"
bucket = "my_bucket_to_write_to"
此时,这给了我一个工作的 Telegraf 网关。但是,它也给了我一个额外的东西来监控我的 LAN,因此捕获内部 Telegraf 指标似乎是应该做的事情。由于这是一个 LXC 容器,并且我想以相同的方式监控我的所有容器,因此我应该添加我常用的 OS 监控配置集。我不应该启用 SMART 监控或温度监控,因为这些应该来自我运行容器的底层服务器。此外,如果这是一个 Windows 机器而不是 LXC 容器,我希望用“win_processes”和“win_perf_counters”替换“processes”和“system”。这些是我尝试在我的仪表板中包含的每个服务器上使用的默认值
/etc/telegraf/telegraf.d/cpu.conf
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
/etc/telegraf/telegraf.d/disk.conf
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.diskio]]
/etc/telegraf/telegraf.d/internal.conf
[[inputs.internal]]
collect_memstats = true
/etc/telegraf/telegraf.d/kernel.conf
[[inputs.kernel]]
# no configuration
/etc/telegraf/telegraf.d/mem.conf
[[inputs.mem]]
# no configuration
/etc/telegraf/telegraf.d/net.conf
[[inputs.net]]
/etc/telegraf/telegraf.d/swap.conf
[[inputs.swap]]
# no configuration
最后两个部分用于捕获 Linux 指标 - 请参阅上面提到的 Windows 指标的等效项。
/etc/telegraf/telegraf.d/processes.conf
[[inputs.processes]]
# no configuration
/etc/telegraf/telegraf.d/system.conf
[[inputs.system]]
## Uncomment to remove deprecated metrics.
# fielddrop = ["uptime_format"]
所以现在 Telegraf 将写入我的所有三个输出,整理来自我常用的三种输入类型(Telegraf、HTTP 自定义端点、UDP)的数据。
这就是我的 Telegraf 网关的样子,显示系统视图
我将在一段时间内像这样运行我的 Telegraf 实施,以查看这是否满足我的需求,或者是否需要额外的配置。如果您像这样部署 Telegraf,或者使用其他方法通过 Telegraf 将您的数据输入到 InfluxDB 中,请告诉我 - 我对 Telegraf 部署模式感兴趣!