我想在应用程序见解中记录成功呼叫的百分比。 我碰到了这篇https://docs.microsoft.com/en-us/azure/azure-monitor/app/sampling帖子,我认为固定速率采样在这里很合适。但这是否会同等影响所有日志记录?是否会不再记录一些错误/故障?
我正在寻找一种解决方案,该解决方案可以记录一定比例的成功呼叫,但保留所有失败的请求/错误。
答案 0 :(得分:1)
我不认为这是开箱即用的,但是您可以编写自己的ITelemetryProcessor
。
.NET中的Application Insights使用了一系列遥测处理器,可用于过滤遥测,因此您可以编写自己的代码来检查resultCode
(我认为这就是Application Insights所称的HTTP状态代码,但是您必须仔细检查)请求遥测对象,如果它是500(或5xx),则批准它,但如果是2xx或3xx,则只有10%的机会发送它。您可以覆盖OKToSend()
方法以对ITelemetry
输入执行上述检查,并相应地返回true / false。
也许是这样的(我是在浏览器中写的,不一定能按原样完美地工作):
// Approves 500 errors and 10% of other telemetry objects
private bool OKtoSend (ITelemetry telemetry)
{
if (telemetry.ResponseCode == 500) {
return true;
} else {
Random rnd = new Random();
int filter = rnd.Next(1, 11);
return filter == 1;
}
}
答案 1 :(得分:1)
要排除失败事件以免受到采样的影响(在对其他所有内容进行采样时),请使用此逻辑编写TelemetryInitializer
。
public class PreventSamplingForFailedTelemetryInitializer: ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
if(failed)
{
// Set to 100, so that actual SamplingProcessors ignore this from sampling considerations.
((ISupportSampling)telemetry).SamplingPercentage = 100;
}
}
}
(Make sure to add this TelemetryInitializer to the TelemetryConfiguration)
Failed or not can be determined from RequestTelemetry and DependencyTelemetry from their `Success` field.
(the last one in FAQ sections has hints to answer your question https://docs.microsoft.com/en-us/azure/azure-monitor/app/sampling#frequently-asked-questions)