Удалить код RUM New Relic .NET Agent из определенного запроса

Мы используем версию New Relic для .NET. Похоже, что при выводе New Relic анализирует вывод, чтобы увидеть, содержит ли он какие-либо элементы </head>, и вставляет перед ним свой сценарий <script type="text/javascript">var NREUMQ=....

Моя проблема в том, что на конкретной странице с закрытым исходным кодом есть строка js, которая читает...

document.write("<html><head></head><body></body></html>");

...Затем New Relic превращает это в...

document.write("<html><head><script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script></head><body></body></html>");

... что вызывает большие головные боли, поскольку код New Relic не экранируется.

Что я хотел бы сделать, так это каким-то образом сказать New Relic не вводить код на этой конкретной странице, поскольку я не могу редактировать страницу.

Ваше здоровье!

Вот измененный код в красивом формате - для вашего удовольствия (не то, что на самом деле в ответе)....

document.write("<html><head><script type="text/javascript">
                var NREUMQ=NREUMQ||[];
                NREUMQ.push(["mark","firstbyte",new Date().getTime()]);
                </script></head><body></body></html>");

person Michael Coxon    schedule 18.09.2013    source источник


Ответы (4)


EDIT 25-01-2017
(новые URL)


ИСХОДНОЕ СООБЩЕНИЕ
Я получил ответ от службы поддержки New Relic. Вот...

Здравствуйте, Майкл,

Это фантастический вопрос! Существует очень прямой способ добиться того, что вы хотите сделать.

Агент .Net вставляет фрагменты javascript в верхний и нижний колонтитулы страниц, отправляемых в браузер пользователя, для измерения времени загрузки страницы на стороне пользователя. Мы называем эту функцию Real User Monitoring или сокращенно RUM. Подробнее об этом можно узнать здесь: https://newrelic.com/docs/features/how-does-real-user-monitoring-work

Если вы хотите полностью отключить RUM на всех страницах, вы можете отредактировать newrelic.config и изменить эту строку:

<browserMonitoring autoInstrument="true"/>

к этому:

<browserMonitoring autoInstrument="false"/>

Вы можете отключить RUM на отдельных страницах и/или вручную указать, где фрагменты заголовка и нижнего колонтитула RUM вставляются на страницу, с помощью вызовов .Net Agent API. Чтобы использовать эту библиотеку, добавьте ссылку на NewRelic.Api.Agent.dll в свой проект. DLL должна находиться в этой папке: "%ProgramFiles%\New Relic\.NET Agent"

Затем вы можете отключить RUM на определенных страницах, используя этот вызов API:

Или вы можете вручную вставить заголовок и подножку там, где вы хотите, чтобы они были с помощью этих вызовов API:

person Michael Coxon    schedule 20.09.2013

Сегодня я столкнулся с той же проблемой. Я смог исправить это, объединив Javascript «он» и «реклама» на клиенте. Это не позволяет New Relic RUM видеть тег HEAD.

document.write("<html><he" + "ad></he" + "ad><body></body></html>");

person gerrard00    schedule 23.12.2013
comment
Да, это то, что я хотел сделать, но код, который генерирует document.write, является сторонним двоичным кодом с закрытым исходным кодом. :С - person Michael Coxon; 06.01.2014
comment
А, это определенно усложняет дело. Я думаю, вы могли бы переопределить document.write и добавить необходимый код, чтобы разбить тег заголовка, но лучший ответ, вероятно, просто отключить автоматическую инъекцию, как было предложено выше. - person gerrard00; 07.01.2014

Я просто хочу добавить к ответу Джеррарда ... его решение сработало для меня, но мне также пришлось разбить тег BODY ... New Relic был достаточно вдумчив, чтобы добавить свой собственный тег HEAD перед моим тегом BODY после того, как он не смог обнаружить мой оригинал тег HEAD.

В качестве примечания: эта автоматическая инструментация причинила мне много боли в нескольких проектах.

person PMac    schedule 27.01.2014
comment
Ха! На самом деле я также разбил тег body в своем коде, чтобы быть в безопасности. Я удалил его из примера, которым поделился, потому что не думал, что это необходимо. Пожалуйста, не стесняйтесь редактировать мой ответ! - person gerrard00; 12.02.2014

На самом деле есть гораздо более простое решение этой проблемы, добавив одну строку кода в ваш файл cshtml или aspx:

NewRelic.Api.Agent.NewRelic.DisableBrowserMonitoring();
person enter.net    schedule 10.02.2016
comment
Это все хорошо, если у вас есть доступ для добавления серверного кода на страницу. - person Michael Coxon; 11.02.2016