Telegraf 1.15 版本新功能:Starlark、execd、Go、NGINX、网络监控、Redfish、New Relic、MongoDB 及更多

导航至

上周,我们发布了 Telegraf 1.15,其中包含用于网络监控的新插件和大量处理器,以帮助您进行数据摄取。所有软件包均使用 Go 1.14.5 编写。

如果没有 50 多位社区成员的贡献,这一切都无法完成,他们贡献了插件编写、错误修复、代码审查以及其他一切,以帮助使 Telegraf 变得更好!

以下是 Telegraf 1.15 中发布的新插件和功能的快速概览。

telegraf 1.15 what's new features

如何在 Telegraf 中运行 Starlark

我们新的 Starlark 处理器插件 是一款令人兴奋的新处理器,它使用户能够灵活地使用类似于 PythonStarlark 语言 在 Telegraf 中执行各种操作。

我们对这个插件感到非常兴奋,因为我们收到了很多关于 Telegraf 中数学计算能力的需求。借助此插件,您现在可以在 Telegraf 中访问各种算术、逻辑和字符串函数。使用 Starlark 处理器,您可以在将数据发送到 InfluxDB 之前,在 Telegraf 中对数据执行实时聚合(minmax)。现在这一切都可以通过配置完成。

工作原理如下:Telegraf Starlark 处理器为每个匹配的指标调用一个 Starlark 函数,从而实现自定义的程序化指标处理。Starlark 语言是 Python 的一种方言,对于有 Python 经验的人来说会很熟悉。

这是一个物联网示例,由一位社区成员请求,他希望根据从 Telegraf Modbus 输入插件 读取的电流和电压字段在本地计算功率。处理器中的 Starlark 函数,用于将两个 Telegraf 指标相乘,如下所示

[[processors.starlark]]
  # Reads the Starlark script embedded
  source = '''
def apply(metric):
    # Get the field called current and put into variable I
    I = metric.fields['current']
    # Get the field called voltage and put into variable V
    V = metric.fields['voltage']
    # Create a new field, power, which is I times V
    metric.fields['power'] = I * V
    # Return power as part of your Telegraf metrics stream
    return metric

关于 Starlark 还有很多可以说的,因此,如果能够在 Telegraf 中进行数学运算引起您的兴趣,请查看这篇关于 如何在 Telegraf 中使用 Starlark 的博客。

确保 Telegraf 始终发送字段

新的 Defaults 处理器插件 使您可以确保某些字段始终存在于您的指标中,并具有指定的默认值。这也称为“间隙填充”,解决了数据丢失的问题,这可能是由于计划外停机、系统维护、网络中断、传感器故障或其他原因造成的。

例如,您可以确保在指标中默认插入一个 status_code 字段,其值为 N/A,当指标中未设置该字段时。要进行设置,请将以下内容放入您的 Telegraf 配置文件中

[[processors.defaults]]
 [processors.defaults.fields]
 status_code = "N/A"

您将始终看到 status_code 字段在您的指标中,即使它最初未被 Telegraf 输入插件捕获。以下是您的线路协议输出差异的示例,首先是没有处理器插件的情况,然后是使用处理器插件的情况

diff
- lb,http_method=GET cache_status=HIT,latency=230
+ lb,http_method=GET cache_status=HIT,latency=230,status_code="N/A"

对于数值,您可以提供“功能性空值”作为默认值,在对数据执行分析查询时可以轻松排除该值。

非常感谢 Jeff Registre 的贡献!

如何在 Telegraf 中运行外部程序

为了补充 1.14 版本中的 Execd 输入插件,我们在 Telegraf 1.15 中发布了一个 Execd 输出处理器 插件。与 Go 的 execd 命令 概念类似,所有 execd 插件都旨在运行任何编程语言的外部程序——包括 Node、Python、Java、Ruby、shell 脚本、Golang 和 Rust——这些程序可以在运行 Telegraf 的服务器上在 Linux、Windows 或 Mac 系统上运行。

Execd 插件的工作原理:外部程序作为守护程序运行并持续保持运行状态。这与现有的 Telegraf Exec 插件 不同,后者运行一次外部程序然后停止。还有一个 Go Shim,它可以轻松地将内部输入、处理器或输出插件从主 Telegraf 存储库中提取到独立的存储库中。

telegraf execd<figcaption> 外部插件如何与其各自的 execd 插件交互</figcaption>

execd 插件的优点在于它们为 Telegraf 带来了极大的灵活性。要了解我的意思,请查看您可以使用 execd 的初始 外部插件列表

如果您希望为我们的外部插件做出贡献,请随时按照 贡献指南 步骤,并提交 PR。未来将会有更多外部插件,但我们希望您尝试使用 execd 插件并开始构建自己的插件!

为您的 Go 环境设置 Telegraf 路径

假设您需要告知 Telegraf 有关您的 Go 环境中的路径,以便 execd 可以找到它需要的 Go 程序。为此,您可以使用 Filepath 处理器插件,它将 filepath 包 “path/filepath” 中的某些 Go 函数映射到标签和字段值。

telegraf 1.15 go influxdb filepath processor

已实现的函数包括

  • Base(可通过 [[processors.filepath.basename]] 访问)
  • Rel(可通过 [[processors.filepath.basename]] 访问)
  • Dir(可通过 [[processors.filepath.dir]] 访问)
  • Clean(可通过 [[processors.filepath.clean]] 访问)
  • ToSlash(可通过 [[processors.filepath.toslash]] 访问)

感谢 Andrés Álvarez 构建了这个插件!

在 Telegraf 指标中包含 SNMP 网络接口名称

在收集网络性能可观察性指标时,在指标流中包含网络接口名称(例如 en0)非常有用。为此,请使用 Telegraf 网络接口名称处理器插件ifname 处理器插件使用 SNMP 查找网络接口名称。在您的处理器配置中,您将设置包含您要查找的接口编号的标签名称以及服务名称的输出目标。在 此示例 中,ifIndex = 2 将查找并返回 eth0 的字段 ifname,如果您在 Telegraf 配置文件中包含以下内容

[[processors.ifname]]
 tag = "ifIndex"
 dest = "ifName"

将端口号映射到 Telegraf 指标中的服务名称

在查看网络监控指标时,将 TCP 和 UDP 端口号 解析为众所周知的服务名称会很有帮助。例如,知道端口 3306 上有很多网络流量并没有什么帮助——是什么服务驱动了所有这些流量?但是,如果您可以自动将端口 3306 解析为 MySQL,那么这将为您提供深入了解流量峰值原因所需的信息。

要将端口号映射到线路协议中已注册的服务名称,请使用新的 Telegraf 端口名称查找处理器插件。与 ifname 处理器类似,您需要配置包含端口号的标签和服务名称的输出目标。在 此示例 中,端口 80 对应于 HTTP 端口,将在 service 字段中返回 http

[[processors.port_name]]
 ## Name of tag holding the port number
 # tag = "port"
 ## Name of output tag where service name will be added
 # dest = "service"
 ## Default tcp or udp
 # default_protocol = "tcp"

将 IP 地址解析为 Telegraf 指标中的域名

如果您正在查看具有 IP 地址的网络可观察性遥测数据,则将其解析为域名会很有帮助。为此,请使用 Telegraf 反向 DNS 处理器插件。此处理器对包含 IP 地址的标签(或字段)执行 反向 DNS 查找。与此版本中的其他查找处理器一样,您将配置包含您要查找的 IP 地址的标签或字段以及 DNS 名称的输出位置。

如何使用 Telegraf 监控 NGINX

NGINX 是一款流行的开源 Web 服务器、反向代理、缓存、负载均衡器和媒体流服务器。因此,Telegraf 有多个插件可供选择来监控 NGINX

telegraf 1.15 new capabilities nginx

在 Telegraf 1.15 中,我们通过 NGINX Stream STS(服务器流量状态)输入插件 为 NGINX 可观察性添加了另一组功能:此插件使用外部 虚拟主机流量状态模块 收集 NGINX 状态,类似于这样

nginx stream traffic status

这是一个 NGINX 模块,提供对流主机状态信息的访问,并包含服务器、上游和缓存的当前状态。这类似于 NGINX Plus 的实时活动监控。感谢 Zinovii Dmytriv 开发此插件。

如何使用 Telegraf 监控 Redfish

Redfish 是用于 REST 接口的协议规范,用于管理服务器、存储、网络和融合基础设施。在 Telegraf 1.15 中,我们现在有了一个 Redfish 输入插件。此插件收集物理服务器指标(如 CPU 温度、风扇速度、电源、电压、主机名和位置详细信息(数据中心、位置、机架和机房))的指标和状态信息,这些硬件服务器已启用 DMTF 的 Redfish。感谢贡献此插件的 Sarvani Konda

telegraf 1.15 redfish monitoring<figcaption> 图片来源:Thomas Jensen,来自 Unsplash</figcaption>

New Relic 和 Telegraf

许多监控工具本质上都是单行道:数据进入,但不会流出。当您尝试充分利用时间序列数据时,这种限制会使事情变得非常困难。

因此,Telegraf 有许多输出,以便您可以避免 供应商锁定。因此,我们很高兴宣布我们在 Telegraf 1.15 中最新的插件 New Relic 输出插件。此输出插件使用 New Relic 的 New Relic Insights Metrics API 写入数据。一旦您拥有 New Relic Insights API 密钥,配置应该很简单,您可以开始写入数据。

所有 Telegraf 插件都支持双写。因此,如果您想将指标数据同时发送到 New Relic 和(例如)InfluxDB 1.x InfluxDB 2.0,只需将这些输出插件添加到您的 Telegraf 配置中即可

# Write to New Relic Insights
[[outputs.newrelic]]
 ## New Relic Insights API key
 insights_key = "insights api key"
 ## Prefix to add to add to metric name for easy identification.
 # metric_prefix = ""
 ## Timeout for writes to the New Relic API.
 # timeout = "15s"

# Write to InfluxDB v 1.x
[[outputs.influxdb]]
 ## The full HTTP or UDP URL for your InfluxDB instance.
 urls = ["http://127.0.0.1:8086"]
 ## The target database for metrics; will be created as needed.
 # database = "telegraf"
 ## HTTP Basic Auth
 # username = "telegraf"
 # password = "metricsmetricsmetricsmetrics"

# Write to InfluxDB 2.0
[[outputs.influxdb_v2]]
 ## The URLs of the InfluxDB cluster nodes.
 urls = ["http://127.0.0.1:9999"]
 ## Token for authentication.
 token = "fill_in_your_token"
 ## Organization is the name of the organization you wish to write to.
 organization = "fill_in_your_org"
 ## Destination bucket to write into.
 bucket = "fill_in_your_bucket"

这使用了 InfluxDB 1.x 的 Telegraf 输出插件InfluxDB 2.0 的 Telegraf 输出插件,并且是所有 Telegraf 输出 插件都可用的多写模式的示例,让您可以自由地在任何需要的地方使用您的数据。

感谢 @hsinghkalsi 开发此插件。

...还有更多!

当然,在每个次要版本中,不仅有令人兴奋的插件,而且 Telegraf 社区和我们的团队还致力于对现有产品进行大量功能和增强。其中一些增强功能包括

查看 Telegraf 全面的功能和错误列表 以了解改进之处。然后继续 下载 或升级到 Telegraf 1.15 以试用这些新插件和功能。与往常一样,请随时联系我们或在我们的 Telegraf GitHub 页面InfluxDB 社区网站公共 InfluxData Slack 频道 上与社区互动!