簡體   English   中英

如何使用 bootBuildImage 將 NewRelic 等 APM 代理鏈接到 Spring 引導應用程序?

[英]How to link an APM agent like NewRelic to a Spring Boot application with bootBuildImage?

我有一個基於 gradle 的 Spring Boot 3 應用程序。 我在 circleci 中使用 bootBuildImage gradle 任務來構建此應用程序的 docker 映像。

現在,我想將 NewRelic 添加到此應用程序。 我知道我可以通過編寫自己的 Dockerfile 來完成,但我想通過配置 bootBuildImage gradle 任務來完成。

我看到我可以像這樣添加 buildPacks:

tasks.named("bootBuildImage") {
    buildpacks = [...]
}

NewRelic 似乎在這里有一個構建包。

如何使用 NewRelic 集成生成 docker 圖像?

獎勵:我需要將環境變量注入為 NEW_RELIC_ENABLE_AGENT=true|false。 我該怎么做?

你在正確的軌道上。 您想要使用找到的New Relic Buildpack

可以在此處找到該構建包的高級說明。 它本質上是通過接受綁定(秘密配置數據)來工作的,buildpack 將這些值安全地映射到標准的 New Relic 代理配置屬性(通過環境變量)。

可以在此處找到通過綁定配置的 APM 工具示例 具體示例使用不同的 APM 工具,但相同的步驟適用於通過綁定配置的任何 APM 工具,例如 New Relic。

對於您的應用:

  1. 創建綁定目錄。 項目的根是一個合理的位置,但路徑最終並不重要。 不要簽入包含秘密數據的綁定文件:)

  2. 在該文件夾中,創建一個名為new-relic的子文件夾。 同樣,名稱並不重要。

  3. 在上一步的文件夾中,創建一個名為type的文件。 名字很重要。 在該文件中,寫入NewRelic 保存文件。 這就是 buildpack 識別綁定的方式。

  4. 在同一文件夾中,您現在可以添加其他文件來配置 New Relic。 文件名是key ,文件內容是value 當您的應用程序運行時,buildpack 將讀取綁定並將它們轉換為NEW_RELIC_<KEY>=<VALUE>形式的 New Relic 配置設置。 因此,如果您閱讀 New Relic 文檔並看到一個名為foo的屬性,您可以讓一個名為foo的文件將值設置為bar ,並且在運行時,您最終會設置一個環境變量NEW_RELIC_foo=bar New Relic 代理讀取其配置的環境變量,盡管有時這不是他們的文檔中提到的第一種方式。

  5. 接下來您需要配置您的build.gradle文件。 這些更改將告訴bootBuildImage添加 New Relic buildpack 並傳遞您的綁定。

    • tasks.named("bootBuildImage")塊中,添加buildpacks = ["urn:cnb:builder:paketo-buildpacks/java", "gcr.io/paketo-buildpacks/new-relic"] 這將運行標准的 Java buildpack,然后將 append New Relic 運行到該列表的末尾。 例子

    • 添加綁定列表。 在同一個tasks.named("bootBuildImage")塊中添加bindings = ["path/to/local/bindings/new-relic:/platform/bindings/new-relic"] 這會將主機上的path/to/local/bindings/new-relic掛載到容器中的/platform/bindings/new-relic ,這是 buildpack 期望綁定存在的地方。 您將需要更改第一個路徑以指向您在上面創建的本地綁定(您可能可以使用項目的 Gradle 變量來引用它們,但我不知道是否脫離了我的頭腦)。 不要更改容器端的路徑,這需要正是我在上面放置的路徑。

  6. 運行你的構建。 ./gradlew bootBuildImage 在 output 中,您應該看到 New Relic buildpack 通過檢測(如果它找到以NewRelic為內容的type文件,它就會通過)並且它還應該運行並貢獻 New Relic 代理,如 buildpack README.md 中所述。

  7. 成功構建后,您將擁有圖像。 要記住的關鍵是綁定不會添加到圖像中。 出於安全原因,這是有意的。 您不希望圖像中包含秘密綁定信息,因為那樣會泄露您的秘密。

    這意味着您還必須在運行圖像時將綁定傳遞給容器運行時。 如果您使用的是 Docker,則可以docker run --volume path/to/local/bindings/new-relic:/platform/bindings/new-relic...並使用與構建時相同的路徑。 如果您要部署到 Kube.nets,則需要在 K8s 中設置 Secrets,並將這些 Secret 作為文件安裝在容器中,路徑與之前相同/platform/bindings/new-relic 所以你需要制作一個type文件, /platform/bindings/new-relic/type ,以及你想要設置的每個鍵/值參數的文件。

在未來的某個時候,我們正在努力將所有 APM 構建包默認包含在主 Java 構建包中。 這將消除第 5 步中的第一個配置更改。

因為管理綁定可能有點痛苦,所以我還有一個名為綁定工具的項目可以幫助完成步驟 1-3。 它允許您輕松創建綁定文件,如bt add -t NewRelic -p key1=val1 -p key2=val2 它並沒有做任何神奇的事情,只是為你創建文件,但我覺得它很方便。 將來,我希望它也能生成 Kube.netes YAML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM