.NET 에이전트의 사용자 지정 계측은 HttpContext 개체를 사용하는 웹 트랜잭션과 함께 작동합니다. 반면 .NET Agent API를 사용하면 사용자 정의 대시 보드에 표시 할 수있는 메트릭을 수집 할 수 있습니다. 특히 RecordMetric, RecordResponseTimeMetric 및 IncrementCounter는 웹 이외의 응용 프로그램에서 작동하기 때문에 유용합니다.
그러나 .NET 에이전트 버전 2.24.218.0부터는 새 기능을 사용하여 에이전트가 일반적으로 그렇게하지 않는 트랜잭션을 만들 수 있습니다. 이는 사용자 정의 계측 파일을 통한 수동 프로세스입니다.
CoreInstrumentation.xml과 함께 C : \ ProgramData \ New Relic.NET Agent \ Extensions에 CustomInstrumentation.xml이라는 사용자 지정 계측 파일을 만듭니다. 사용자 정의 계측 파일에 다음 내용을 추가합니다 :
<?xml version="1.0" encoding="utf-8"?>
<extension xmlns="urn:newrelic-extension">
<instrumentation>
<tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="Category/Name">
<match assemblyName="AssemblyName" className="NameSpace.ClassName">
<exactMethodMatcher methodName="MethodName" />
</match>
</tracerFactory>
</instrumentation>
</extension>
당신은 변경해야 속성이 위 카테고리/이름,의 AssemblyName, NameSpace.ClassName 및 methodName로 값 :
거래를 시작할 때 형 이름 공간의 객체 AssemblyName 어셈블리의 .ClassName은 MethodName 메서드를 호출합니다. 메소드가 메소드를 리턴하거나 예외를 던지면 트랜잭션이 종료됩니다. 트랜잭션의 이름은 Name이며 카테고리로 지정된 트랜잭션 유형으로 그룹화됩니다. New Relic UI에서는 Monitoring> Transactions 페이지를 볼 때 Type 드롭 다운 메뉴에서 트랜잭션 유형을 선택할 수 있습니다.
범주와 이름이 모두 있어야하며 슬래시로 구분해야합니다.
예상대로 메소드 호출 중에 발생하는 계측 된 활동 (메소드, 데이터베이스, 외부)은 트랜잭션의 분석 테이블과 트랜잭션 추적에 표시됩니다.
다음은 좀 더 구체적인 예입니다.첫째, 계측 파일 :
<?xml version="1.0" encoding="utf-8"?>
<extension xmlns="urn:newrelic-extension">
<instrumentation>
<tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="Background/Bars">
<match assemblyName="Foo" className="Foo.Bar">
<exactMethodMatcher methodName="Bar1" />
<exactMethodMatcher methodName="Bar2" />
</match>
</tracerFactory>
<tracerFactory metricName="Custom/some custom metric name">
<match assemblyName="Foo" className="Foo.Bar">
<exactMethodMatcher methodName="Bar3" />
</match>
</tracerFactory>
</instrumentation>
</extension>
이제 몇 가지 코드 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Custom Transactions");
var t = new CustomTransaction();
for (int i = 0; i < 100; ++i)
t.StartTransaction();
}
}
class CustomTransaction
{
public void StartTransaction()
{
Console.WriteLine("StartTransaction");
Dummy();
}
void Dummy()
{
System.Threading.Thread.Sleep(5000);
}
}
}
사용하여 다음과 같은 사용자 정의 계측 파일 : 여기
var foo = new Foo();
foo.Bar1(); // Creates a transaction named Bars in category Background
foo.Bar2(); // Same here.
foo.Bar3(); // Won't create a new transaction. See notes below.
public class Foo
{
// this will result in a transaction with an External Service request segment in the transaction trace
public void Bar1()
{
new WebClient().DownloadString("http://www.google.com/);
}
// this will result in a transaction that has one segment with a category of "Custom" and a name of "some custom metric name"
public void Bar2()
{
// the segment for Bar3 will contain your SQL query inside of it and possibly an execution plan
Bar3();
}
// if Bar3 is called directly, it won't get a transaction made for it.
// However, if it is called inside of Bar1 or Bar2 then it will show up as a segment containing the SQL query
private void Bar3()
{
using (var connection = new SqlConnection(ConnectionStrings["MsSqlConnection"].ConnectionString))
{
connection.Open();
using (var command = new SqlCommand("SELECT * FROM table", connection))
using (var reader = command.ExecuteReader())
{
reader.Read();
}
}
}
}
은 사용자 정의 트랜잭션을 설명하는 간단한 콘솔 응용 프로그램입니다
<?xml version="1.0" encoding="utf-8"?>
<extension xmlns="urn:newrelic-extension">
<instrumentation>
<tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="Background/CustomTransaction">
<match assemblyName="ConsoleApplication1" className="ConsoleApplication1.CustomTransaction">
<exactMethodMatcher methodName="StartTransaction" />
</match>
</tracerFactory>
<tracerFactory metricName="Custom/Dummy">
<match assemblyName="ConsoleApplication1" className="ConsoleApplication1.CustomTransaction">
<exactMethodMatcher methodName="Dummy" />
</match>
</tracerFactory>
</instrumentation>
</extension>
응용 프로그램을 몇 번 실행 한 후에 다른 트랜잭션, 백그라운드 범주에 사용자 정의 트랜잭션이 표시되어야합니다. 트랜잭션 분석 테이블과 트랜잭션 추적에서 더미 세그먼트를 확인해야합니다.
NewRelic.Api와 XML을 사용하는 사이에 차이점이 있습니까? 아니면 다른 구문으로도 똑같은가? –
@ Snæbjørn [custom instrumentation] (https://newrelic.com/docs/dotnet/agent-custom-metrics)과 XML 파일은 [.NET Agent API] (https : //newrelic.com/docs/dotnet/the-net-agent-api). XML 파일을 사용하여 프로파일 러가 추적 할 메소드에 대한 계측을 정의하십시오. 트랜잭션 이름 지정 또는 오류 기록과 같은 특정 유틸리티에 API를 사용하십시오. API로 직접 측정 항목을 기록하면 [맞춤 대시 보드] (https://docs.newrelic.com/docs/dashboards/new-relic-dashboards)에서 볼 수있는 측정 항목이됩니다. –
나는 그것을 조금만 가지고 놀고 난 후 지금은 이해하고 있다고 생각한다. :) –