我们只需4/30即可调整Futureestack注册。条款和条件适用。 现在注册

如何在新的遗物中使用远程ARG的自定义遥测

12分钟阅读

经过吉姆哈根

Harkamal Singh是客户解决方案组中可编程性的经理,亚博直播平台为这篇文章做出了贡献。

随着遥测数据来源的数量继续增长,软件团队正在监测策略中发现差距。为了缓解这一点,越来越多的团队已经转向开源监控工具,用于收集指标,痕迹和其他遥测数据。

但是,许多开源遥测工具需要团队运行和管理多个复杂层 - 一个用于迹线,一个用于指标,一个用于日志,一个用于可视化,以及存储它的数据库。这些工具在高可用性,规模和长期存储方面也受到限制。

作为我们继续努力为您带来摄取,分析,可视化和警报的一部分任何遥测源在一个平台上,我们发布了许多API和SDK从您构建的几乎任何服务都将指标摄入到新的遗物中。现在,使用内置的输出插件Golang etemetry SDK., 你可以加克拉夫到您的扩展工具包。

在这篇文章中,我们将向您展示如何使用Telegraf来摄取数据,并通过通过此发送到新的遗物作为自定义指标新的遗物输出插件用于遥测。

关于克拉夫夫

Telegraf是一种基于服务器的代理,可以从中收集指标输入- 应用程序,数据库,消息队列等等-并将它们写入输出,像新的遗物一样公制API.。TeleGraf的插件驱动的架构和轻量级占用占用件 - 它不需要外部依赖性,如NPM,Pip或Gem - 使其成为从各种输入源收集指标的流行工具;事实上,Telegraf超过了200集成

Since Telegraf is a compiled Go executable, and all plugins are compiled directly into the build, you don’t need to install any of the integration plugins—they are built in. Instead, you need only ensure the Telegraf version that you use has the plugins you need.

以下是快速查看可从Telegraf提供的一些插件类型:

输入源插件

大多数Telegraf的输入插件可以分组如下:

除了为此类商业和开源包提供仪器之外,TeleGraf在其从通用数据源中摄取指标的能力,例如文件和套接字。(我们将在下面的示例配置中看到它的好处。)

Telegraf支持以下通用来源:

输入源格式

使用这些通用输入源,您可以配置通用数据格式接收和发送数据。配置Telegraf时,请考虑其支持的各种输入和输出格式:

  • 杰森:Parses A.杰森对象或对象数组到度量标准字段中。
  • CSV:从包含逗号分隔值的文档中创建指标。
  • 石墨:翻译石墨.桶直接进入Telegraf测量名称,具有单个值字段,无需任何标签
  • 收集:解析CollectD二进制网络协议
  • logfmt.:解析数据logfmt.格式
  • 滴w:解析json oppwizard.单个滴注度注册表的表示
  • :使用类似于Regex的语言解析线分隔的数据
  • Nagios.- 解析Nagios插件的输出

处理器和聚合器插件

除了输入和输出插件外,TeleGraf还支持处理器和聚合器插件,它提供通过系统的数据提供强大的中间浓缩,嬗变和聚合。

我们的示例不会使用这些插件类型,但我们非常鼓励您查看TeleGraf文件要了解如何在工作流中使用这些类型。

您可以设想整个管道,如下所示:

铁路飞行管道

将远程废弃的指标发送给新的遗物

现在,让我们走过我们从消息队列摄取日志数据的示例,并将其发送到新的遗物作为自定义度量。

如果您想遵循,请务必安装TeleGraf 1.15.0版本。你也需要一个新的遗物插入API键将数据发送到度量标准API。

我们的示例将使用以下组件:

  • 来源:我们将使用尾巴输入插件,用于从输入文本文件拖尾日志线
  • 格式:我们将使用JSON并利用允许我们改进管道数据的一些功能。
  • 输出:我们将使用新的新遗物输出插件。

笔记:在此示例中,我们使用的是遗留消息队列系统,没有用于Telegraf的内置输入插件;如果我们使用ActiveMQ或RabbitMQ,我们可以直接使用这些输入插件。

这是我们的管道看起来的样子:

铁路飞车管道向新遗物

再次,我们绕过了处理器和聚合器,但如果我们希望利用它们,它们是选项。

第1步:定义度量标准

在我们进一步进一步之前,它将有助于了解一下涌入的线路协议。输入插件的核心功能是摄取各种格式之一,并发出线路协议的逻辑表示。线协议由测量名称(将其视为名称空间),一组一个或多个字段(通常可以被认为是仪表,定时器或计数器的数字度量值),以及一组或更多标签。这些标记是尺寸元数据,允许您面向概要,组和否则汇总度量。在给定的测量中,系列的数量由集合中的唯一标记值集确定,从而给您指标的基数。

因此,如果我们的示例消息队列将使用以下JSON格式输出日志文件...

{“时间戳”:1588100043050,“Metricname”:“MessageQueue”,“产品”:“遗留MQ”,“ProductionSversion”:“8.0.1.11”,“ConnectionID”:“64688F5E01E47020”,“ClientIpAddress”:“36.1.90.2“,”ClientName“:”JMS Producer“,”QueueManager“:”QM1“,”QueueTopic“:”My.ure.1“,”Putmessage“:3605} {”时间戳“:1588100044203,”Metricname“:“MessageSuceue.operation”,“产品”:“Learacy MQ”,“Productionsversion”:“8.0.1.11”,“ConnectionID”:“64688F5E01F0F77A”,“ClientIpAddress”:“36.1.90.2”,“ClientName”:“JMS消费者“,”queuemanager“:”qm1“,”queueTopic“:”my.ure.1“,”getmessage“:2000} {”时间戳“:1588100060150,”Metricname“:”Messuldue.Operation“,”产品“:”传统MQ“,”ProductVersion“:”8.0.1.11“,”ConnectionID“:”64688F5E01E47020“,”ClientIpAddress“:”36.1.90.5“,”ClientName“:”Fin Producer“,”QueUemanager“:”QM1“,”QM1“,”队列“:”my.ure.2“,”putmessage“:400} {”时间戳“:1588100065285,”Metricname“:”Messiceueue.operation“,”产品“:”遗留MQ“,”ProductVersion“:”8.0。1.11“,”COnnectionId“:”64688F5E01F0F77A“,”客户端“:”客户名称“:”FIN FUNDERER“,”QUEUEMANGER“:”QM1“,”QUEUETOPIC“:”MY.QUEUE.2“,”GETMESSAGE“:400}

......我们将以以下方式解析此公制:

  • 测量名称:源自JSON字段Metricname
  • 标签:从以下JSON字段中派生:
    • 产品
    • Production.
    • connectidid.
    • ClientipAddress.
    • 客户名称
    • queuemanager.
    • 队列

字段将来自任何其他JSON字段(时间戳除外,不会包含在字段集中)。在我们的示例文件中,我们有两个可能发生的不同字段:GetMessage.Putmessage.

第2步:配置Telegraf Agent和Plugin

现在,我们将配置TeleGraf代理和输入插件。

配置代理

在配置输入和输出插件之前,我们需要设置与Telegraf获取,批处理和刷新数据相关的一些基本参数。它超出了此帖子的范围,以提供完整的优化详细信息,但请注意,所有输入插件都会受到这些集合参数的影响。

(请参阅Telegraf文档完整概述配置说明和选项。)

# Configuration for telegraf agent [agent] interval = "1s" # Collect input every 1 second metric_batch_size = 1000 # send 1000 metrics at a time metric_buffer_limit = 10000 # don’t let the internal buffer grow past 10000 flush_interval = "10s" # Flush every 10s or when we have at least 1000 metrics in the buffer

配置输入插件

这就是我们的输入插件配置的样子:

# Config for legacy MQ metrics [[inputs.tail]] # The file we want to tail files = ["/var/log/legacy-mq-metrics.log"] # Don’t reach back to the beginning (it may be a ton of data) from_beginning = false # This plugin automatically adds this tag, we don’t want to emit it. tagexclude = ["path"] # Method used to watch for file changes. Can watch by “inotify” or “poll” watch_method = "poll" data_format = "json" # This will be our Measurement Name json_name_key = "metricName" # Use the timestamp field for our metric timestamp, if omitted Telegraf will insert one automatically. json_time_key = "timestamp" json_time_format = "unix_ms" tag_keys = ["product", "productVersion", "connectionId", "clientIpAddress", "clientName", "queueManager", "queueTopic"]

第3步:测试输入插件

为了确保我们不会向我们的指标后端发送“垃圾”(即,新的遗物),我们可以通过配置文件输出来测试输入插件。此简单配置将允许我们了解我们的指标是否根据我们的输入配置正确处理。

#将Telegraf度量发送给一个文件进行调试[[输出.File]] ##文件写入,“stdout”是一个特殊的处理文件。files = [“/var/log/metrics.out”] USE_BATCH_FORMAT = FALSE DATO_FORMAT =“JSON”

重新启动Telegraf后,我们获得所需的输出 - 成功测试。

{“fields”:{putmessage“:3605},”名称“:”messagequeue.operation“,”标签“:{”clientipaddress“:{”clientipaddress“:”36.1.90.2“,”clientname“:”JMS Producer“,”ConnectionId“:“64688F5E01E47020”,“产品”:“遗留MQ”,“ProductVersion”:“8.0.1.11”,“queuemanager”:“qm1”,“queueTopic”:“my.queue.1”},“时间戳”:1588448293}

第4步:配置新的遗物输出插件

现在我们已准备好配置我们的新遗物输出插件,以向新遗物发送我们的TeleGraf度量。我们可以具有多个输出配置,因此我们将立即留下文件输出配置。

笔记:如果您正在遵循该示例,请不要忘记添加您的插入API键指示的地方。

[[outputs.newrelic]] Insights_key =“[插入API键]”#我们不需要将此作为字段发送。插件将通过度量API发送一个适当的时间戳。FieldDrop = [“时间戳”]

在新遗物中探索我们的TeleGraf度量数据

最后,我们将在我们可以使用的新遗物中导航到我们的帐户图表构建器可视化我们的新度量数据。在这里,我们从我们的消息队列中获得了公制数据的三个视图:

最大GetMessage操作持续30分钟

根据从我们的日志文件发送到新遗物的数据,我们可以描绘我们队列中的消息数。具体而言,这向我们展示了a的最大消息数得到过去30分钟的队列中的任何主题的操作。

nrql查询

从30分钟前选择Metricname ='MessageQueue.Operations.getMessage'的度量标准中选择Max(MessageQueue.operation.getMessage)

Max GetMessage操作最后30分钟按主题分别

如在以前的图表中,这向我们展示了a的最大消息数得到在过去的30分钟内为我们的队列中的任何主题进行操作,但我们使用过面部过滤过滤结果队列属性。

nrql查询

从30分钟前选择Metricname ='MessageQueue.operations.getMessage'的Metric中选择Max(MessageSqueue.operation.getMessage.getMessage)

Max GetMessage操作后续12小时前由主题刻面(显示为表格)

此图表向我们展示了a的最大消息数得到在过去的12小时内为我们的队列中的任何主题进行操作。在这里,我们按照此数据队列属性和一小时的时间分组。

nrql查询

Select Max(MessageSqueue.Operation.getMessage)从Metricname ='MessageQueue.operations.getMessage'自12小时前之前前方队列,小时(时间戳)

将开源遥测带入新遗物

正如您开始修改和自动化工作流程以将遥测从架构中的所有服务和组件中获得遥测,重要的是要意识到遥测数据格式是异构的,有时Quirky,可能需要高度精细和可配置的工具包。通过与SeleGraf等开源工具合作,我们的目标是让您信心新的遗物可以将您的系统创建的所有遥测摄取到我们的遥测数据库中。从那里,你可以在您的其他数据资产的上下文中策划并查看它。

与TeleGraf的新遗物输出插件一起,我们最近提供了一些在我们的顶部内置的开源集成指标和痕迹API,包括集成普罗米修斯开放人口普查和OpenteLemetry千分尺滴w, 和istio.。除了那些,我们还添加了新的遗物Flex.到我们的新遗物架构代理,它允许您在新的遗物基础架构顶部构建“无附加”集成,以从各种服务中收集度量数据。

注册免费新的遗物帐户,并开始终止Telegraf和New Relic