在 Windows 上使用 Telegraf

导航至

Telegraf 是一个在您选择的操作系统上运行的代理,安排从各种来源收集指标和事件,然后将它们发送到一个或多个接收器,如 InfluxDB 或 Kafka。对于 InfluxDB,版本 1.x、2.0 以及 InfluxDB Cloud 都受到支持。Telegraf 可以从多个输入中收集信息,并且目前包括200多个插件,用于从多种类型的应用程序中检索信息。它还可以从 OS 中检索有关硬件和软件的信息。

经常被问到的一个问题:在 Windows 机器上运行 Telegraf 的最佳方式是什么?我们的 GitHub 仓库 提供了有关 将 Telegraf 作为 Windows 服务运行 的文档。然而,在这篇文章中,我们将逐步介绍在 Windows 上设置 Telegraf 的步骤,包括如何安全地配置它,以凭证将数据推送到各种 InfluxDB 解决方案。

我们将使用提升的 PowerShell 进程进行安装。

为了运行提升的 PowerShell 会话,打开开始菜单,找到 PowerShell,右键单击它,然后选择“以管理员身份运行”选项。

现在,让我们下载 Windows 的 Telegraf 二进制文件。这些文件可以从 https://portal.influxdata.com/downloads/ 网址获取。下面的示例使用 Invoke-Webrequest PowerShell 命令进行下载

PS> cd ~\Downloads
PS> Invoke-WebRequest https://dl.influxdata.com/telegraf/releases/telegraf-1.80.0_windows_amd64.zip -OutFile telegraf.zip

接下来,让我们将存档提取到 Program Files 文件夹中,这将创建 C:\Program Files\telegraf 文件夹

PS> Expand-Archive .\telegraf.zip 'C:\Program Files\'

然后创建一个名为 conf 的子目录,并将 telegraf.conf 复制为 conf\inputs.conf

PS> mkdir 'C:\Program Files\telegraf\conf'
PS> cd 'C:\Program Files\telegraf\conf'
PS> copy ..\telegraf.conf inputs.conf

telegraf.conf 复制为 conf\inputs.conf

我们将分离文件的输出部分,并专门配置将数据发送到 InfluxDB Cloud。我们将从 inputs.conf 中删除输出部分。编辑文件,删除输入部分之前的所有内容,保留文件中以下行及其内容的开始

###############################################################################
#                                  INPUTS                                     #
###############################################################################

对于编辑文件,建议您从提升的 PowerShell 会话开始编辑器——从提升进程启动的编辑器将能够写入文件。

现在,创建 conf\outputs.conf 文件,指定数据应该发送到何处。

在我的情况下,我希望输出到我的InfluxDB Cloud账户,因此文件将包含

[[outputs.influxdb_v2]]
  # URL to InfluxDB cloud or your own instance of InfluxDB 2.0
  urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"]
  ## Token for authentication.
  token = "$INFLUX_TOKEN"
  ## Organization is the name of the organization you wish to write to; must exist.
  organization = "$INFLUX_ORG"
  bucket = "$INFLUX_BUCKET"

对于将数据发送到其他InfluxDB实例和/或版本,输出部分可能不同。此外,请注意Telegraf可以将数据发送到多个目的地,例如InfluxDB 1.x和InfluxDB 2.0。

我们建议将$INFLUX_TOKEN$INFLUX_ORG$INFLUX_BUCKET以及任何其他连接信息替换为您的访问令牌、组织名称、写入数据的InfluxDB桶的名称以及任何其他连接信息。

此时,测试Telegraf是否正常工作是个好主意

PS> .\telegraf --config-directory 'C:\Program Files\telegraf\conf' --test

这应该输出日志,表明telegraf已启动,然后是来自所有输入插件的多行数据。

接下来,让我们确保只有本地系统用户账户可以读取outputs.conf文件,以防止未经授权的用户获取我们的InfluxDB访问令牌。

PS> icacls outputs.conf /reset
PS> icacls outputs.conf /inheritance:r /grant system:r

icacls命令是Microsoft Windows中用于管理对象访问控制列表(ACLs)的内置工具,其详细信息可在此处查看这里

第一个命令删除所有ACLs,并仅从父对象继承权限——在我们的案例中是C:\Program Files\telegraf\conf目录。第二个命令执行多项操作——/reset标志禁用继承,实际上移除了文件的任何ACLs。此时,任何用户都无法访问该文件。第二个标志及其值——/grant system:r——允许内置的Local System账户读取文件。

这样,只有Telegraf服务能够读取有关数据发送位置以及包括令牌在内的配置。

注意:所有具有对Windows机器管理员访问权限的用户都可以更改文件的权限并读取它。然而,这防止了非管理员用户获取信息。

现在我们可以将Telegraf安装为Windows服务,以便它随系统自动启动。为此,只需运行

PS> cd 'C:\Program Files'
PS> .\telegraf --service install --config-directory 'C:\Program Files\telegraf\conf'
PS> net start

这将创建一个Telegraf服务并启动它。输出应包含以下消息

The Telegraf Data Collector Service service is starting.
The Telegraf Data Collector Service service was started successfully.

此时,我们的Telegraf已准备好运行,我们已应用存储和访问发送到InfluxDB的凭据的最佳实践。

注意:作为安全最佳实践的一部分,为Telegraf创建的令牌也应限制其作用域——只能写入应发送的数据的指定桶。

作为替代方案,也可以将$INFLUX_TOKEN$INFLUX_ORG$INFLUX_BUCKET保留在配置文件中。Telegraf服务将读取这些值并将它们替换为环境变量。

默认情况下,Windows服务使用Microsoft Windows设置的所有环境变量以及系统范围内的环境变量。也可以通过设置与该服务相关的注册表键来传递特定于服务的环境变量。

为了将额外的环境变量传递给Telegraf服务,运行注册表编辑器,并将Telegraf设置为系统服务后,转到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\telegraf键。这是Windows维护该特定服务所有信息的地点。

创建一个名为“Environment”的多字符串值注册表项

Nulti-String Value Registry - Telegraf

接下来,编辑注册表的值,将每行设置为Key=Value格式,其中Key是环境变量名称,Value是它的值——例如

Edit registry values - Telegraf

之后,Telegraf服务将设置所需的环境变量。

使用环境注册表的缺点是,管理访问控制列表(ACL)和防止未经授权的用户读取值更为困难。因此,如果可能的话,我们建议在文件系统中写入凭据,并使用配置文件的ACL——因为可以使用Windows资源管理器等工具检查文件的ACL。

此时,我们的Windows服务器、桌面或笔记本电脑现在正在将其性能指标和其他监控数据发送到我们的InfluxDB数据库,并可以从数据资源管理器中查看。InfluxDB还可以使用仪表板显示任何信息。