你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 Azure Databricks 应用程序日志发送到 Azure Monitor
注意
本文依赖于 GitHub 上托管的开放源代码库:https://github.com/mspnp/spark-monitoring。
原始库支持 Azure Databricks Runtimes 10.x (Spark 3.2.x) 和更低版本。
Databricks 在 l4jv2
分支(参见 https://github.com/mspnp/spark-monitoring/tree/l4jv2)上贡献了一个更新版本来支持 Azure Databricks Runtimes 11.0 (Spark 3.3.x) 及更高版本。
请注意,由于 Databricks Runtimes 中使用的日志记录系统不同,11.0 版本不向后兼容。 请确保为 Databricks Runtime 使用正确的版本。 库和 GitHub 存储库处于维护模式。 没有进一步发布的计划,问题支持部门只会尽力而为。 如果对于此库或 Azure Databricks 环境的监视和日志记录路线图有任何其他问题,请联系 azure-spark-monitoring-help@databricks.com。
本文演示如何将应用程序日志和指标从 Azure Databricks 发送至 Log Analytics 工作区。 其中使用 Azure Databricks 监视库,你可通过 GitHub 获取该库。
先决条件
按照 GitHub 自述文件中所述,配置 Azure Databricks 群集,以使用监视库。
注意
监视库将 Apache Spark 级别事件和 Spark 结构化流式处理指标从作业流式传输到 Azure Monitor。 对于这些事件和指标,无需对应用程序代码做出任何更改。
使用 Dropwizard 发送应用程序指标
Spark 使用基于 Dropwizard 指标库的可配置指标系统。 有关详细信息,请参阅 Spark 文档中的指标。
要将应用程序指标从 Azure Databricks 应用程序代码发送至 Azure Monitor,请执行以下步骤:
按照 GitHub 自述文件中所述,构建 spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR 文件。
在应用程序代码中创建 Dropwizard 仪表或计数器。 可以使用监视库中定义的
UserMetricsSystem
类。 以下示例创建一个名为counter1
的计数器。import org.apache.spark.metrics.UserMetricsSystems import org.apache.spark.sql.SparkSession object StreamingQueryListenerSampleJob { private final val METRICS_NAMESPACE = "samplejob" private final val COUNTER_NAME = "counter1" def main(args: Array[String]): Unit = { val spark = SparkSession .builder .getOrCreate val driverMetricsSystem = UserMetricsSystems .getMetricSystem(METRICS_NAMESPACE, builder => { builder.registerCounter(COUNTER_NAME) }) driverMetricsSystem.counter(COUNTER_NAME).inc(5) } }
监视库包含演示如何使用
UserMetricsSystem
类的示例应用程序。
使用 Log4j 发送应用程序日志
要使用库中的 Log4j 追加器将 Azure Databricks 应用程序日志发送至 Azure Log Analytics,请执行以下步骤:
按照 GitHub 自述文件中所述,构建 spark-listeners-1.0-SNAPSHOT.jar 与 spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR 文件。
为应用程序创建 log4j.properties 配置文件。 包括以下配置属性。 将指示的部分替换为应用程序包名称与日志级别:
log4j.appender.A1=com.microsoft.pnp.logging.loganalytics.LogAnalyticsAppender log4j.appender.A1.layout=com.microsoft.pnp.logging.JSONLayout log4j.appender.A1.layout.LocationInfo=false log4j.additivity.<your application package name>=false log4j.logger.<your application package name>=<log level>, A1
可以在此处找到示例配置文件。
在应用程序代码中,加入 spark-listeners-loganalytics 项目,并导入
com.microsoft.pnp.logging.Log4jconfiguration
应用程序代码。import com.microsoft.pnp.logging.Log4jConfiguration
使用在步骤 3 中创建的 log4j.properties 文件配置 Log4j:
getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") { stream => { Log4jConfiguration.configure(stream) } }
根据需要将 Apache Spark 日志消息添加至代码中的适当级别。 例如:使用
logDebug
方法发送调试日志消息。 有关详细信息,请参阅 Spark 文档中的记录。logTrace("Trace message") logDebug("Debug message") logInfo("Info message") logWarning("Warning message") logError("Error message")
注意
如果使用库且具有 Apache Spark 笔记本,那么 Spark 在执行笔记本期间生成的所有日志都会自动转到 Log Analytics。
Python 在支持使用 Spark 配置的 Log4j 的自定义日志记录消息时存在限制。 只能从驱动程序节点发送日志,因为执行程序节点无权从 Python 访问 Java 虚拟机。
运行示例应用程序
监视库包含一个演示如何将应用程序指标和应用程序日志发送至 Azure Monitor 的示例应用程序。 要运行该示例:
按照 GitHub 自述文件中所述,在监视库中构建 spark-jobs 项目。
导航到 Databricks 工作区并创建新作业,如创建和运行 Azure Databricks 作业中所述。
在作业详细信息页中,选择“设置 JAR”。
从
/src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar
上传 JAR 文件。对于 Main 类,请输入
com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob
。选择一个已经过配置,使用监视库的群集。 请参阅配置 Azure Databricks 以将指标发送至 Azure Monitor。
作业运行时,可以在 Log Analytics 工作区中查看应用程序日志和指标。
应用程序日志显示在 SparkLoggingEvent_CL 下:
SparkLoggingEvent_CL | where logger_name_s contains "com.microsoft.pnp"
应用程序指标显示在 SparkMetric_CL 下:
SparkMetric_CL | where name_s contains "rowcounter" | limit 50
重要
在确认指标显示后,请停止示例应用程序作业。
后续步骤
部署此代码库随附的性能监视仪表板,以排查 Azure Databricks 生产工作负荷中的性能问题。