如何将 appInsights 与 HDInsight 群集一起使用

How can I use appInsights with HDInsight cluster

我在 azure hdinsight 上有一个 spark 集群。有什么方法可以将 azure applicationInsights 与其集成以获得所有监控和日志分析功能。这可以根据 Microsoft 文档通过 Azure Monitor Logs 完成,但出于某种原因,我需要专门将 hdinsight 上的 spark 应用程序仅与 applicationInsights 集成。在任何地方都找不到相同的文档或示例。

很遗憾,您无法使用 Application Insight 获取 HDInsight 群集的日志。

Azure Monitor日志可以将HDInsight集群等多种资源产生的数据汇集到一处,实现统一的监控体验。

As a prerequisite, you'll need a Log Analytics Workspace to store the collected data. If you haven't already created one, you can follow instructions here: Create a Log Analytics Workspace.

What's the difference between Azure Monitor, Log Analytics, and Application Insights?

2018 年 9 月,Microsoft 将 Azure Monitor、Log Analytics 和 Application Insights 合并到一项服务中,为您的应用程序及其依赖的组件提供强大的端到端监控。 Log Analytics 和 Application Insights 中的功能没有改变,尽管一些功能已更名为 Azure Monitor 以更好地反映它们的新范围。 Log Analytics 的日志数据引擎和查询语言现在称为 Azure Monitor Logs。参见 Azure Monitor terminology updates

Can I use Application Insights with ...?

找到了使 ApplicationInsights 与 HdInsight (Spark) 集群一起工作的方法。集群上部署的应用是用Scala(基于maven)编写的Spark应用。虽然此时 Microsoft 没有适用于 Scala 的 SDK,但我能够使用 applicationinsights-logging-log4j 依赖项将应用程序日志和 spark yarn 日志发送到 AppInsights,这是我的最终目标。

操作方法如下:

  1. 将这些依赖项添加到 pom.xml

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-core</artifactId>
        <version>2.6.1</version>
    </dependency>
    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-logging-log4j1_2</artifactId>
        <version>2.6.1</version>
    </dependency>
    
  2. 使用 ApplicationInsightsAppender class

import org.apache.log4j.{ Logger, Level }
  import com.microsoft.applicationinsights.log4j.v1_2.ApplicationInsightsAppender

    object AppInsightLogger {
    var rootLogger = Logger.getRootLogger()
    var ai = new ApplicationInsightsAppender()
    ai.setInstrumentationKey("your-key")
    ai.activateOptions()


    @transient lazy val logger = Logger.getLogger(this.getClass)
    logger.setLevel(Level.INFO)
    rootLogger.addAppender(ai)
  
    def info(message: String): Unit = {
       logger.info(message)
    }

  }

最后,这可以在应用程序的任何地方使用,例如:

    AppInsightLogger.info("Streaming messages from EH")

我能够在不使用 Scala SDK 的情况下从部署在 HdInsight 上的应用程序获取 Spark yarn 日志以及自定义日志到 AppInsights! (使用这种方法无法看到仪表板和遥测数据。我们将日志视为具有不同严重级别的“跟踪”。如果有异常,我们也可以看到。使用门户上的“搜索”选项查看日志)

Logs seen on AppInsights

Exception logs seen on AppInsights