뉴렐릭 Go 에이전트를 설치하여 Go에 대한 자세한 성능 인사이트를 얻으세요. 이 가이드는 일반적인 Go 애플리케이션 패턴에 대한 예제를 포함하여 전체 설치 과정을 안내합니다.
시작하기 전에
뉴렐릭 계정을 만드세요 - 아직 뉴렐릭 계정이 없으시다면, 뉴렐릭 계정을 만드세요. 영원히 무료입니다.
호환성 확인 - 다음 사항을 확인하십시오:
- 1.19 이상으로 가세요
- 리눅스, macOS 또는 Windows
- 지원되는 웹 프레임워크 또는 라이브러리
라이선스 키를 받으세요 - 설치 중에 이 필요합니다.
설치 단계
Go 에이전트 설치
프로젝트에 뉴렐릭 Go 에이전트를 추가합니다.
$go get github.com/newrelic/go-agent/v3/newrelic팁
Go 모듈을 사용하시나요? 이 에이전트는 Go 모듈과 완벽하게 연동됩니다. Go의 이전 버전을 사용하는 경우 vendor 폴더에 에이전트를 추가해야 할 수 있습니다.
에이전트를 가져옵니다.
Go 애플리케이션에 import 문을 추가하세요:
import "github.com/newrelic/go-agent/v3/newrelic"에이전트 초기화
main 함수에서 애플리케이션 인스턴스를 생성하세요:
func main() { app, err := newrelic.NewApplication( newrelic.ConfigAppName("My Go Application"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), ) if err != nil { log.Fatal("Failed to create New Relic application:", err) }
// Wait for the application to connect if err := app.WaitForCompletion(5 * time.Second); err != nil { log.Println("Warning: New Relic application did not connect:", err) }
// Your application code here}중요
보안 모범 사례: 라이선스 키를 소스 코드에 하드코딩하는 대신 항상 환경 변수를 사용하십시오.
귀하의 웹 핸들러를 처리하세요
HTTP 애플리케이션의 경우, 웹 트랜잭션을 모니터링하도록 핸들러를 래핑하세요.
// Method 1: Wrap individual handlershttp.HandleFunc(newrelic.WrapHandleFunc(app, "/", indexHandler))http.HandleFunc(newrelic.WrapHandleFunc(app, "/users", usersHandler))http.HandleFunc(newrelic.WrapHandleFunc(app, "/api/data", apiHandler))
// Method 2: Wrap your entire mux (recommended for many routes)mux := http.NewServeMux()mux.HandleFunc("/", indexHandler)mux.HandleFunc("/users", usersHandler)mux.HandleFunc("/api/data", apiHandler)
http.ListenAndServe(":8080", newrelic.WrapListen(app, mux))기본 오류 처리 기능을 추가합니다.
핸들러에서 오류를 포착하세요:
func usersHandler(w http.ResponseWriter, r *http.Request) { // Get transaction from request context txn := newrelic.FromContext(r.Context())
user, err := getUserFromDatabase(r.URL.Query().Get("id")) if err != nil { // Report error to New Relic txn.NoticeError(err) http.Error(w, "User not found", http.StatusNotFound) return }
// Add custom attributes txn.AddAttribute("user.id", user.ID) txn.AddAttribute("user.tier", user.Tier)
// Return user data json.NewEncoder(w).Encode(user)}구현하다, 배포하다 그리고 검증하다
환경 변수를 설정하세요:
bash$export NEW_RELIC_LICENSE_KEY="your-license-key-here"애플리케이션을 컴파일하고 실행하세요.
bash$go build -o myapp$./myapp애플리케이션 URL을 방문하여 트래픽을 유도하세요.
one.newrelic.com에서 2-3분 안에 뉴렐릭을 확인하세요.
설치 예시
간단한 HTTP 서버
package main
import ( "fmt" "log" "net/http" "os" "time"
"github.com/newrelic/go-agent/v3/newrelic")
func main() { // Initialize New Relic app, err := newrelic.NewApplication( newrelic.ConfigAppName("Simple Go Server"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), ) if err != nil { log.Fatal(err) }
// Simple handler http.HandleFunc(newrelic.WrapHandleFunc(app, "/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") }))
log.Println("Server starting on :8080") log.Fatal(http.ListenAndServe(":8080", nil))}Gin 프레임워크 통합
package main
import ( "os"
"github.com/gin-gonic/gin" "github.com/newrelic/go-agent/v3/integrations/nrgin" "github.com/newrelic/go-agent/v3/newrelic")
func main() { // Initialize New Relic app, _ := newrelic.NewApplication( newrelic.ConfigAppName("Gin Application"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), )
// Set up Gin with New Relic middleware r := gin.Default() r.Use(nrgin.Middleware(app))
r.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"message": "Hello, World!"}) })
r.Run(":8080")}백그라운드 작업 모니터링
func processBackgroundJob(app *newrelic.Application, jobData JobData) { // Create a background transaction txn := app.StartTransaction("background-job") defer txn.End()
// Add job context txn.AddAttribute("job.id", jobData.ID) txn.AddAttribute("job.type", jobData.Type)
// Process job with error handling if err := processJob(jobData); err != nil { txn.NoticeError(err) log.Printf("Job %s failed: %v", jobData.ID, err) return }
log.Printf("Job %s completed successfully", jobData.ID)}그 다음에는 무슨 일이 일어날까요?
기본 설치를 완료하면 즉시 다음 화면이 나타납니다.
- HTTP 엔드포인트의 응답 시간, 처리량 및 오류율을 보여주는 APM 대시보드
- 가장 느린 웹 requests보여주는 그래픽 트레이스
- 보고된 오류에 대한 기본 오류 추적
txn.NoticeError()
추가 모니터링 기능을 잠금 해제하려면 더 많은 측정, 리소스를 추가해야 합니다.
- 데이터베이스 모니터링 - 데이터베이스 세그먼트 측정, 로그필요
- 외부 서비스 추적 - 외부 세그먼트 측정이 필요합니다.
- 맞춤 측정 및 이벤트 - 맞춤 측정이필요합니다.
문제점 해결
설치 후 데이터가 표시되지 않으면 다음을 확인하세요.
- 로그 로그에서 뉴렐릭 연결 메시지를 확인하세요.
- 라이선스 키가 올바르고 만료되지 않았는지 확인하십시오.
- 뉴렐릭(포트 80/443)에 대한 네트워크 연결이 확보되었는지 확인하십시오.
- 자세한 도움은 문제 해결, 해결 가이드를검토하세요.
팁
에이전트의 동작을 확인하려면 디버그 로깅을 활성화하세요.
config := newrelic.NewConfig("My App", os.Getenv("NEW_RELIC_LICENSE_KEY"))config.Logger = newrelic.NewDebugLogger(os.Stdout)app, _ := newrelic.NewApplication(config)다음 단계
이제 기본 모델 설정이 완료되었으므로 설정 및 측정을 통해 옵저버빌리티를 향상할 수 있습니다.
- 구성 설정을 통해 에이전트가 애플리케이션 전체에서 전역적으로 어떻게 동작할지 제어할 수 있습니다.
- 측정, 추적하려는 특정 작업에 모니터링 코드를 추가합니다.
에이전트 구성
에이전트 설정을 사용하여 전역 동작을 제어하고 다음을 달성합니다.
- 처리 추적 활성화 - 여러 서비스에 대한 추적 requests
- 로깅 제어 - 디버그 레벨 및 로그 저장 위치를 설정합니다.
- 성능 저하 값 설정 - 쿼리가 "느린" 것으로 간주되는 경우 구성
- 보안 기능 활성화 - 고보안 모드 켜기
측정 추가, 사용
상세한 측정, 로그를 사용하여 특정 작업을 모니터링하고 다음을 달성합니다.
- 데이터베이스 쿼리 모니터링 - SQL 성능 및 느린 쿼리 추적
- 외부 API 호출 추적 - 타사 서비스 호출 모니터링
- 모니터 백그라운드 작업 - Track 비 웹 프로세서
- 맞춤형 지표 생성 - 비즈니스별 KPI 모니터링
고급 기능 및 모니터링
- 브라우저 모델링 및 맞춤형 대시보드와 같은 고급 기능을 살펴보세요.
- 주요 성능 지표에 대한 알림 설정
팁
에이전트를 최신 상태로 유지하세요. 새로운 기능, 성능 향상 및 보안 패치를 받으려면 정기적으로 최신 버전으로 업데이트하십시오.