0

I'm trying to monitor my akka-http Rest web-service with NewRelic

The application has only one GET url (defined with akka-http)

I have the following configuration in the plugins.sbt

logLevel := Level.Warn
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.4")
addSbtPlugin("com.gilt.sbt" % "sbt-newrelic" % "0.1.4")

I have the following configuration in the 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)

I compile (and deploy) the code with sbt universal:publish, it creates a .zip, inside the .zip there is an executable file.

I pass the newRelic licenceKey by enviroment (NEW_RELIC_LICENSE_KEY)

The program starts and all works fine, the newRelic key is found (because the log dosen't say that it didn't find the key)

The aplication apears in the newRelic monitor system with the correct name

BUT NewRelic dosen't show any metrics

what I have to do to see some metrics on NewRelic?

George C
  • 1,168
  • 13
  • 30

2 Answers2

1

When you specify the value of newrelicAppName as name.toString, you are not doing what you expect.

name is a value of type sbt.SettingKey, this contains details of a setting's name, type, and a short description of what the key is used for.

The type that actually contains a value is an sbt.Setting. You can get a Setting from a SettingKey (in the current project and configuration) by calling the .value method.


So when you set the value like this:

newrelicAppName := name.toString

the value looks something like this:

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

Yes, that is actually a string containing lots of strange characters.


On the other hand, if you used the .value call:

newrelicAppName := name.value

the value then looks like:

$ show newrelicAppName
[info] my-project

My best guess is that New Relic doesn't like application names with strange characters (like dollar signs and ampersands). By setting a more normal string, you made it more likely that New Relic would accept such a name as input.

Note: the default value for newrelicAppName is the name for the containing project, so not setting the value at all in the first example would probably have "just worked" as you would have liked.

Gary Coady
  • 1,196
  • 9
  • 13
  • Hi @Gary, this is exactly what happened when I looked in new relic. There was a strange name with dolar signs, I suspected that the name was not being correctly taken. Despite that, the application was present in new relic, but with no metrics. – George C Mar 31 '16 at 01:13
  • That agrees with my hypothesis then; if it had been `name.value` instead of `name`, all would have been good! – Gary Coady Mar 31 '16 at 15:57
0

I realy don't know what I did to make it work, the changes I made were:

In the build.sbt

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

In the plugin.sbt

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

(I updated de sbt-newrelic version)
(I harcoded the name of the new relic app)
(I specified the version of the Java Agent)

George C
  • 1,168
  • 13
  • 30