Go编程语言的性能,易于部署和简单的并发模型是开发人员切换到Go的常见原因。我不太了解,所以我最近转换了一个个人Python项目并开始监控它新的遗物去代理。Using my app as an example, I’ll overview the agent and dig into some of its coolest features, including transactions, segments, and attributes that give me insight into my application’s throughput, error rate, and response time like I used to have with the Python Agent.

也可以看看:最受欢迎的2016年编程语言

概述

Go代理的工作方式与其他新的遗物代理(如PHP或Ruby)的方式有点不同,您将作为库或模块导入的,并且它们“自动上”收集数据。这种魔法是可能的,因为这些语言将挂钩提供给他们的虚拟机,代理用于访问和包装功能。但是,Go是一个编译的语言;它不使用虚拟机。这意味着监控Go应用程序的最佳方法是使用API​​。

虽然这使得Go代理更多的工作要安装,但它提供了巨大的灵活性和控制因仪器而受到控制。它仍然有魔法!只需导入代理并创建应用程序为您提供有关Goroutines,垃圾收集统计信息和内存和CPU使用率的有用运行时信息。

我们甚至为新的遗物APM中的这些指标进行了特殊的“Go Runtime”页面。对于任何Go开发人员来说,它是有用的,可操作的信息,以一目了然。

去运行时指标

去新遗物的运行时指标[点击放大]


报告这些标准的应用程序很容易。首先,下载库GitHub.或通过去弄。将其添加到您的应用程序中进口块,然后在您的中创建配置和应用程序主要的()或者在里面()功能:

配置:= newrelic.newconfig(“您的app name”,“your_license_key”)app,err:= newrelic.newplication(config)

该代理定期记录来自的信息Memstats.结构中的结构运行时套餐。我们已经有几个客户报告说,Goroutines图表已经确定了他们不知道存在的泄漏。虽然Go提供了几种良好的监控工具,但它们只有在一致使用时都是有价值的。将新的遗物集成到您的应用程序中自动监控,并帮助您快速使用每个部署的新问题。

我的例子

你有没有听说过凯文培根六程度的分离游戏?在那种精神,我已经建立了一个叫做的Python应用程序Wikigraph.查询任何两个维基百科的450万页之间的最短路径,我塞进了一个neo4j图表数据库。这允许您回答各种有趣的问题,比如从中获得多少点击格蕾丝料斗寿司?[见帖子的底部。]

格蕾丝料斗图表

当用户输入两个页面名称时,服务器查询较小的sqlite.页面信息的数据库,并查询图表数据库以获取最短路径。然后,它询问图形数据库选择“相邻”页面,汇编图形,并将其传递回前端。

去图表

转换我的Python应用程序变得有趣!我特别喜欢使用可以轻松解释为json的结构并使用Goroutines使我的数据库查询并发。一旦我的应用程序进入,我就准备安装了新的遗物APM代理并开始监控它。

乐器全部这些事!

如前所述,运行时度量标准只是我们去代理可以提供的信息的开头。但是,具有如此多的灵活性,您如何决定乐器什么?您应该收集有关每个功能的信息吗?如果您想要只有一个小型代码块的信息怎么办?

我建议从你最重要的关注领域开始。我决定专注于这两个问题:

  1. 我服务器路线的时间信息是什么?
  2. 数据库中花费的时间细分是多少?

无论您决定先解决什么问题,下一个决定是如何处理您刚刚创建的应用程序结构。您需要在处理程序中访问它,以创建事务和自定义事件。应用程序是否应该是全局变量,也应该将其作为参数传递?答案主要取决于您的开发人员WorldView。

选择全球结构肯定可以方便地获得。但是,传递参数使应用程序是使用它的函数的显式依赖性。代码变得更加模块化,更易于测试,因为您可以在特定测试中交换应用程序。作为第一次通过,我建议制作申请全球,但我不认为我会长期留下它。

交易

什么是去交易?简短的答案是它是你想要的。您可以在路由,函数或仅代码块周围启动和结束交易。在新的遗物领域中,事务传统上等同于服务器请求。对于我的应用程序,我使用了一半的路线来服务前端请求,以便Paradigm对我有意义。

使用新的遗物APM Go代理,您可以启动(并且您必须)的电源显式启动并停止事务。如果您不需要将事务分为特定的代码,推迟陈述是结束交易的便捷方式:

txn:= app.starttransaction(“/查询”,响应器,请求)推迟txn.end()

但等等,还有更多:Go代理有内置的支持请求处理!如果您使用的是HTTP标准库包,您可以使用代理程序的包装器自动启动和结束与请求和响应编写器的事务。这是我为每个路线创建的事务是如何:

http.handlefunc(newrelic.wraphandlefunc(app,“/查询”,queryhandler))

一个重要的限制是每个交易都应仅在单个Goroutine中使用。如果要在新的Goroutine中访问该事务,请为此开始新的事务。

您可能希望访问处理程序中的当前事务以使用段和属性进行有趣的事情。这newrelic.transaction.结构实际上嵌入了响应作者,因此请务必使用该事务代替原始作者。这意味着您可以用简单的方式获取交易类型断言

func queryhandler(w http.rechonewer,r * http.request){如果txn,好的:= w。(newrelic.transaction);好的{txn.noticeError(错误.new(“我的错误消息”))}}

一旦我将应用程序转换为我的应用程序来使用包装器,我检查了新的遗物APM中看起来像的内容:

前5名Web交易

[点击放大]


可悲的是,它不是一个非常彩色的图表,但它确实回答了我的第一个问题:绝大多数时间都花在“/ query”路线中。这是什么时候花了什么时间?在整个路线上的范围交易可能会使重要信息组合。所以让我们使用段挖掘详细信息。

细分是交易的有意义的块。Go代理目前支持外部,数据存储和泛型段味道。我怀疑在数据存储中花在我的应用程序中的查询时间的大部分,所以我开始为每个呼叫添加段。

与交易一样,您负责停止并启动段。即使没有检查交易是否是的,也可以使用段呼叫。如果您的呼叫跨越整个函数调用,则可以使用相当优雅的单行推迟陈述:

defer newrelic.datastoresegmentmentmentment {starttime:newrelic.startsementnow(txn),产品:newrelic.dataStoresqlite,collection:“pagenames_table”,操作:“选择”,} .end()err:= db.queryrow(查询,项目.value).can(和结果)

因为我发现它最容易通过其REST API与Neo4J数据库交互,所以我需要使POST请求而不是使用驱动程序。我用数据存储段包裹了请求(注意我如何将Neo4j添加为新产品):

段:= newrelic.dataStoresegment {starttime:newrelic.startsewarkownow(txn),产品:newrelic.datastoreproduct(“neo4j”),操作:r.operation,}响应,err:= http.post(URL,“应用程序/ JSON”,字节)段.Ente.end()

让我们看看新遗物中的样子。在“/查询”交易下,我发现了时间的细分。正如我所期望的那样,大多数时间都在图表数据库中花费。最短路径查询的总响应时间的50%约为50%,邻居页面查询另有30%。(SQLite呼叫不在此事务中,因为它们由另一个处理程序进行。)

App Server Breakdown.

查询处理程序中的时间细分[点击放大]



此图表回答了我的第二个问题,我可以关注这些数字,因为我进一步优化了查询时间。

属性

最后,我想建立一个新的遗物见解仪表板跟踪一些有趣的路径用户在我的应用程序中找到。

对于那些不熟悉自定义属性的人,它们是您附加到事件的键值对,您可以在Insights中使用。我对数据库时序和路径中的页面特别感兴趣。如果有一个特别长的响应时间,开始和结束页面允许我重现它。

您可以免费获得数据库总持续时间交易事件但是为了添加查询结果,我将页面连接到字符串中为“路径”值:

txn.addattribute(“路径”,路径)

我为开始/结束页面,路径长度以及原始查询添加了其他属性。然后我创建了一个仪表板以探索找到的最新路径,找到最长的路径,以及具有最长响应时间的路径:

见解仪表板

新的遗物洞察仪表板[点击放大]


如果您感到好奇,这是找到最悠久的最短路径的NRQL查询:

从事务中选择Max(长度),其中查询不是空关章查询

我最喜欢的部分是我在Query属性上设置的过滤器,这让我点击一个有趣的路径过滤整个仪表板对于那条路结果。你知道吗?路易斯维尔动物园维基百科页面链接巴西坚果只通过一个其他页面,风信子金刚鹦鹉

这是我用新的遗物APM Go代理站起来和运行的故事。希望它将为您提供如何在您自己的GO应用程序中使用它的想法。我们邀请您尝试一下并告诉我们您对此的看法新的遗物论坛。有关更多详细信息,请查看我们的去代理指南公共文件网站

[答案]三点击。1991年,Grace Hopper获得了国家技术和创新奖章,同样奖项奖励弗雷德里克麦金利琼斯和约瑟夫A. Numero赢得了制冷的进步,这对日本寿司行业的崛起产生了巨大影响。

Gopher Image CC 3.O原创Renee法语。

Erika Arnold在新的遗物上工作在PHP代理团队。一位前生物学家,她在世界各地收集了虫子。现在,她只是喜欢在代码中找到错误。查看帖子

对新遗物博客的写作有兴趣吗?亚搏体育登入网送我们一个球场!!