首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceStack与NewRelic监控

ServiceStack与NewRelic监控
EN

Stack Overflow用户
提问于 2013-11-29 14:42:18
回答 3查看 1.3K关注 0票数 15

是否有人有成功将事务报告到ServiceStackNewRelic Api的示例代码?

这看起来并不简单--它并不是凭空发生的,添加一个调用NewRelic.Api.Agent.NewRelic.SetTransactionNameNewRelic.Api.Agent.NewRelic.SetTransactionName并不会改变这一点。

服务器和应用程序的配置似乎是正确的--在同一个IIS服务器上的其他应用程序(ASP、WebForms和ASP.MVC)报告正确。我们正在使用IIS 7.5。每个应用程序都在自己的应用程序池中,在web.config中有一个web.config。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-29 19:59:43

我在新文物公司工作。

除了@神话说的话之外,我还想确认一下,应用程序池是分开配置的(所以您没有看到其他受监视池中的事务)--您已经为这个池设置了一个具有单独应用程序名称(NewRelic.AppName设置)的NewRelic.AppName文件,对吗?

假设是的,并且您在该池的代理日志中至少看到了一个代理启动事件,我可以验证我们从其他客户那里听到了相同的消息,尽管我们上次访问这个问题已经有一段时间了。对ServiceStack的更好的自动支持即将到来,但我没有ETA。

当与一个遇到此问题的客户一起工作时,我们发现ServiceStack出于某种原因对我们的代理进行了调用。对它们起作用的解决方案是覆盖ServiceStack在项目中的AppHostBase.Release实现,并验证要释放的对象(如果它是一个新的遗留实例)。他们在web服务项目的AppHost中覆盖了它(AppHost模板在App_Start\AppHost.cs的项目中),如下所示:

代码语言:javascript
复制
public override void Release(object instance)

{

    if (instance.GetType().ToString().StartsWith("NewRelic.Agent", StringComparison.CurrentCultureIgnoreCase))

        return;



    base.Release(instance);

}

如果这不会导致解决方案,如果您可以在https://support.newrelic.com上打开支持票,我们可以与您进一步合作,以便跟踪这些统计数据,或者至少在改进servicestack支持时将您列入通知列表。

票数 11
EN

Stack Overflow用户

发布于 2013-11-29 16:33:15

我从未使用过NewRelic,但如果您尽早在ServiceStack请求管道中设置事务名称,例如在AppHost中的RawHttpHandlers中使用:

代码语言:javascript
复制
RawHttpHandlers.Add(httpReq => {
    NewRelic.Api.Agent.NewRelic.SetTransactionName(
        httpReq.HttpMethod, httpReq.AbsoluteUri);
});

或者在旧的ServiceStack v3中:

代码语言:javascript
复制
SetConfig(new EndpointHostConfig
{
    RawHttpHandlers = {
        httpReq => {
            NewRelic.Api.Agent.NewRelic.SetTransactionName(
                httpReq.HttpMethod, httpReq.AbsoluteUri);
            return null;
        } 
    }
});
票数 10
EN

Stack Overflow用户

发布于 2014-05-20 06:01:10

除了傻瓜的回答(确保SS不释放代理实例)之外,如果您希望New事务名称与您的服务DTO名称相匹配,则可以执行以下操作:

代码语言:javascript
复制
public class NewRelicIntegrationPlugin : IPlugin
{
    public void Register(IAppHost appHost)
    {
        appHost.RequestFilters.Insert(0, RenameNewRelicTransaction);
    }

    private void RenameNewRelicTransaction(IHttpRequest httpRequest, IHttpResponse httpResponse, object dto)
    {
        if ( dto != null )
            NewRelic.Api.Agent.NewRelic.SetTransactionName("ServiceStack", dto.GetType().Name);
    }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20288194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档