使用 Telegraf 网关

导航到

如果您在交易会上遇到 InfluxData,或者我们为您提供演示,您可能会看到名为“Rick 的家”的仪表板。我就是那个“Rick”,这就是我将我的数据发送到 InfluxDB Cloud 的方式,目前看起来是这样的

Sending data to InfluxDB Cloud

我的家庭网络包含许多服务器(其中许多是 Proxmox 中的 LXC 容器),许多软件组件(Node-Red、MQTT、MariaDB 等),以及各种智能家居传感器(SmartThings、小米、IKEA)。它已经发展了多年,现在我发现在一个地方监控整个系统,因为没有监控,我就无法可视化发生的事情,而没有可视化发生的事情,就难以理解要执行哪些自动化或可能需要进行的维护。这是一个长期的自豪项目,我在旅途中发现了 InfluxDB。部分原因是我发现我实现软件的“变得酷炫”速度非常快,所以我申请加入了 InfluxData!

因此,我想从存储在 InfluxDB 中的数据可视化我的家庭网络。我想一切直接写入我的本地 InfluxDB OSS 实例,但我也想能够写入远程实例,例如 InfluxDB Cloud。我还想让它能够用于比我更大的用例。为此,有一些限制

  • InfluxDB Cloud 只能接受 HTTP 导入。任何 UDP 消息(Proxmox 将 UDP 写入 InfluxDB 终端)在通过互联网之前将被丢弃。
  • 用户名和密码可能会更改,因此我需要编辑我局域网上的每台机器上的每个 Telegraf 配置文件。
  • 访问令牌可能会随时间变化(特别是当我迁移到 InfluxDB Cloud v2 时),因此我需要编辑我局域网上的每台机器上的每个 Telegraf 配置文件。
  • 我在企业网络中拥有实例,我必须通过长时间的安全流程从数据中心的主机打开一个出站 TCP 端口。如果我需要为许多主机执行此操作以将 Telegraf 数据发送到远程 InfluxDB,则安全审查所需的时间将相应更长。
  • 我想高效地将数据发送到远程 InfluxDB 实例。这意味着我应该考虑批量输出等概念。如果我用 Telegraf 网关写入 InfluxDB,可以在该合并器中配置批量和相关设置,并且这些设置用于所有写入。如果我从客户端库直接写入 InfluxDB,每个库可能都有不同的批量机制,因此我需要在多个地方进行配置。

如果我可以将所有更新汇总到一个地方,上述所有管理都消失了。

因此,实施 Telegraf 中间实例——一个 Telegraf 网关——是这些用例的好解决方案。为此,我需要做一些事情

    1. 安装 Telegraf 容器
    2. 启用 Telegraf 输入 以 UDP 和 HTTP
    3. 启用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容器,并且我想以相同的方式监控所有容器,我应该添加我常用的操作系统监控配置。我不应该启用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 gateway

我将这样运行我的Telegraf实现一段时间,以查看它是否满足我的需求,或者是否需要额外的配置。如果您以这种方式部署Telegraf,或使用其他方式通过Telegraf将数据传输到InfluxDB,请告诉我 - 我对Telegraf部署模式很感兴趣!