Azure Application Insights 自定义响应指标

Azure Application Insights custom response metric

我需要一些帮助来找到自定义应用程序洞察指标的良好模式。

环境

我在多个 Azure 虚拟机上有一个自定义 Windows 服务 运行。 我可以成功地将事件添加到我在 Azure 上的监控实例。

目标

我想创建一个自定义指标,让我可以监控我的 windows 服务是否 运行 和每个实例的响应。如果它的行为类似于网站指标中的响应超时,那将是完美的。 每个服务实例都有一个自定义的机器相关标识符,例如:

TelemetryClient telemetry = new TelemetryClient();
telemetry.Context.Device.Id = FingerPrint.Instance;

现在我想在我的一个服务实例 (Context.Device.Id) 没有 运行 或没有响应时创建警报。

问题

如何实现? 在应用程序洞察力之外监控一种服务类型的多个实例甚至可能或有用吗?或者我必须为每个实例打开一个应用程序洞察力吗? 有人可以帮助我吗?

对保罗回答的回应

Track Metric Use TrackMetric to send metrics that are not attached to particular events. For example, you could monitor a queue length at regular intervals.

如果我这样做,如果我的服务器重新启动(更新或某种想法)并且我的服务没有启动,会发生什么情况。现在服务没有向 application insight 发送 TrackMetric 并且没有发出警报,因为值没有低于 1,但服务仍然不是 运行.

问候史蒂芬

根据 Azure 门户上的文档:

https://azure.microsoft.com/en-us/documentation/articles/app-insights-api-custom-events-metrics/#track-metric

跟踪指标 使用 TrackMetric 发送未附加到特定事件的指标。例如,您可以定期监控队列长度。

指标在指标资源管理器中显示为统计图表,但与事件不同的是,您无法在诊断搜索中搜索个别事件。

指标值应 >= 0 才能正确显示。

c# 代码如下所示

private void Run() {
 var appInsights = new TelemetryClient();
 while (true) {
  Thread.Sleep(60000);
  appInsights.TrackMetric("Queue", queue.Length);
 }
}

我认为目前没有很好的方法来实现这一点。您实际上正在寻找的是一种检测 "stale heartbeat." 的方法,例如,如果您的服务正在发送一个事件 "Service Health is okay",您会想要一个提醒,告诉您您还没有收到其中一个事件一定时间内发生的事件。 AI 的警报系统中没有任何 date/time 条件运算符。

Microsoft 可能会解释说,AI 并不打算满足这种情况,因为这更多是 "health checking" 系统的责任,例如 SCOM 或 Operation Insights 或其他完全。

我同意这是需要解决方案的事情,使用 AI 会很棒(我已经尝试过完成同样的事情但没有运气);我只是认为 "they" 会说这不是 AI 责任范围内的场景。

我找到了一个很好的解决方案,只需几个简单的步骤。

1) 在服务端口(例如 8181)上实现一个 HttpListener 实例,带有简单的文本响应“200:OK”

2) 将匹配端点添加到 azure VM imstande

3) 在 "myVM.cloudapp.net:8181" 上创建默认 Web 测试并检查响应文本

到目前为止效果很好,满足我的所有需求! :)