我目前有一个New Relic服务绑定到在Bluemix中的Liberty下运行的Java应用程序。
我们正在使用蓝绿色部署方法来最小化推送新版本时的停机时间,因此,应用程序名称具有版本后缀。
有关版本的应用程序正在New Relic中报告。当我们推出一个新版本时,New Relic选择了另一个实例,即:
这会破坏报告时间表。如果在早上部署某些内容,我无法比较前一天和今天的数据。
我想要做的是覆盖New Relic中的应用名称,以便它只报告" App"没有版本号。这应该给我一个应用程序查看的连续时间表。 (理想情况下,我会让脚本向New Relic发出部署通知,以便它可以用标签来指示。)
使用CF添加和绑定新文件,如下所示:
cf cups newrelic -p' {" licenseKey":" xxxxx"}'
除了许可证密钥之外,似乎没有办法设置任何其他参数。
答案 0 :(得分:3)
查看Liberty buildpack源代码,我看到应用程序名称作为系统属性附加到服务器启动参数。
@java_opts << "-Dnewrelic.config.app_name=#{vcap_app_name}"
你可能尝试的一件事是推动一个具有相同系统属性的自由服务器,看看你的优先级是否优先[我不知道你有什么方法可以保证你的优先权]。从我对源代码的回顾来看,似乎没有任何内置的buildpack机制来覆盖传递给新relic代理的应用程序名称。这似乎是一个很好的增强功能,可以添加到构建包中。
另一种考虑的可能性。作为蓝/绿部署的一部分,为什么不总是部署到相同的应用程序名称(例如myapp),然后在蓝/绿部署时重新命名。例如:
cf rename myApp myApp_old_v2
cf push myApp ... //pushing v3
在这种类型的方案中,应用程序将始终向新文件报告为myApp
答案 1 :(得分:1)
设置NEW_RELIC_APP_NAME环境变量。您可以使用cf set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE在命令行执行此操作,其中ENV_VAR_NAME为NEW_RELIC_APP_NAME。此环境变量具有最高优先级,它将覆盖默认的New Relic app_name。