我正在从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()”方法无效,并且不会引发任何检查的异常吗?
答案 0 :(得分:0)
您可以使用以下方法向MetricTelemetry添加属性。
telemetry.getProperties.putIfAbsent(key, value);
trackMetric()是空类型,这是设计使然。如果通过在ApplicationInsights.xml中添加以下标记来打开SDKLogs,则当后端以错误代码响应时,您将看到错误消息。 SDK还会重试特定的错误代码。
为了在度量标准浏览器中查看自定义维度,您需要转到“使用和估计成本”部分,然后检查“自定义度量标准预览”部分。
请注意,只有在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;
}
}
}