Azure Python容器部署时如何动态配置New Relic应用名称
问题原因与解决方案
1. 先修正Dockerfile的拼写错误
你Dockerfile中ARG定义的变量名和ENV引用的变量名不一致,属于低级拼写错误:
原错误写法:
ARG NEW_RELIC_APP_NAME ENV NEW_RELIC_APP_NAME $NEWRELICAPPNAME
修正为:
ARG NEW_RELIC_APP_NAME ENV NEW_RELIC_APP_NAME=${NEW_RELIC_APP_NAME}
注意:你当前是在Azure App Service运行时注入的环境变量,所以这个拼写问题暂时不影响运行时配置,但为了避免构建时传参失效建议修正。
2. 修正New Relic代理的启动方式(核心问题)
New Relic Python代理默认只有通过官方指定的启动方式运行时,才会自动读取NEW_RELIC_前缀的环境变量覆盖newrelic.ini中的配置,你当前直接启动python app.py的方式不会触发环境变量覆盖逻辑,所以一直使用ini文件中的固定占位名。
有两种常用解决方式,二选一即可:
方式1:修改启动命令(官方推荐)
将Dockerfile中的CMD指令修改为通过newrelic-admin启动应用,代理会自动读取环境变量覆盖ini配置:
CMD ["newrelic-admin", "run-program", "python3", "app.py"]
方式2:代码初始化时手动传入应用名
如果你不想修改启动命令,可以在应用代码初始化New Relic代理时手动读取环境变量覆盖配置,在app.py最开头新增如下代码:
import newrelic.agent import os # 第二个参数app_name会覆盖ini文件中的配置 newrelic.agent.initialize('newrelic.ini', app_name=os.getenv('NEW_RELIC_APP_NAME', '默认占位名称'))
验证
修正后重新发布容器,重启Web App后,New Relic就会使用你在Azure App Service中配置的NEW_RELIC_APP_NAME值上报数据。
内容的提问来源于stack exchange,提问作者evolmonster
相关产品推荐
相关产品推荐

