Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为Azure Application Insights分配命名空间和维度,以获得来自Java的自定义度量_Java_Azure_Azure Application Insights - Fatal编程技术网

为Azure Application Insights分配命名空间和维度,以获得来自Java的自定义度量

为Azure Application Insights分配命名空间和维度,以获得来自Java的自定义度量,java,azure,azure-application-insights,Java,Azure,Azure Application Insights,我正在将Java应用程序中的自定义指标提交给Azure application Insights。每隔几秒钟,一个线程就会醒来,从应用程序获取度量值,并将其推送到Azure。以下是我如何执行此操作的一些示例代码: TelemetryClient telemetryClient = new TelemetryClient(); MetricTelemetry telemetry = new MetricTelemetry(); telemetry.setTimestamp(metricbean.g

我正在将Java应用程序中的自定义指标提交给Azure application Insights。每隔几秒钟,一个线程就会醒来,从应用程序获取度量值,并将其推送到Azure。以下是我如何执行此操作的一些示例代码:

TelemetryClient telemetryClient = new TelemetryClient();
MetricTelemetry telemetry = new MetricTelemetry();
telemetry.setTimestamp(metricbean.getMetricTimestamp());
telemetry.setName("My custom metric");
telemetry.setValue( metricbean.getValue());
telemetry.setCount(1);
telemetryClient.trackMetric(telemetry);
我在Azure门户上看到了良好的指标。Azure应该支持维度和名称空间。如何使用Java中的TelemetryClient API进行设置


另外,是否还有检查返回码的方法?trackMetric方法无效,不会引发任何已检查的异常?

您可以使用以下方法向MetricTeletry添加属性

telemetry.getProperties.putIfAbsent(key, value);
trackMetric是void类型,这是经过设计的。如果通过在ApplicationInsights.xml中添加以下标记来启用SDKLogs,则当后端响应错误代码时,将看到错误消息。SDK还会重试特定的错误代码

为了在度量资源管理器中查看自定义维度,您需要转到“使用率和估计成本”部分,并检查“自定义度量预览”部分


请注意,启用自定义指标的上述步骤仅用于在azure门户上的metrics explore中查看这些指标。您仍然可以使用Analytics互动程序查看具有自定义维度的指标,并在查询的帮助下绘制图表。

虽然不是在Java中,但我在C中使用Microsoft.AI.PerfCounterCollector时遇到了同样的问题

基本上,我们必须创建一个自定义遥测初始化器,并将其添加到app insights配置中

通过C添加初始值设定项的示例:

自定义AppInsightsLoudiInitializer示例:


关于遥测客户端API,请分享一些链接或示例?是应用程序透视RESTAPI吗?我正在使用Java SDK。下面是一个关于使用Java和应用程序洞察的链接:下面是另一个描述API的链接:我知道维度,但是自定义度量的名称空间意味着什么?也许我不太了解这个问题,你能帮我澄清一下吗?伊凡,你应该阅读我发布的文档。如果你在SpringBoot上,你也可以尝试AzureMonitor测微计集成!它可以帮助您通过千分尺API自动收集指标,并以springboot方式将其发送到Azure门户。这里是的链接:1.1.0-m-1版本的测微计具有此功能。感谢您提供的信息Dhaval,但我确实需要设置维度和名称空间,而不仅仅是属性。另外,如果我理解正确,我可以通过打开SDKLogs将错误消息写入日志。我真的很想在代码中得到响应,以便添加一些错误处理。我不明白为什么一个向服务发送东西的方法不会有某种类型的返回码,或者至少不会抛出异常。通过打开SDKLogs,您也会得到错误消息。默认情况下,我们捕获所有SDK异常,因为监控解决方案杀死生产应用程序是您最不希望看到的。我只是不明白为什么我无法在代码中获得错误响应并采取我想要的操作,而不是SDKLogs让它去做日志的方式。也许我想发电子邮件或发短信,或者在票务系统中制造问题。。。或者,如果涉及到UI,我可能只想在屏幕上显示一条错误消息。任何人都可以确认我无法返回错误消息,因此我将停止跟踪此消息吗?此时,Application Insights Java SDK除了使用SDKLogs之外,没有在端点响应失败时返回错误代码的功能。我理解您的用例,它是完全有效的。如果您可以为此打开github问题,我们可以跟踪它。然而,请注意,除非进行重大版本更新,否则API将很难更改。这是故意的。抱歉,我没有你想听的答案。
AppInsightsConfig = TelemetryConfiguration.Active;

AppInsightsConfig.TelemetryInitializers.Add(new AppInsightsCloudIdInitializer());
public class AppInsightsCloudIdInitializer : ITelemetryInitializer
{
    private readonly string CloudRoleName;
    private readonly string CloudRoleInstance;

    public AppInsightsCloudIdInitializer()
    {
        CloudRoleName = "MyRole";
        CloudRoleInstance = "MyInstance";
    }

    public void Initialize(ITelemetry telemetry)
    {
        if (telemetry is MetricTelemetry metric)
        {
            metric.MetricNamespace = CloudRoleName;
        }
        if (string.IsNullOrWhiteSpace(telemetry.Context.Cloud.RoleInstance) || string.IsNullOrWhiteSpace(telemetry.Context.Cloud.RoleName))
        {
            telemetry.Context.Cloud.RoleInstance = CloudRoleInstance;
            telemetry.Context.Cloud.RoleName = CloudRoleName;
        }
    }
}