如何解决在 Azure 门户中查找自定义指标的位置
我正在尝试将自定义指标发送到 Azure 门户中给定检测密钥的应用服务。我在 .NET Core 中运行以下代码作为后台服务的一部分:
public override async Task StartAsync(CancellationToken stoppingToken)
{
try
{
TelemetryClient telemetry = new TelemetryClient();
telemetry.TrackEvent("new event");
var sample = new MetricTelemetry();
sample.Name = "metric name";
sample.Value = 42.3;
telemetry.TrackMetric(sample);
telemetry.Flush();
}
catch (Exception e)
{
_logger.LogError($"{e.Message} {e.StackTrace}");
}
}
此示例代码来自:https://docs.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics
但是,我不确定这些指标是否已到达 Azure 实例或在哪里查找它们。我转到 Application Insights > MyInstance > Logs 并在那里找到了一个名为“customEvents”的表。但是我无法查询它。在 Metrics 选项卡上,我只获得默认指标命名空间,其中显示 Azure 中可用的默认指标,但没有任何新的自定义指标。
解决方法
在我的初创公司中,我确实有
services.AddApplicationInsightsTelemetry();
正如您所说,您正在使用后台工作人员
- 安装包 nuget
Microsoft.ApplicationInsights.WorkerService
- 在您的初创公司中:
-
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext,services) => { ..... services.AddApplicationInsightsTelemetryWorkerService(); });
简单的查找方法是去应用洞察交易搜索并搜索事件名称
然后您点击事件,您将进入下一个视图
这就是我检查事件是否实际记录的方式。
我也只是运行查询
customMetrics
| where name == "metric name"
customEvents
| where name == "Error.PageNotFound"
,
我认为问题在于您使用以下代码行创建了一个新的 telemetry client
:TelemetryClient telemetry = new TelemetryClient();
,但新的 telemetry client
没有配置 InstrumentationKey
。那么 custom events
/ custom metrics
不会使用 telemetry.TrackEvent
/ telemetry.TrackMetric
方法发送。
您应该在 Worker.cs
中像下面那样更改它:
namespace WorkerService3
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
//define a telemetry client here,and use it in your following code
private TelemetryClient telemetry;
public Worker(ILogger<Worker> logger,TelemetryClient tc)
{
_logger = logger;
telemetry = tc;
}
public override async Task StartAsync(CancellationToken stoppingToken)
{
try
{
//do not create a another telemetry client,use the one defined in class-level.
//TelemetryClient telemetry = new TelemetryClient();
telemetry.TrackTrace("StartAsync: new message");
telemetry.TrackEvent("StartAsync: new event");
var sample = new MetricTelemetry();
sample.Name = "StartAsync metric name";
sample.Value = 11.55;
telemetry.TrackMetric(sample);
telemetry.Flush();
}
catch (Exception e)
{
_logger.LogError($"{e.Message} {e.StackTrace}");
}
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
//other code
}
}
}
这是我的Program.cs
:
namespace WorkerService3
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext,services) =>
{
services.AddHostedService<Worker>();
services.AddApplicationInsightsTelemetryWorkerService();
});
}
}
这是我的 appsettings.json:
{
"ApplicationInsights": {
"InstrumentationKey": "your application insights InstrumentationKey"
},"Logging": {
"LogLevel": {
"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"
}
}
}
代码执行后,等待几分钟,我可以在azure门户中搜索自定义指标/自定义事件->我的应用洞察->日志(对于自定义事件,查询customEvents
表):
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。