我有一个使用 Plotly Dash 构建的 Python Web 应用程序,并使用 Python 3.12 部署在 Azure 应用服务上。由于 Azure App Service 尚未启用 Python 3.12 版本来启用应用程序洞察,因此我使用了该包:
azure-monitor-opentelemetry==1.6.2
在我的应用程序中将异常记录到我的应用程序洞察资源中。
但是,当我在 Azure 应用服务上部署 Web 应用程序时,当有人访问该 Web 应用程序时,我的应用程序会在应用程序洞察中记录以下异常:
无法从 Tracer Provider 派生资源:“ProxyTracerProvider”对象没有属性“resource”
Traceback (most recent call last):
File "/tmp/8dcd22e385c2da5/antenv/lib/python3.12/site-packages/azure/monitor/opentelemetry/exporter/export/trace/_exporter.py", line 91, in export
resource = tracer_provider.resource # type: ignore
AttributeError:“ProxyTracerProvider”对象没有属性“resource”
我在我的应用程序中实现了 azure-monitor-opentelemetry,如下所示:
appopentelemetry.py:
from azure.monitor.opentelemetry import configure_azure_monitor
from models.environmentmanager.environmentmanager import EnvironmentManager
def azure_monitoring_open_telemetry():
environment_manager = EnvironmentManager()
connection_string = environment_manager.get_connection_string() # The app insight connection string
return configure_azure_monitor(
connection_string=connection_string,
enable_live_metrics=True,
)
在我的app.py中:
...imports...
environment_manager = EnvironmentManager()
# This should be executed if the environment is not local, this is set in .env if ran locally
# and set in environment variables of the app service on Azure when deployed
if not environment_manager.get_is_local():
from functions.app.appopentelemetry import azure_monitoring_open_telemetry
azure_monitoring_open_telemetry()
...
app = Dash(__name__, use_pages=True, external_stylesheets=stylesheets)
...
app.layout = dmc.MantineProvider(...)
if __name__ == '__main__':
app.run(debug=True, port=8000)
我能知道我做错了什么吗?
1.6.2版本还将
azure-monitor-opentelemetry-exporter
升级为"1.0.0b29"
,并进行了制动更改。只需降级至 azure-monitor-opentelemetry-exporter = "1.0.0b28"
,也许降级至 azure-monitor-opentelemetry = "1.6.1"
。暂时可以解决这个问题。
一般来说,我认为配置应该以不同的方式完成,而不是使用configure_azure_monitor,但文档中并不清楚。尝试阅读此处https://opentelemetry.io/docs/languages/python/getting-started/