akka-http 未在 NewRelic 中显示指标

Posted

技术标签:

【中文标题】akka-http 未在 NewRelic 中显示指标【英文标题】:akka-http not showing metrics in NewRelic 【发布时间】:2016-06-26 03:00:34 【问题描述】:

我正在尝试使用 NewRelic 监控我的 akka-http Rest 网络服务

应用只有一个GET url(用akka-http定义)

我在plugins.sbt

中有如下配置
logLevel := Level.Warn
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.4")
addSbtPlugin("com.gilt.sbt" % "sbt-newrelic" % "0.1.4")

我在build.sbt

中有如下配置
scalaVersion := "2.11.7"
name := "recommender-api"

...blablabla...

libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.4.2"
libraryDependencies += "com.typesafe.akka" % "akka-http-experimental_2.11" % "2.4.2"
libraryDependencies += "com.typesafe.akka" % "akka-http-spray-json-experimental_2.11" % "2.4.2"
libraryDependencies += "com.typesafe.akka" % "akka-slf4j_2.11" % "2.4.2"

newrelicIncludeApi := true
newrelicAppName := name.toString
enablePlugins(JavaServerAppPackaging, UniversalDeployPlugin, NewRelic)

我用 sbt universal:publish 编译(和部署)代码,它会创建一个 .zip,在 .zip 里面有一个可执行文件。

我通过环境(NEW_RELIC_LICENSE_KEY)传递newRelic licenceKey

程序启动,一切正常,找到了newRelic密钥(因为日志并没有说它没有找到密钥)

该应用程序以正确的名称出现在 newRelic 监控系统中

但 NewRelic 不显示任何指标

我必须做什么才能查看 NewRelic 的一些指标?

【问题讨论】:

【参考方案1】:

当您将newrelicAppName 的值指定为name.toString 时,您并没有按预期进行。

namesbt.SettingKey 类型的值,其中包含设置名称、类型的详细信息以及密钥用途的简短描述。

实际包含值的类型是sbt.Setting。您可以通过调用.value 方法从SettingKey(在当前项目和配置中)获取Setting


所以当你像这样设置值时:

newrelicAppName := name.toString

值看起来像这样:

$ show newrelicAppName
[info] sbt.SettingKey$$anon$4@54ec2887

是的,这实际上是一个包含许多奇怪字符的字符串。


另一方面,如果您使用.value 调用:

newrelicAppName := name.value

这个值看起来像:

$ show newrelicAppName
[info] my-project

我的最佳猜测是 New Relic 不喜欢带有奇怪字符(如美元符号和 & 符号)的应用程序名称。通过设置一个更正常的字符串,您可以让 New Relic 更有可能接受这样的名称作为输入。

注意:newrelicAppName 的默认值是包含项目的名称,因此在第一个示例中根本不设置该值可能会像您希望的那样“正常工作” .

【讨论】:

嗨@Gary,这正是我查看新遗物时发生的事情。有一个奇怪的名字,带有美元符号,我怀疑这个名字没有被正确取用。尽管如此,该应用程序仍然存在于新的遗物中,但没有任何指标。 那符合我的假设;如果是name.value 而不是name,一切都会好起来的!【参考方案2】:

我真的不知道我做了什么让它发挥作用,我所做的更改是:

在 build.sbt 中

newrelicVersion := "3.26.1"
newrelicAppName := "recommenders-jobs-api-monitor"

在plugin.sbt中

addSbtPlugin("com.gilt.sbt" % "sbt-newrelic" % "0.1.5")

(我更新了 de sbt-newrelic 版本) (我对新遗物应用程序的名称进行了编码) (我指定了Java Agent的版本)

【讨论】:

以上是关于akka-http 未在 NewRelic 中显示指标的主要内容,如果未能解决你的问题,请参考以下文章

Akka-Http 中的实体是啥?

akka-http:找不到参数解组的隐式值

如何配置 New Relic 插件以显示速率

Akka-http:连接到localhost上的websocket

akka-http 分块响应连接

new Relic - 如何传递自定义字符串