Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
可以通过脚本使用 OpenCensus Python 库将日志路由到 Application Insights。 在一个位置聚合管道运行发出的日志可以生成查询和诊断问题。 使用 Application Insights 可以跟踪一段时间内的日志,并比较各个运行的管道日志。
将日志放在一个位置可以提供异常和错误消息的历史记录。 由于 Application Insights 与 Azure 警报相集成,因此你还可以基于 Application Insights 查询创建警报。
必备条件
- 遵循相应的步骤创建 Azure 机器学习工作区并创建第一个管道
- 配置开发环境以安装 Azure 机器学习 SDK。
- 在本地安装 OpenCensus Azure Monitor 导出程序包:
pip install opencensus-ext-azure
- 创建一个 Application Insights 实例(本文档还提供了有关获取资源连接字符串的信息)
入门
本部分的简介内容与通过 Azure 机器学习管道使用 OpenCensus 的操作相关。 有关详细教程,请参阅 OpenCensus Azure Monitor 导出程序
将 PythonScriptStep 添加到 Azure 机器学习管道。 使用 opencensus-ext-azure 中的依赖项配置 RunConfiguration。 配置 APPLICATIONINSIGHTS_CONNECTION_STRING
环境变量。
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.runconfig import RunConfiguration
from azureml.pipeline.core import Pipeline
from azureml.pipeline.steps import PythonScriptStep
# Connecting to the workspace and compute target not shown
# Add pip dependency on OpenCensus
dependencies = CondaDependencies()
dependencies.add_pip_package("opencensus-ext-azure>=1.0.1")
run_config = RunConfiguration(conda_dependencies=dependencies)
# Add environment variable with Application Insights Connection String
# Replace the value with your own connection string
run_config.environment.environment_variables = {
"APPLICATIONINSIGHTS_CONNECTION_STRING": 'InstrumentationKey=00000000-0000-0000-0000-000000000000'
}
# Configure step with runconfig
sample_step = PythonScriptStep(
script_name="sample_step.py",
compute_target=compute_target,
runconfig=run_config
)
# Submit new pipeline run
pipeline = Pipeline(workspace=ws, steps=[sample_step])
pipeline.submit(experiment_name="Logging_Experiment")
创建名为 sample_step.py
的文件。 导入 AzureLogHandler 类以将日志路由到 Application Insights。 还需要导入 Python 日志记录库。
from opencensus.ext.azure.log_exporter import AzureLogHandler
import logging
接下来,将 AzureLogHandler 添加到 Python 记录器。
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
# Assumes the environment variable APPLICATIONINSIGHTS_CONNECTION_STRING is already set
logger.addHandler(AzureLogHandler())
logger.warning("I will be sent to Application Insights")
使用自定义维度进行日志记录
默认情况下,转发到 Application Insights 的日志不提供足够的上下文用于追溯运行或试验。 要使日志可用于诊断问题,需要添加更多字段。
若要添加这些字段,可以添加自定义维度,以提供日志消息的上下文。 例如,当某人想要查看同一管道运行中多个步骤的日志时。
自定义维度构成了键-值(以“字符串, 字符串”形式存储)对的字典。 然后,该字典将发送到 Application Insights,并在查询结果中显示为一列。 其各个维度可用作查询参数。
要包含的有用上下文
字段 | 理由/示例 |
---|---|
parent_run_id | 可以查询具有相同 parent_run_id 的运行的日志,以查看一段时间内所有步骤的日志,而无需深入到各个步骤 |
step_id | 可以查询具有相同 step_id 的运行的日志,将范围缩小到单个步骤,以查看发生问题的位置 |
step_name | 可以查询日志以查看一段时间内的步骤性能。 还有助于查找最近的运行的 step_id,而无需深入到门户 UI |
experiment_name | 可以跨日志进行查询,以查看一段时间内的试验性能。 还有助于查找最近的运行的 parent_run_id 或 step_id,而无需深入到门户 UI |
run_url | 可以提供直接返回到运行的链接用于调查。 |
其他有用字段
这些字段可能需要额外的代码检测,且不会由运行上下文提供。
字段 | 理由/示例 |
---|---|
build_url/build_version | 如果使用 CI/CD 进行部署,此字段可将日志关联到提供步骤和管道逻辑的代码版本。 此链接可以进一步帮助诊断问题,或识别具有特定特征(日志/指标值)的模型 |
run_type | 可以区分不同的模型类型,或者区分训练运行与评分运行 |
创建自定义维度字典
from azureml.core import Run
run = Run.get_context(allow_offline=False)
custom_dimensions = {
"parent_run_id": run.parent.id,
"step_id": run.id,
"step_name": run.name,
"experiment_name": run.experiment.name,
"run_url": run.parent.get_portal_url(),
"run_type": "training"
}
# Assumes AzureLogHandler was already registered above
logger.info("I will be sent to Application Insights with Custom Dimensions", extra= {"custom_dimensions":custom_dimensions})
OpenCensus Python 日志记录注意事项
OpenCensus AzureLogHandler 用于将 Python 日志路由到 Application Insights。 因此,应考虑到 Python 日志记录的细微差别。 创建记录器后,它将采用默认日志级别,并显示大于或等于该级别的日志。 日志记录 Cookbook 提供了有关使用 Python 日志记录功能的有用参考。
OpenCensus 库需要 APPLICATIONINSIGHTS_CONNECTION_STRING
环境变量。 建议设置此环境变量,而不要将其作为管道参数传入,以避免传递纯文本连接字符串。
在 Application Insights 中查询日志
路由到 Application Insights 的日志将显示在“跟踪”或“异常”下。 请务必调整时间范围以包括你的管道运行。
Application Insights 中的结果将显示日志消息和级别、文件路径及代码行号。 它还显示包含的任何自定义维度。 在此图中,customDimensions 字典显示了前一代码示例中的键/值对。
其他有用的查询
以下某些查询使用“customDimensions.Level”。 这些严重性级别对应于最初发送 Python 日志时所用的级别。 有关查询的详细信息,请参阅 Azure Monitor 日志查询。
用例 | 查询 |
---|---|
特定自定义维度(例如“parent_run_id”)的日志结果 | traces | |
过去七天内所有训练运行的日志结果 | traces | |
过去七天内出现 severityLevel 错误的日志结果 | traces | |
过去七天内出现 severityLevel 错误的日志结果的计数 | traces | |
后续步骤
在 Application Insights 实例中启用日志后,可以使用这些日志基于查询结果设置 Azure Monitor 警报。
还可以将查询结果添加到 Azure 仪表板以获取更多见解。