Go 언어 APM 에이전트를 사용하면 컨텍스트에서 로그를 가져올 수 있으므로 다른 New Relic 데이터 컨텍스트에서 앱 로그를 볼 수 있습니다. 이 기능에 대한 일반 정보 는 컨텍스트의 APM 로그를 참조하십시오.
에이전트의 컨텍스트에서 로그 구성
컨텍스트 기능에서 다음 로그를 사용하려면 Go 에이전트의 구성 옵션을 수정해야 합니다.
대부분의 사용자에게는 Go 에이전트에 내장된 자동 로그 전달을 사용하는 것이 최상의 솔루션입니다. 설정하기 쉽고 대부분의 사용 사례에 적합합니다. 로그 전달 제한에 대해 알아보세요.
이제 Go 에이전트 버전 3.20.0에서 자동 애플리케이션 로그 전달이 기본적으로 활성화됩니다. 또는 더 높게. 애플리케이션에서 이러한 Go 에이전트 버전을 사용하는 경우 자동 로그 전달을 활성화하기 위해 구성 옵션을 변경할 필요가 없습니다.
이전 버전의 Go 에이전트를 사용하는 경우 애플리케이션 로그 전달을 사용하도록 구성을 수정해야 합니다.
app, err := newrelic.NewApplication(
newrelic.ConfigAppLogForwardingEnabled(true),
)
사용자 정의 로깅이 더 필요한 사용자 또는 60초 주기당 10,000개 이상의 로그 또는 5초 주기당 833개 이상의 로그를 New Relic으로 보내려는 사용자의 경우 로그 전달을 수동으로 설정하는 것이 좋습니다. 로그를 New Relic에 보내도록 구성된 로그 전달자가 있으면 Go 에이전트가 다음 설정을 포함하도록 구성을 수정하여 전달할 로그를 강화할 수 있습니다.
app, err := newrelic.NewApplication(
newrelic.ConfigAppLogDecoratingEnabled(true),
)
Go 에이전트 버전 v3.20.0 이상을 사용하는 경우 New Relic에서 수집한 로그가 중복되지 않도록 애플리케이션 로그 전달을 비활성화해야 합니다.
app, err := newrelic.NewApplication(
newrelic.ConfigAppLogDecoratingEnabled(true),
newrelic.ConfigAppLogForwardingEnabled(false),
)
로그인 컨텍스트 플러그인 설치
에이전트가 New Relic에 로그를 보내도록 구성되면 컨텍스트 플러그인에 로그를 설치하여 로깅 라이브러리를 계측합니다.
logWriter 라이브러리는 최신 New Relic Logs in Context 기능을 go 표준 라이브러리 로거에 자동으로 통합하는 io.Writer 입니다. 다음 단계에 따라 애플리케이션에 설치하십시오. 이 라이브러리를 사용하려면 설치된 Go 에이전트 버전이 3.19.1 이상이어야 합니다.
모듈에 logWriter 패키지를 추가하십시오.
bash
$
go get github.com/newrelic/go-agent/v3/integrations/logcontext-v2/logWriter
이 시점에서 생성된 로거로 작성된 모든 로그는 로깅 구성 설정에 따라 go-agent에서 처리됩니다.
업무
트랜잭션의 컨텍스트를 캡처하려면 새 logWriter 개체와 로거 개체를 만들어야 합니다. 트랜잭션에 대한 새 logWriter 객체를 만들려면 트랜잭션이 함수에 전달되는 방식에 따라 WithTransaction() 또는 WithContext() 함수를 사용합니다. 이러한 함수는 트랜잭션 컨텍스트가 포함된 원본 logWriter 개체의 새 복사본을 만듭니다.
함수가 트랜잭션으로 래핑된 컨텍스트를 수신하는 경우 WithContext() 함수를 사용합니다.
logWriter 도구는 자동으로 실패하도록 설계되었습니다. 디버깅 정보를 활성화하려면 logWriter 객체에서 DebugLogging(true) 메서드를 호출하세요. logWriter에서 오류가 발생하면 편집되지 않은 로그 행이 항상 첫 번째 행에 인쇄됩니다. DebugLogging이 활성화되면 오류가 발생하면 다음 줄에 오류 메시지가 인쇄됩니다.
writer.DebugLogging(true)
zerologWriter 라이브러리는 최신 New Relic Logs in Context 기능을 zerolog에 자동으로 통합하는 io.Writer 입니다. 다음 단계에 따라 애플리케이션에 설치하십시오. 이 라이브러리를 사용하려면 설치된 go-agent 버전이 3.19.1 이상이어야 합니다.
모듈에 zerologWriter 패키지를 추가합니다.
bash
$
go get github.com/newrelic/go-agent/v3/integrations/logcontext-v2/zerologWriter
zerologWriter 개체를 만듭니다. 로그가 기록될 유효한 io.Writer와 초기화된 go-agent 애플리케이션을 전달해야 합니다. 다음 예는 표준 출력에 씁니다.
writer := logWriter.New(os.Stdout, newRelicApp)
로거의 출력 대상으로 새 zerologWriter 개체를 사용하여 로거 개체를 만듭니다.
logger := zerolog.New(writer)
이 시점에서 생성된 로거로 작성된 모든 로그는 로깅 구성 설정에 따라 go-agent에서 처리됩니다.
업무
트랜잭션의 컨텍스트를 캡처하려면 새로운 zerologWriter 개체와 로거 개체를 만들어야 합니다. 트랜잭션에 대한 새로운 zerologWriter 객체를 생성하려면 트랜잭션이 함수에 전달되는 방식에 따라 WithTransaction() 또는 WithContext() 함수를 사용합니다. 이러한 함수는 트랜잭션 컨텍스트가 포함된 원래 zerologWriter 개체의 새 복사본을 만듭니다.
함수가 트랜잭션으로 래핑된 컨텍스트를 수신하는 경우 WithContext() 함수를 사용합니다.
각 트랜잭션에 대해 항상 새로운 zerologWriter를 사용하여 새 로거를 생성해야 합니다. 이는 비동기 프로세스가 다른 컨텍스트 정보를 사용하여 동일한 로거 객체에 액세스할 가능성을 방지합니다.
txnLogger := logger.Output(txnWriter)
문제점 해결
zerologWriter 도구는 자동으로 실패하도록 설계되었습니다. 디버깅 정보를 활성화하려면 zerologWriter 객체에서 DebugLogging(true) 메서드를 호출하세요. zerologWriter에서 오류가 발생하면 항상 첫 번째 줄에 편집되지 않은 로그 줄을 인쇄합니다. DebugLogging이 활성화되면 오류가 발생하면 다음 줄에 오류 메시지가 인쇄됩니다.
writer.DebugLogging(true)
nrlogrus 플러그인은 logrus 로깅 프레임워크를 사용하여 컨텍스트 수집에서 자동 로그를 활성화합니다. 애플리케이션이 이를 사용하도록 구성되면 go-agent는 logrus에 작성된 모든 로그를 자동으로 수집합니다. 이를 위해서는 설치된 go-agent 버전이 3.18.0 이상이어야 합니다.
nrlogrus 패키지를 모듈에 추가합니다.
bash
$
go get github.com/newrelic/go-agent/v3/integrations/logcontext-v2/nrlogrus