3

I am trying to instrument a java app with prometheus exporter using sbt-native-packager:

This is what I have:

plugin.sbt

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.5.1")

build.sbt

import com.typesafe.sbt.packager.docker.DockerChmodType
dockerChmodType := DockerChmodType.UserGroupWriteExecute
enablePlugins(JavaServerAppPackaging, AshScriptPlugin, DockerPlugin)
settings(moduleName := "my-test")
settings(mainClass in Compile := Some("org.name.demo.stream.MyTestClass"))
dockerBaseImage := "openjdk:8-jre-alpine"
daemonUser in Docker    := "test"

As per the prometheus exporter docs, I would like to instrument the exporter as an java agent:

java -javaagent:./jmx_prometheus_javaagent-0.12.0.jar=8080:config.yaml -jar my-test_2.12-0.1.jar

Is it possible for me to do this instrumentation via sbt-native-packager? Appreciate inputs.

irrelevantUser
  • 1,172
  • 18
  • 35
  • Hi there. There is a section for customization here: https://sbt-native-packager.readthedocs.io/en/v1.5.2/archetypes/java_app/customize.html#via-build-sbt Does this help? – Muki Dec 28 '19 at 08:41
  • I will try this out and update.. Appreciate it.. – irrelevantUser Jan 02 '20 at 22:43

1 Answers1

1

Use https://github.com/sbt/sbt-javaagent In plugins.sbt

addSbtPlugin("com.lightbend.sbt" % "sbt-javaagent" % "0.1.6")

then in build.sbt

val MyAppSettings = Seq(
  name := "My",
  dockerBaseImage := "adoptopenjdk:11-jre-hotspot",
  mainClass := Some("com.MyClass"),
  packageName in Docker := "mycontainer",
  libraryDependencies ++= myDependencies,
  javaAgents += JavaAgent("io.prometheus.jmx" % "jmx_prometheus_javaagent" % "0.16.1", arguments = "33002:/opt/docker/jmx-exporter.yaml"),
  mappings in Universal ++= Seq(
    file("jmx-exporter.yaml") -> "jmx-exporter.yaml"
  )
)

lazy val myProject = (project in file("my-project"))
  .settings(MyAppSettings)
  .enablePlugins(JavaAppPackaging, JavaAgent)

Lukasz Zuchowski
  • 251
  • 2
  • 11