将prometheus jmx代理jar添加到JIB构建中



我需要添加">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配置的更多信息,请参阅本文档。

另外,这里有一个动态下载和复制Java代理的Jib示例。


提示:dive是一个非常方便的工具来检查构建映像的内容。使用它来验证文件是否被正确复制到映像中。

最新更新