在 Windows 上使用 Telegraf
作者:Wojciech Kocjan / 用例, 产品, 开发者
2019 年 11 月 22 日
导航至
Telegraf 是一个在您选择的操作系统上运行的代理,它计划从各种来源收集指标和事件,然后将它们发送到一个或多个接收器,例如 InfluxDB 或 Kafka。对于 InfluxDB,支持 1.x、2.0 以及 InfluxDB Cloud 版本。 Telegraf 可以从多个输入收集信息,目前包括 200 多个插件,用于从多种类型的应用程序检索信息。它还可以从操作系统检索有关硬件和软件的信息。
经常被问到的问题之一是:在 Windows 机器上运行 Telegraf 的最佳方式是什么?我们的 GitHub 存储库 提供了关于 将 Telegraf 作为 Windows 服务运行 的文档。但是,在这篇文章中,我们将逐步介绍在 Windows 上安装 Telegraf 的步骤,包括如何安全地配置它,以便使用凭据将数据推送到各种 InfluxDB 解决方案。
我们将使用提升的 PowerShell 进程进行安装。
为了运行提升的 PowerShell 会话,打开“开始”菜单,找到 PowerShell,右键单击它并选择“以管理员身份运行”选项。
现在,让我们下载 Telegraf 的 Windows 二进制文件。这些文件可以从 https://portal.influxdata.com/downloads/ URL 获取。下面的示例使用 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。
我们将分离文件的 outputs 部分,并专门配置将数据发送到 InfluxDB Cloud。我们将从 inputs.conf 中删除 outputs 部分。编辑该文件并删除 inputs 部分之前的所有内容,保留以以下行开始和包括以下行的文件内容
###############################################################################
# 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 实例和/或版本,outputs 部分可能会有所不同。另请注意,Telegraf 可以将数据发送到多个目的地,例如 InfluxDB 1.x 和 InfluxDB 2.0。
我们建议将 $INFLUX_TOKEN、$INFLUX_ORG 和 $INFLUX_BUCKET 以及任何其他连接信息替换为您的访问令牌、组织名称、要写入数据的 InfluxDB bucket 的名称以及任何其他连接信息。
此时,最好测试 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 中对象的访问控制列表 (ACL) 的内置工具,并在 此处 进行了更详细的描述。
第一个命令删除所有 ACL,并且仅从父对象(在我们的例子中为 C:\Program Files\telegraf\conf 目录)继承权限。第二个命令执行多项操作——/reset 标志禁用继承,有效地删除了文件的任何 ACL。此时,任何用户都无法访问该文件。第二个标志及其值——/grant system:r——允许 本地系统 内置帐户读取该文件。
这样,只有 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 创建的令牌也应限制其范围——仅能够将数据写入应发送到的指定 bucket。
作为替代方案,也可以将 $INFLUX_TOKEN、$INFLUX_ORG 和 $INFLUX_BUCKET 保留在您的配置文件中。这些值将被 Telegraf 服务读取并替换为环境变量。
默认情况下,Windows 服务使用 Microsoft Windows 设置的所有环境变量以及系统范围的环境变量。也可以通过在与该服务相关的注册表项中设置特定于服务的环境变量。
为了将其他环境变量传递给 Telegraf 服务,请运行 注册表编辑器 并在将 Telegraf 设置为系统服务后转到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\telegraf 项。这是 Windows 维护此特定服务的所有信息的地方。
创建一个名为 Environment 的多字符串值注册表
接下来,编辑注册表的值,将每一行设置为 Key=Value 格式,其中 Key 是环境变量名称,Value 是其值——例如
之后,Telegraf 服务将设置所需的环境变量。
使用 Environment 注册表的缺点是更难管理 ACL 并防止未经授权的用户读取该值。因此,如果可能,我们建议将凭据写入文件系统并对配置文件使用 ACL——因为也可以使用 Windows 资源管理器等工具检查文件的 ACL。
此时,我们的 Windows 服务器、桌面或笔记本电脑现在正在将其性能指标和其他监控数据发送到我们的 InfluxDB 数据库,并且可以从 数据浏览器 中查看。 InfluxDB 还可以使用 仪表板 显示任何信息。