将 prometheus jmx 代理 jar 添加到 JIB 构建
Adding prometheus jmx agent jar to JIB build
我需要将“jmx_prometheus_javaagent”jar 添加到 JIB 构建中,但在部署应用程序时出现以下错误:
Error opening zip file or JAR manifest missing : /srv/jmx_prometheus_javaagent-0.16.1.jar
Error occurred during initialization of VM
agent library failed to init: instrument
我已经在所需目录中添加了 jar 和配置文件,这些是我在 build.gradle.kts:
中所做的相关更改
val jibExtraDir = file("$buildDir/jib-extra")
val jibAppRoot = "/srv"
val copyJmxPrometheusJavaAgent by tasks.registering(Copy::class) {
val jarName = "jmx_prometheus_javaagent-0.16.1.jar"
val configName = "jmx_prometheus_config.yaml"
from("${project.projectDir.absolutePath}/resources/jmx-prometheus")
into("$jibExtraDir/$jibAppRoot")
doLast {
// Required for reproducible builds.
file("$jibExtraDir/$jibAppRoot/$jarName").setLastModified(0)
file("$jibExtraDir/$jibAppRoot/$configName").setLastModified(0)
}
}
subProjects {
plugins.withType<JibPlugin>().configureEach {
container {
jvmFlags = listOf(
"-javaagent:$jibAppRoot/jmx_prometheus_javaagent-0.16.1.jar=8099:$jibAppRoot/jmx_prometheus_config.yaml"
)
}
tasks.withType<JibTask> {
dependsOn(":copyJmxPrometheusJavaAgent")
}
}
这是我的jmx_prometheus_config.yaml:
---
lowercaseOutputName: true
whitelistObjectNames: [
"java.lang:type=Memory",
"java.lang:type=GarbageCollector,*"
]
错误消息指出缺少 JAR 清单。但是由于我在JIB中添加的目录结构看起来不错,我不确定我在这里做错了什么。
您正在将代理文件从 resources/jmx-prometheus/*
复制到 <project root>/build/jib-extra/srv
,但到此为止。 Jib 没有将这些文件放入构建的映像中。
由于默认的 Jib“额外目录”是 src/main/jib
,从技术上讲,您可以简单地将文件复制到 src/main/jib/...
。但是,我假设您不想将文件签入源目录,因此您可能希望像这样配置 Jib 额外目录:
container {
jvmFlags = ...
}
extraDirectories {
paths {
path {
setFrom("$jibExtraDir")
}
}
}
或
extraDirectories.paths = "$jibExtraDir"
有关 extraDirectories
配置的详细信息,请参阅此 doc。
此外,这里有一个 Jib sample 可以动态下载和复制 Java 代理。
提示:dive
是检查构建映像内容的非常方便的工具。用它来验证文件是否正确复制到图像中。
我需要将“jmx_prometheus_javaagent”jar 添加到 JIB 构建中,但在部署应用程序时出现以下错误:
Error opening zip file or JAR manifest missing : /srv/jmx_prometheus_javaagent-0.16.1.jar
Error occurred during initialization of VM
agent library failed to init: instrument
我已经在所需目录中添加了 jar 和配置文件,这些是我在 build.gradle.kts:
中所做的相关更改val jibExtraDir = file("$buildDir/jib-extra")
val jibAppRoot = "/srv"
val copyJmxPrometheusJavaAgent by tasks.registering(Copy::class) {
val jarName = "jmx_prometheus_javaagent-0.16.1.jar"
val configName = "jmx_prometheus_config.yaml"
from("${project.projectDir.absolutePath}/resources/jmx-prometheus")
into("$jibExtraDir/$jibAppRoot")
doLast {
// Required for reproducible builds.
file("$jibExtraDir/$jibAppRoot/$jarName").setLastModified(0)
file("$jibExtraDir/$jibAppRoot/$configName").setLastModified(0)
}
}
subProjects {
plugins.withType<JibPlugin>().configureEach {
container {
jvmFlags = listOf(
"-javaagent:$jibAppRoot/jmx_prometheus_javaagent-0.16.1.jar=8099:$jibAppRoot/jmx_prometheus_config.yaml"
)
}
tasks.withType<JibTask> {
dependsOn(":copyJmxPrometheusJavaAgent")
}
}
这是我的jmx_prometheus_config.yaml:
---
lowercaseOutputName: true
whitelistObjectNames: [
"java.lang:type=Memory",
"java.lang:type=GarbageCollector,*"
]
错误消息指出缺少 JAR 清单。但是由于我在JIB中添加的目录结构看起来不错,我不确定我在这里做错了什么。
您正在将代理文件从 resources/jmx-prometheus/*
复制到 <project root>/build/jib-extra/srv
,但到此为止。 Jib 没有将这些文件放入构建的映像中。
由于默认的 Jib“额外目录”是 src/main/jib
,从技术上讲,您可以简单地将文件复制到 src/main/jib/...
。但是,我假设您不想将文件签入源目录,因此您可能希望像这样配置 Jib 额外目录:
container {
jvmFlags = ...
}
extraDirectories {
paths {
path {
setFrom("$jibExtraDir")
}
}
}
或
extraDirectories.paths = "$jibExtraDir"
有关 extraDirectories
配置的详细信息,请参阅此 doc。
此外,这里有一个 Jib sample 可以动态下载和复制 Java 代理。
提示:dive
是检查构建映像内容的非常方便的工具。用它来验证文件是否正确复制到图像中。