분산 추적을 사용하면 분산 시스템 전체에서 요청의 전체 여정을 볼 수 있습니다.Go 에이전트의 경우 두 가지 유형의 분산 추적을 제공합니다(자세한 내용은 스팬 샘플링 작동 방식 참조).
표준(헤드 기반 샘플링): 추적이 도착하기 전에 수락하고 분석할 추적 비율을 결정합니다.이를 통해 추적이 어떻게 도움이 되는지 확인할 수 있는 확실한 출발점이 됩니다.Go 에이전트 3.16.0 이상에서는 기본적으로 켜져 있습니다.
Infinite Tracing(테일 기반): 당사의 클라우드 기반 서비스는 귀하의 모든 트레이스를 수용한 다음 이를 정렬하여 가장 중요한 트레이스를 찾습니다. 무한 추적은 모든 트레이스를 분석하고 가장 중요한 트레이스를 샘플링할 수 있는 설정 옵션을 제공합니다.
표준 분산 추적(헤드 기반 샘플링)을 시도하거나 무한 추적(테일 기반 샘플링)을 설정하려는 경우 표준 추적 설정부터 시작해야 합니다.
표준 분산 추적 이는 서비스에 대한 APM 에이전트를 아직 설치하지 않은 경우 표준 분산 추적을 설정하는 가장 좋은 방법입니다.
팁 방사능 Go 에이전트를 설치하면 기본적으로 표준복원 추적이 켜져 있습니다. 이 기능을 끄고 싶다면 설정 가이드를 참조하세요.
서비스 식별 어떤 서비스가 요청에 영향을 미치는지 파악하여 각 서비스를 계측하여 New Relic에 추적 데이터를 보낼 수 있습니다.
APM 에이전트를 사용하여 각 서비스를 조정합니다. 트랜잭션과 관련된 각 서비스에 대해 에이전트를 별도로 설치해야 합니다. 일부 서비스가 다른 언어를 사용하는 경우 해당 언어에 대한 설치 단계를 반복하면 됩니다.
팁 Go 에이전트를 사용하려면 다른 뉴렐릭 에이전트의 자동 측정, 자동 로그와 달리 Go 서비스를 수동으로 로그아웃해야 합니다. 이는 Go 에이전트를 사용하려면 코드에 몇 줄을 추가해야 함을 의미합니다. 아래에서 설치를 시작하면 이에 대해 알게 됩니다.
설치 루틴을 시작하려면 아래 타일을 클릭하십시오. 각 에이전트 설치를 마치면 여기로 돌아와서 추적 보기 에 대한 팁을 확인하십시오.
뷰트레이스 APM 에이전트로 각 서비스를 계측한 후 일부 추적을 캡처할 수 있도록 애플리케이션에서 일부 트래픽을 생성합니다.다음은 UI에서 추적을 보는 몇 가지 방법입니다.
특정 서비스를 포함하는 trace 보기 다음은 특정 서비스에 대한 추적을 볼 수 있는 한 가지 방법입니다.
one.newrelic.com > All capabilities > APM & services 으)로 이동합니다.엔터티(서비스)를 클릭합니다. 왼쪽 창의 Monitor 섹션에서 Distributed tracing 클릭합니다. 자세한 내용을 보려면 개별 트레이스를 클릭하세요. 상단 메뉴에 Group similar traces 이 켜져 있으면 트레이스 그룹을 클릭한 다음 개별 트레이스를 클릭합니다. 원하는 추적이 표시되지 않으면 trace.id
으로 필터링할 수 있습니다. 계정 간 추적 보기 계정을 교차하는 추적을 보려면 다음 단계를 따르세요.
one.newrelic.com > All capabilities > Traces 으)로 이동합니다.왼쪽 창에서 엔터티(서비스)를 선택합니다. 자세한 내용을 보려면 개별 트레이스를 클릭하세요. 상단 메뉴에 Group similar traces 이 켜져 있으면 트레이스 그룹을 클릭한 다음 개별 트레이스를 클릭합니다. 원하는 추적이 표시되지 않으면 trace.id
으로 필터링할 수 있습니다. 추적 관련 로그 검사 로그와 추적 세부 정보를 함께 가져와 더 쉽고 빠르게 문제를 해결할 수 있습니다.컨텍스트의 로그를 사용하면 New Relic UI에서 추적과 함께 로그 메시지를 볼 수 있습니다.
특정 서비스가 포함된 추적 보기 또는 계정 간 추적 보기의 단계를 사용하여 흥미로운 추적을 찾은 후 다음을 수행합니다.
컨텍스트에서 로그를 활성화한 경우 Logs 탭( Trace details 옆)을 클릭하세요. 개별 로그와 관련된 세부 정보를 보려면 메시지를 직접 클릭하십시오. UI에서 추적을 찾는 데 도움이 더 필요하면:
무한 추적(선택 사항) 에이전트에 대한 표준 폐기 추적은 APM 트레이스의 최대 10%를 캡처하지만 모든 데이터를 분석하고 가장 관련성이 높은 트레이스를 찾으려면 무한 추적을 설정할 수 있습니다.
시작하기 전에 먼저 요구사항을 충족하는지 확인하세요.
표준 분산 추적 설정 완료 Infinite Tracing 설정은 표준 분산 추적을 기반으로 합니다. 따라서 위의 단계를 완료했는지 확인한 다음 트레이스 관찰자 설정을 계속하세요.
추적 관찰자 설정 추적 관찰자는 모든 추적을 수집하고 분석하는 New Relic AWS 기반 서비스입니다. 추적 관찰자 설정 의 지침을 따릅니다. 완료되면 추적 관찰자 정보와 함께 여기로 돌아와 에이전트를 구성하는 다음 단계를 계속합니다.
무한 추적 구성 설정에는 표준 분산 추적과 추적 관찰자에 대한 정보가 포함됩니다.
무한 추적 구성으로 이동 다음은 설정에 대한 개요입니다.
유형
필수 구성
무한 추적
구성 옵션:
newrelic.Config
구조:
app , err := newrelic . NewApplication (
newrelic . ConfigAppName ( YOUR_APP_NAME ) ,
newrelic . ConfigLicense ( YOUR_LICENSE_KEY ) ,
func ( cfg * newrelic . Config ) {
cfg . InfiniteTracing . TraceObserver . Host = YOUR_TRACE_OBSERVER_HOST
환경 변수:
팁 프록시 구성에 대한 도움이 필요한 경우 프록시 지원 을 참조하십시오.
(선택 사항) 무한 추적 사용자 정의 에이전트 구성 설정을 추가한 후 New Relic UI에서 데이터를 보기 시작해야 합니다. 데이터를 분석하는 데 시간을 보낸 후 Infinite Tracing의 일부 기능을 조정할 수 있습니다.
추가 수동 계측 Go 에이전트 및 분산 추적의 모든 설치에는 Go 에이전트 구성 설정 에 나열된 설정을 사용하여 수동 계측이 필요합니다.그러나 설정을 최적화하기 위해 몇 가지 추가 구성을 수행해야 할 수도 있습니다.다음은 트랜잭션 및 HTTP 요청을 계측하기 위한 몇 가지 지침입니다.
거래 계측(ServMux를 사용하는 경우) Go의 http.ServeMux
를 사용 중이고 New Relic의 분산 추적을 활성화하려면 Go 애플리케이션이 New Relic의 WrapHandle
및 WrapHandleFunc
래퍼로 계측되어야 합니다. 이러한 래퍼는 자동으로 올바른 분산 추적 헤더를 추가하는 요청 및 응답 작성기로 트랜잭션을 시작하고 종료합니다. 헤더 전파 작동 방식에 대한 자세한 내용은 분산 추적 작동 방식 을 참조하세요.
전과 후의 예 다음은 계측 전 코드의 예입니다.
http . HandleFunc ( "/users" , usersHandler )
다음은 계측 후 동일한 코드의 예입니다.
http . HandleFunc ( newrelic . WrapHandleFunc ( app , "/users" , usersHandler ) )
Instrument Go 트랜잭션 에서 이러한 래퍼를 사용하는 방법에 대해 자세히 읽어보십시오.
아웃바운드 HTTP 요청을 외부 세그먼트로 계측 아웃바운드 HTTP 요청이 분산 추적에 적합하도록 하려면 외부 세그먼트를 만드 십시오.
아웃바운드 HTTP 요청에 대한 외부 세그먼트를 만드는 가장 쉬운 방법은 newrelic.NewRoundTripper
메서드를 사용하는 것입니다. 다음은 발신 분산 추적 헤더를 포함하는 http://api.example.com
에 대한 요청의 예입니다.
func useNewRoundTripper ( txn * newrelic . Transaction ) ( * http . Response , error ) {
client . Transport = newrelic . NewRoundTripper ( client . Transport )
request , _ := http . NewRequest ( "GET" , "http://example.com" , nil )
request = newrelic . RequestWithTransactionContext ( request , txn )
return client . Do ( request )
Go 표준 라이브러리의 http.Request
를 사용하는 더 복잡한 요청이 있는 경우 newrelic.StartExternalSegment
메서드를 사용하여 아웃바운드 요청이 분산 추적에 적합한지 확인합니다.
func external ( txn * newrelic . Transaction , req * http . Request ) ( * http . Response , error ) {
s := newrelic . StartExternalSegment ( txn , req )
response , err := http . DefaultClient . Do ( req )
구조체 리터럴로 생성된 ExternalSegment
는 분산 추적에 사용할 수 없습니다. 이 때문에 New Relic은 newrelic.NewRoundTripper
또는 newrelic.StartExternalSegment
사용을 권장합니다.
func noGoodForDt ( txn * newrelic . Transaction , url string ) ( * http . Response , error ) {
defer newrelic . ExternalSegment {
StartTime : txn . StartSegmentNow ( ) ,
수동으로 분산 추적 페이로드 생성 및 수락 분산 추적 페이로드에는 New Relic이 여러 서비스에서 발생하는 트랜잭션을 완전한 트랜잭션 추적으로 결합할 수 있도록 하는 정보가 포함되어 있습니다. New Relic이 모니터링하는 서비스가 서로에게 추적 컨텍스트를 보내지 않으면 불완전한 추적 세부 정보가 생성됩니다.
아래 API 호출을 사용하여 분산 추적을 구현하는 방법에 대한 일반적인 지침은 먼저 분산 추적 API 사용 을 참조하세요.
원하는 경우...
이것을 사용
호출된 서비스에 보낼 페이로드를 만듭니다.
첫 번째 서비스에서 보낸 페이로드를 수락합니다. 이것은 추적에서 이러한 서비스를 함께 연결합니다.
이를 사용하는 방법에 대한 자세한 내용은 Go 에이전트 GitHub 리포지토리 를 참조하세요.