У моей команды была похожая ситуация, когда нам нужно было отфильтровать URL-адреса, которые были успешными запросами изображений (у нас их было много, из-за чего мы достигли предела 30 тыс. Точек данных / мин).
В итоге мы использовали модифицированную версию класса в записи блога Сергея Канжелева, чтобы отфильтровать их.
Мы создали класс RequestFilterChannel, который является экземпляром ServerTelemetryChannel, и расширили метод Send
. В этом методе мы проверяем каждый отправляемый элемент телеметрии, чтобы узнать, является ли он запросом изображения, и если да, мы предотвращаем его отправку.
public class RequestFilterChannel : ITelemetryChannel, ITelemetryModule
{
private ServerTelemetryChannel channel;
public RequestFilterChannel()
{
this.channel = new ServerTelemetryChannel();
}
public void Initialize(TelemetryConfiguration configuration)
{
this.channel.Initialize(configuration);
}
public void Send(ITelemetry item)
{
if (item is RequestTelemetry)
{
var requestTelemetry = (RequestTelemetry) item;
if (requestTelemetry.Success && isImageRequest((RequestTelemetry) item))
{
// do nothing
}
else
{
this.channel.Send(item);
}
}
else
{
this.channel.Send(item);
}
}
public bool? DeveloperMode
{
get { return this.channel.DeveloperMode; }
set { this.channel.DeveloperMode = value; }
}
public string EndpointAddress
{
get { return this.channel.EndpointAddress; }
set { this.channel.EndpointAddress = value; }
}
public void Flush()
{
this.channel.Flush();
}
public void Dispose()
{
this.channel.Dispose();
}
private bool IsImageRequest(RequestTelemetry request)
{
if (request.Url.AbsolutePath.StartsWith("/image.axd"))
{
return true;
}
return false;
}
}
После создания класса вам необходимо добавить его в файл ApplicationInsights.config.
Замените эту строку:
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
со ссылкой на ваш класс:
<TelemetryChannel Type="XXX.RequestFilterChannel, XXX" />
person
Rune Vejen Petersen
schedule
30.10.2015