Подтвердить что ты не робот

ServiceStack с мониторингом NewRelic

У кого-нибудь есть пример кода для ServiceStack Api, который успешно сообщает транзакции в NewRelic?

Это не кажется тривиальным - это не происходит из коробки, и добавление RequestFilter, вызывающее NewRelic.Api.Agent.NewRelic.SetTransactionName, не меняет этого.

Сервер и приложения, похоже, настроены правильно - другие приложения (ASP WebForms и ASP MVC) на одном сервере IIS сообщают правильно. Мы используем IIS 7.5. Каждое приложение находится в собственном пуле приложений и имеет NewRelic.AppName в web.config

4b9b3361

Ответ 1

Я работаю в New Relic.

В дополнение к тому, что сказал @mythz, я хотел подтвердить, что у вас есть пул приложений, настроенный отдельно (так что вы не видите транзакции в одном из ваших других контролируемых пулов) - вы создали Интернет. config с отдельным именем приложения (параметр NewRelic.AppName) для этого пула, не так ли?

Предполагая, что да, и вы видите по крайней мере событие запуска агента в журналах для агента из этого пула, я могу проверить, что мы слышали то же самое от других клиентов, хотя прошло некоторое время с тех пор, как мы в последний раз посещали вопрос. Лучшая автоматическая поддержка ServiceStack находится на горизонте, но у меня нет ETA.

При работе с одним клиентом, испытывающим эту проблему, мы обнаружили, что ServiceStack почему-то вызывал наш агент. Решение, которое сработало для них, заключалось в том, чтобы переопределить реализацию AppHostBase. ServiceStack в проекте и проверить объект, который должен быть выпущен, если это экземпляр New Relic. Они переопределили его в проекте веб-службы 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.

Ответ 2

Я никогда не использовал NewRelic, но это могло бы помочь, если вы установите имя транзакции как можно раньше в ServiceStack Request Pipeline, например, в RawHttpHandlers в AppHost с:

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;
        } 
    }
});

Ответ 3

В дополнение к дурацкому ответу (если экземпляр агента не удаляется SS), если вы хотите, чтобы имена транзакций New Relic соответствовали вашим именам 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);
    }
}