是否有人有成功将事务报告到ServiceStack的NewRelic Api的示例代码?
这看起来并不简单--它并不是凭空发生的,添加一个调用NewRelic.Api.Agent.NewRelic.SetTransactionName的NewRelic.Api.Agent.NewRelic.SetTransactionName并不会改变这一点。
服务器和应用程序的配置似乎是正确的--在同一个IIS服务器上的其他应用程序(ASP、WebForms和ASP.MVC)报告正确。我们正在使用IIS 7.5。每个应用程序都在自己的应用程序池中,在web.config中有一个web.config。
发布于 2013-11-29 19:59:43
我在新文物公司工作。
除了@神话说的话之外,我还想确认一下,应用程序池是分开配置的(所以您没有看到其他受监视池中的事务)--您已经为这个池设置了一个具有单独应用程序名称(NewRelic.AppName设置)的NewRelic.AppName文件,对吗?
假设是的,并且您在该池的代理日志中至少看到了一个代理启动事件,我可以验证我们从其他客户那里听到了相同的消息,尽管我们上次访问这个问题已经有一段时间了。对ServiceStack的更好的自动支持即将到来,但我没有ETA。
当与一个遇到此问题的客户一起工作时,我们发现ServiceStack出于某种原因对我们的代理进行了调用。对它们起作用的解决方案是覆盖ServiceStack在项目中的AppHostBase.Release实现,并验证要释放的对象(如果它是一个新的遗留实例)。他们在web服务项目的AppHost中覆盖了它(AppHost模板在App_Start\AppHost.cs的项目中),如下所示:
public override void Release(object instance)
{
if (instance.GetType().ToString().StartsWith("NewRelic.Agent", StringComparison.CurrentCultureIgnoreCase))
return;
base.Release(instance);
}如果这不会导致解决方案,如果您可以在https://support.newrelic.com上打开支持票,我们可以与您进一步合作,以便跟踪这些统计数据,或者至少在改进servicestack支持时将您列入通知列表。
发布于 2013-11-29 16:33:15
我从未使用过NewRelic,但如果您尽早在ServiceStack请求管道中设置事务名称,例如在AppHost中的RawHttpHandlers中使用:
RawHttpHandlers.Add(httpReq => {
NewRelic.Api.Agent.NewRelic.SetTransactionName(
httpReq.HttpMethod, httpReq.AbsoluteUri);
});或者在旧的ServiceStack v3中:
SetConfig(new EndpointHostConfig
{
RawHttpHandlers = {
httpReq => {
NewRelic.Api.Agent.NewRelic.SetTransactionName(
httpReq.HttpMethod, httpReq.AbsoluteUri);
return null;
}
}
});发布于 2014-05-20 06:01:10
除了傻瓜的回答(确保SS不释放代理实例)之外,如果您希望New事务名称与您的服务DTO名称相匹配,则可以执行以下操作:
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);
}
}https://stackoverflow.com/questions/20288194
复制相似问题