임의의 코드 블록을 세그먼트로 계측하려면 다음 패턴을 사용하고 트랜잭션에 대해 설정된 변수 이름으로 txn 을 포함합니다.
segment := newrelic.Segment{}
segment.Name ="mySegmentName"
segment.StartTime = txn.StartSegmentNow()
// ... code you want to time here ...
segment.End()
StartSegment 편리한 도우미입니다. 세그먼트를 만들고 시작합니다.
segment := txn.StartSegment("mySegmentName")
// ... code you want to time here ...
segment.End()
기능 세그먼트
함수를 세그먼트로 계측하는 것은 본질적으로 임의의 코드 블록을 세그먼트로 계측하는 것과 동일합니다. 주요 차이점은 함수에 불연속적인 끝이 있기 때문에 Go의 defer 문 을 사용할 수 있다는 것입니다.
함수를 세그먼트로 계측하려면 함수 시작 부분에 다음 코드를 추가하고 트랜잭션에 대해 설정된 변수 이름으로 txn 을 포함합니다.
defer txn.StartSegment("mySegmentName").End()
네스트 세그먼트
세그먼트는 중첩될 수 있습니다. 종료되는 세그먼트는 가장 최근에 시작된 세그먼트여야 합니다.
다음은 다른 세그먼트 내에서 시작하고 끝나는 세그먼트의 예입니다.
s1 := txn.StartSegment("outerSegment")
s2 := txn.StartSegment("innerSegment")
// s2 must end before s1
s2.End()
s1.End()
값이 0인 세그먼트는 안전하게 종료될 수 있습니다. 따라서 다음 코드는 조건문이 실패하더라도 안전합니다.
var s newrelic.Segment
if recordSegment {
s.StartTime = txn.StartSegmentNow()
}
// ... code you wish to time here ...
s.End()
데이터 저장소 세그먼트
로그를 남기고 데이터 스토어를 호출할 수 있습니다. 데이터스토어 세그먼트는 뉴렐릭에 있는 APM Transactions breakdownDatabasesTransactions 페이지 의 테이블과 탭에 나타납니다.
MySQL, PostgreSQL 또는 SQLite 데이터베이스 드라이버를 사용하는 경우 Datastore 세그먼트를 추가하는 가장 쉬운 방법은 사전 구축된 통합 패키지를 사용하는 것입니다. 그렇지 않으면 각 데이터베이스 호출에 대해 Datastore 세그먼트를 수동으로 만들 수 있습니다.
둘째, sql.DB , sql.Conn , sql.Tx 및 sql.Stmt 의 ExecContext , QueryContext 및 QueryRowContext 메서드를 사용하고 트랜잭션이 포함된 컨텍스트를 제공합니다. Exec , Query 및 QueryRow 에 대한 호출은 계측되지 않습니다.
NewRoundTripperhttp.Client 의 Transport 필드를 수정하여 StartExternalSegment 를 호출하지 않고 외부 호출을 계측할 수 있는 http.RoundTripper 를 반환합니다. 반환된 RoundTripper 은 FromContext 를 사용하여 요청 컨텍스트에서 Transaction 를 찾습니다.