为来自Java的自定义指标分配Azure Application Insights的名称空间和维度

时间:2018-10-10 18:00:26

标签: java azure azure-application-insights

我正在从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()”方法无效,并且不会引发任何检查的异常吗?

2 个答案:

答案 0 :(得分:0)

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

telemetry.getProperties.putIfAbsent(key, value);

trackMetric()是空类型,这是设计使然。如果通过在ApplicationInsights.xml中添加以下标记来打开SDKLogs,则当后端以错误代码响应时,您将看到错误消息。 SDK还会重试特定的错误代码。

为了在度量标准浏览器中查看自定义维度,您需要转到“使用和估计成本”部分,然后检查“自定义度量标准预览”部分。

enter image description here

请注意,只有在Azure门户上的指标浏览中查看自定义指标时,才需要执行上述步骤。您仍然可以使用Google Analytics(分析)图块查看具有自定义维度的指标,并借助查询进行图表制作。

答案 1 :(得分:0)

尽管不是Java语言,但在C#中使用Microsoft.AI.PerfCounterCollector也遇到同样的问题。

基本上必须创建一个自定义TelemetryInitializer并将其添加到应用数据洞察配置中。

通过C#添加初始化程序的示例:

AppInsightsConfig = TelemetryConfiguration.Active;

AppInsightsConfig.TelemetryInitializers.Add(new AppInsightsCloudIdInitializer());

自定义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;
        }
    }
}