이 문서에서는 OpenTelemetry를 사용하여 애플리케이션에 관측 가능성 코드를 추가하는 방법을 설명합니다. OpenTelemetry는 널리 사용되는 프로엠워크에 대한 원격 분석을 생성하는 계측 라이브러리를 제공합니다. 애플리케이션별 동작을 측정하는 커스텀 계측을 추가하여 라이브러리에서 생성된 원격 분석을 보강할 수 있습니다.
이 문서에서 설명하는 원칙과 개념은 OpenTelemetry에서 지원하는 모든 언어로 제작된 앱에 적용할 수 있습니다.
계측에 대한 자세한 내용은 다음 문서를 참조하세요.
tracer 인스턴스를 사용하여 스팬을 만듭니다. 다음 코드 샘플에서 computeSubrequests 함수는 호출될 때마다 스팬을 생성합니다.
funccomputeSubrequests(r*http.Request,subRequestsint)error{// Add custom span representing the work done for the subrequestsctx,span:=tracer.Start(r.Context(),"subrequests")deferspan.End()// Make specified number of http requests to the /single endpoint.fori:=0;i < subRequests;i++{iferr:=callSingle(ctx);err!=nil{returnerr}}// record number of sub-requests madesubRequestsHistogram.Record(ctx,int64(subRequests))returnnil}
computeSubrequests 함수에서 생성된 이전 코드 샘플의 스팬은 전체 함수에서 수행된 작업을 나타냅니다. 이는 함수의 첫 번째 단계가 tracer.Start를 사용하여 새 스팬을 시작하는 것이고 span.End() 앞에 defer 키워드를 사용하면 함수가 종료되기 직전에 스팬이 종료되기 때문입니다.
커스텀 측정항목 만들기
애플리케이션에서 측정항목을 생성하려면 앱 실행 중에 측정된 값을 기록하는 계측 코드를 추가합니다.
측정항목을 만들려면 다음을 수행합니다.
OpenTelemetry Meter를 가져오도록 앱을 수정합니다. OpenTelemetry에서 측정기는 측정항목을 기록하기 위해 측정항목 계측에 액세스합니다. 다음 코드와 같이 측정기를 가져올 수 있습니다.
sleepHistogram 인스턴스를 사용하여 randomSleep 함수가 호출될 때 결정되는 절전 모드 시간을 기록합니다.
funcrandomSleep(r*http.Request)time.Duration{// simulate the work by sleeping 100 to 200 mssleepTime:=time.Duration(100+rand.Intn(100))*time.Millisecondtime.Sleep(sleepTime)hostValue:=attribute.String("host.value",r.Host)// custom histogram metric to record time slept in secondssleepHistogram.Record(r.Context(),sleepTime.Seconds(),metric.WithAttributes(hostValue))returnsleepTime}
OpenTelemetry 내보내기 도구 구성에 따라 이러한 계측에서 기록된 측정항목을 애플리케이션에서 내보냅니다.