Приложение Akka не запускается с Kamon, при условии, что aspectjweaver является javaagent во время запуска
Я пытаюсь запустить приложение Akka Kamon, передав aspectjweaver.jar
подать в javaagent
, Однако, когда я прохожу javaagent
чтобы запустить файл JAR приложение не запускается.
Вот что я сделал:
1.application.conf
:
kamon {
tick-interval = 10 seconds
track-unmatched-entities = yes
influxdb {
hostname = "localhost"
port = 8086
database = "test-metrics"
application-name = "testapp"
authentication {
user = "abc"
password = "abcxyz"
}
subscriptions {
histogram = ["**"]
min-max-counter = ["**"]
gauge = ["**"]
counter = ["**"]
trace = ["**"]
trace-segment = ["**"]
akka-actor = ["**"]
akka-dispatcher = ["**"]
akka-router = ["**"]
system-metric = ["**"]
http-server = ["**"]
}
}
metric {
filters {
# actors we should monitor
akka-actor {
includes = ["**"]
excludes = []
}
akka-router {
includes = ["**"]
excludes = []
}
akka-dispatcher {
includes = ["*/user/*"]
excludes = []
}
akka-http {
includes = ["**"]
excludes = []
}
trace {
includes = ["**"]
excludes = []
}
}
}
modules {
kamon-log-reporter.auto-start = yes
kamon-system-metrics.auto-start = yes
kamon-akka.auto-start = yes
}
}
2.build.sbt
:
val kamonVersion = "0.6.1"
val akkaVersion = "2.4.14"
"io.kamon" %% "kamon-core" % kamonVersion ,
"io.kamon" % "kamon-akka_2.11" % kamonVersion,
"io.kamon" % "kamon-akka-remote_akka-2.4_2.11" % kamonVersion ,
"io.kamon" %% "kamon-statsd" % kamonVersion,
"io.kamon" %% "kamon-datadog" % kamonVersion,
"io.kamon" %% "kamon-log-reporter" % kamonVersion,
"io.kamon" %% "kamon-system-metrics" % kamonVersion,
"io.kamon" %% "kamon-influxdb" % "0.6.7",
"org.aspectj" % "aspectjweaver" % "1.8.9",
"org.aspectj" % "aspectjrt" % "1.8.9"
aspectjSettings
javaOptions in run <++= AspectjKeys.weaverOptions in Aspectj
fork in run := true
val aopMerge = new sbtassembly.MergeStrategy {
val name = "aopMerge"
import scala.xml._
import scala.xml.dtd._
def apply(tempDir: File, path: String, files: Seq[File]): Either[String, Seq[(File, String)]] = {
val dt = DocType("aspectj", PublicID("-//AspectJ//DTD//EN", "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"), Nil)
val file = MergeStrategy.createMergeTarget(tempDir, path)
val xmls: Seq[Elem] = files.map(XML.loadFile)
val aspectsChildren: Seq[Node] = xmls.flatMap(_ \\ "aspectj" \ "aspects" \ "_")
val weaverChildren: Seq[Node] = xmls.flatMap(_ \\ "aspectj" \ "weaver" \ "_")
val options: String = xmls.map(x => (x \\ "aspectj" \ "weaver" \ "@options").text).mkString(" ").trim
val weaverAttr = if (options.isEmpty) Null else new UnprefixedAttribute("options", options, Null)
val aspects = new Elem(null, "aspects", Null, TopScope, false, aspectsChildren: _*)
val weaver = new Elem(null, "weaver", weaverAttr, TopScope, false, weaverChildren: _*)
val aspectj = new Elem(null, "aspectj", Null, TopScope, false, aspects, weaver)
XML.save(file.toString, aspectj, "UTF-8", xmlDecl = false, dt)
IO.append(file, IO.Newline.getBytes(IO.defaultCharset))
Right(Seq(file -> path))
}
}
assemblyMergeStrategy in assembly := {
case m if m.toLowerCase.endsWith("manifest.mf") =>
MergeStrategy.discard
case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard
case m if m.toLowerCase.matches("meta-inf.*\\.properties") => MergeStrategy.discard
case PathList("META-INF", "aop.xml") => aopMerge
case PathList(ps @ _*) if ps .last endsWith ".txt.1" => MergeStrategy.first
case "reference.conf" => MergeStrategy.concat
case "application.conf" => MergeStrategy.concat
case "logback.xml" => MergeStrategy.concat
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
3.project/plugins.sbt
:
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.0-M8")
addSbtPlugin("com.typesafe.sbt" % "sbt-aspectj" % "0.10.0")
4.Если я запускаю файл jar сборки, не передавая javaagent
тогда приложение работает, но я не могу видеть метрики актера.
java jar ./target/scala-2.11/app.jar
It seems like your application was not started with the -javaagent:/path-to-aspectj-weaver.jar option but Kamon detected
the following modules which require AspectJ to work properly:
kamon-akka, kamon-scala, kamon-akka-remote
If you need help on setting up the aspectj weaver go to http://kamon.io/introduction/get-started/ for more info. On the
other hand, if you are sure that you do not need or do not want to use the weaver then you can disable this error message
by changing the kamon.show-aspectj-missing-warning setting in your configuration file.
[INFO] [09/24/2017 14:05:05.815] [main] [LogReporterExtension(akka://kamon)] Starting the Kamon(LogReporter) extension
[INFO] [09/24/2017 14:05:05.826] [main] [DatadogExtension(akka://kamon)] Starting the Kamon(Datadog) extension
[INFO] [09/24/2017 14:05:05.846] [main] [InfluxDBExtension(akka://kamon)] Starting the Kamon(InfluxDB) extension
[INFO] [09/24/2017 14:05:05.863] [main] [StatsDExtension(akka://kamon)] Starting the Kamon(StatsD) extension
[INFO] [09/24/2017 14:05:05.880] [main] [SystemMetricsExtension(akka://kamon)] Starting the Kamon(SystemMetrics) extension
....
....
....
[INFO] [09/24/2017 14:05:15.875] [kamon-akka.actor.default-dispatcher-11] [akka://kamon/user/kamon-log-reporter]
+--------------------------------------------------------------------------------------------------+
| |
| CPU (ALL) |
| |
| User (percentage) System (percentage) Wait (percentage) Idle (percentage) |
| Min: 8 Min: 15 Min: 0 Min: 0 |
| Avg: 42.0 Avg: 23.0 Avg: 0.0 Avg: 32.0 |
| Max: 81 Max: 32 Max: 0 Max: 64 |
| |
| |
+--------------------------------------------------------------------------------------------------+
[INFO] [09/24/2017 14:05:15.878] [kamon-akka.actor.default-dispatcher-11] [akka://kamon/user/kamon-log-reporter]
+--------------------------------------------------------------------------------------------------+
| |
| Process-CPU |
| |
| User-Percentage Total-Percentage |
| Min: 1 Min: 1 |
| Avg: 35.0 Avg: 37.0 |
| Max: 75 Max: 78 |
| |
+--------------------------------------------------------------------------------------------------+
[INFO] [09/24/2017 14:05:15.883] [kamon-akka.actor.default-dispatcher-11] [akka://kamon/user/kamon-log-reporter]
+--------------------------------------------------------------------------------------------------+
| |
| Network (ALL) |
| |
| Rx-Bytes (KB) Tx-Bytes (KB) Rx-Errors Tx-Errors |
| Min: 1520 Min: 1736 Total: 0 Total: 0 |
| Avg: 1022082.0 Avg: 44473.0 |
| Max: 2244608 Max: 107520 |
| |
+--------------------------------------------------------------------------------------------------+
[INFO] [09/24/2017 14:05:15.884] [kamon-akka.actor.default-dispatcher-11] [akka://kamon/user/kamon-log-reporter] No metrics reported
5. Когда я запускаю банку приложения с javaagent
тогда он не запускается.
java jar -javaagent:"./aspectjweaver-1.8.9.jar" ./target/scala-2.11/app.jar
objc[12601]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
max memory :5726797824
INFO [main] Kamon$Instance - Initializing Kamon...
Exception in thread "main" org.aspectj.lang.NoAspectBoundException: Exception while initializing akka.kamon.instrumentation.ActorLoggingInstrumentation: java.lang.AbstractMethodError: akka.kamon.instrumentation.ActorLoggingInstrumentation.kamon$trace$logging$MdcKeysSupport$_setter_$traceTokenKey_$eq(Ljava/lang/String;)V
at akka.kamon.instrumentation.ActorLoggingInstrumentation.aspectOf(ActorLoggingInstrumentation.scala:1)
at akka.event.Logging$Debug.<init>(Logging.scala:805)
at akka.event.LoggingBus$class.startStdoutLogger(Logging.scala:93)
at akka.event.EventStream.startStdoutLogger(EventStream.scala:28)
at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:772)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:245)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:288)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:263)
at kamon.Kamon$Instance._start$lzycompute(Kamon.scala:61)
at kamon.Kamon$Instance._start(Kamon.scala:58)
at kamon.Kamon$Instance.start(Kamon.scala:69)
at kamon.Kamon$.start(Kamon.scala:37)
at com.test.app.Profiles$.delayedEndpoint$com$test$app$Profiles$1(Profiles.scala:78)
at com.test.app.Profiles$delayedInit$body.apply(Profiles.scala:32)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
at scala.App$class.main(App.scala:76)
at com.test.app.Profiles$.main(Profiles.scala:32)
at com.test.app.Profiles.main(Profiles.scala)
Caused by: java.lang.AbstractMethodError: akka.kamon.instrumentation.ActorLoggingInstrumentation.kamon$trace$logging$MdcKeysSupport$_setter_$traceTokenKey_$eq(Ljava/lang/String;)V
at kamon.trace.logging.MdcKeysSupport$class.$init$(MdcKeysSupport.scala:26)
at akka.kamon.instrumentation.ActorLoggingInstrumentation.<init>(ActorLoggingInstrumentation.scala:25)
at akka.kamon.instrumentation.ActorLoggingInstrumentation.ajc$postClinit(ActorLoggingInstrumentation.scala:1)
at akka.kamon.instrumentation.ActorLoggingInstrumentation.<clinit>(ActorLoggingInstrumentation.scala:1)
... 22 more