C# MS Application Insights-如何限制Sql依赖关系

C# MS Application Insights-如何限制Sql依赖关系,c#,.net,azure,azure-application-insights,C#,.net,Azure,Azure Application Insights,是否有一种方法可以让应用程序洞察仅捕获与SQL依赖项相关的数据的一部分?大概10%吧?如果没有,有没有一种方法可以同时禁用它?您可以用不同的方式“节流”(或示例,如Microsoft所称)。一种方法是使用内置的配置选项限制一切,但如果只想限制特定的依赖项,则需要实现自己的ITelemetryChannel。 有关如何执行此操作的指南,请参见: 然后,在Send(ITelemetry项)方法中,您可以检查传入项是否是依赖项并与SQL相关,它将如下所示: if (item is Dependency

是否有一种方法可以让应用程序洞察仅捕获与SQL依赖项相关的数据的一部分?大概10%吧?如果没有,有没有一种方法可以同时禁用它?

您可以用不同的方式“节流”(或示例,如Microsoft所称)。一种方法是使用内置的配置选项限制一切,但如果只想限制特定的依赖项,则需要实现自己的ITelemetryChannel。
有关如何执行此操作的指南,请参见:

然后,在Send(ITelemetry项)方法中,您可以检查传入项是否是依赖项并与SQL相关,它将如下所示:

if (item is DependencyTelemetry)
{  
    var dependency = item as DependencyTelemetry;  
    if (dependency.DependencyTypeName == "SQL")  
    {  
        //implement throttling from the guide  
    }  
}  
public void Send(ITelemetry item)
{
    if (item is DependencyTelemetry)
    {
        var dependency = item as DependencyTelemetry;  
        if (dependency.DependencyTypeName == "SQL")  
        {  
            return;
        }  
    }        
    this.channel.Send(item);
}
如链接所示,您需要创建一个ServerTelemetryChannel实例,并在此实例上调用Send()方法-您需要对任何要实际发送到application insights的遥测项目执行此操作。
这意味着您还可以使用此实现完全过滤掉任何SQL依赖项遥测,如下所示:

if (item is DependencyTelemetry)
{  
    var dependency = item as DependencyTelemetry;  
    if (dependency.DependencyTypeName == "SQL")  
    {  
        //implement throttling from the guide  
    }  
}  
public void Send(ITelemetry item)
{
    if (item is DependencyTelemetry)
    {
        var dependency = item as DependencyTelemetry;  
        if (dependency.DependencyTypeName == "SQL")  
        {  
            return;
        }  
    }        
    this.channel.Send(item);
}
您可以用不同的方式“节流”(或者微软称之为“示例”)。一种方法是使用内置的配置选项限制一切,但如果只想限制特定的依赖项,则需要实现自己的ITelemetryChannel。
有关如何执行此操作的指南,请参见:

然后,在Send(ITelemetry项)方法中,您可以检查传入项是否是依赖项并与SQL相关,它将如下所示:

if (item is DependencyTelemetry)
{  
    var dependency = item as DependencyTelemetry;  
    if (dependency.DependencyTypeName == "SQL")  
    {  
        //implement throttling from the guide  
    }  
}  
public void Send(ITelemetry item)
{
    if (item is DependencyTelemetry)
    {
        var dependency = item as DependencyTelemetry;  
        if (dependency.DependencyTypeName == "SQL")  
        {  
            return;
        }  
    }        
    this.channel.Send(item);
}
如链接所示,您需要创建一个ServerTelemetryChannel实例,并在此实例上调用Send()方法-您需要对任何要实际发送到application insights的遥测项目执行此操作。
这意味着您还可以使用此实现完全过滤掉任何SQL依赖项遥测,如下所示:

if (item is DependencyTelemetry)
{  
    var dependency = item as DependencyTelemetry;  
    if (dependency.DependencyTypeName == "SQL")  
    {  
        //implement throttling from the guide  
    }  
}  
public void Send(ITelemetry item)
{
    if (item is DependencyTelemetry)
    {
        var dependency = item as DependencyTelemetry;  
        if (dependency.DependencyTypeName == "SQL")  
        {  
            return;
        }  
    }        
    this.channel.Send(item);
}

根据我下面的评论,这个答案在尝试实现自定义遥测处理器时应该会有所帮助


根据我下面的评论,在尝试实施自定义遥测处理器时,此答案应该会有所帮助


在此处查看我的答案:请尝试按照James Davis-MSFT的答案,并找出它是否能帮助您。@James Davis MSFT您的解决方案工作得非常好,请将其作为答案发布,以便我可以接受!在这里查看我的答案:请尝试按照James Davis-MSFT的答案,看看它是否能帮助您。@JamesDavis MSFT您的解决方案工作得非常好,请将其作为答案发布,以便我可以接受它!我阅读并实现了它,替换了applicationinsights.config文件中的standart节点,但即使将
Send(…)
的实现留空,我仍然可以看到所有类型的遥测数据都是一样的。。。断点也不起作用…您的遥测通道正在实现ITelemetryChannel和ITelemetryModule?您能显示applicationinsights.config文件中的行吗?@Imms90我正在通过代码初始化自定义频道。我的断点被命中,但即使使用空白的
send
方法,我仍然会得到日志。。。这可能是因为我使用的是dev env吗?什么类型的日志?我只是自己实现了它,如果我有一个空的Send方法,我在application Insights中没有得到任何东西。我读取并实现了它,替换了applicationinsights.config文件中的standart节点,但即使将实现留给
Send(…)
空,我仍然可以看到所有类型的遥测数据。。。断点也不起作用…您的遥测通道正在实现ITelemetryChannel和ITelemetryModule?您能显示applicationinsights.config文件中的行吗?@Imms90我正在通过代码初始化自定义频道。我的断点被命中,但即使使用空白的
send
方法,我仍然会得到日志。。。这可能是因为我使用的是dev env吗?什么类型的日志?我只是自己实现了它,如果我有一个空的Send方法,我在applicationinsights中什么也得不到