繁体   English   中英

如何跟踪 Java Function 应用程序的依赖关系

[英]How to track dependencies of Java Function Apps

我为使用 Java 实现的 Azure Function 应用程序设置了一些依赖项跟踪。 因此,我添加了applicationinsights-core作为依赖项,请参阅Add the Application Insights SDK for Java to your project

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>applicationinsights-core</artifactId>
  <version>2.6.2</version>
</dependency>

为了创建一个dependencies项,我使用TelemetryClient的一个实例。

// call an external service, e.g. ADLS file upload..
long start = System.currentTimeMillis();
uploadFile();
long elapsed = System.currentTimeMillis() - start;

// void trackDependency(String dependencyName, String commandName, Duration duration, boolean success)
new TelemetryClient().trackDependency(
  "ADLS", "upload file", new Duration(elapsed), true);

生成的dependencies项看起来很奇怪。 它错过了cloud_RoleName ,它通常标识条目的创建者。 此外, commandName作为data属性传递,似乎无法设置条目的type属性。

While I found no dedicated Java Function App documentation for dependency tracking, the general Java documentation recommends to use the applicationinsights-agent additionally (see Java codeless application monitoring Azure Monitor Application Insights ). 代理处理applicationinsights-core的遥测(请参阅支持的自定义遥测)。 但对我来说,如何为 Azure Function App 设置代理并不明显。

如何设置cloud_RoleName 有没有办法设置dependenciestype属性?

我找到了一个仅使用applicationinsights-core的解决方案。

  • cloud_RoleName可以取自环境变量WEBSITE_SITE_NAME
  • type可以通过RemoteDependencyTelemetry的设置器进行配置。
// create depedencies entry
createTelemetryClient().trackDependency(
  buildTelemetry("ADSL", "upload file", "custom context", successful, elapsed));
// ..

private TelemetryClient createTelemetryClient() {
  TelemetryConfiguration configuration = TelemetryConfiguration.getActive();
  configuration.setRoleName(System.getenv("WEBSITE_SITE_NAME"));
  return new TelemetryClient(configuration);
}

private RemoteDependencyTelemetry buildTelemetry(String type,
                                                 String name,
                                                 String data,
                                                 boolean successful,
                                                 long elapsed) {
    RemoteDependencyTelemetry telemetry = new RemoteDependencyTelemetry(
        name,
        data,
        new Duration(elapsed),
        successful);
    telemetry.setType(type);
    return telemetry;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM