Go 로그를 Datadog로 보내려면 파일에 로그한 후 Datadog 에이전트로 해당 파일을 테일링하세요. 개방형 소스 로깅 라이브러리인 [logrus]에서 다음 설정을 사용할 수 있습니다.
Datadog에서는 커스텀 파싱 규칙이 필요하지 않도록 로깅 라이브러리를 설정하여 로그를 JSON으로 생성하는 것을 권장합니다.
로거 설정
클래식 Go 구성을 하려면 main.go
파일을 열고 다음 코드를 붙여 넣으세요.
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
// JSONFormatter 사용
log.SetFormatter(&log.JSONFormatter{})
// logrus로 평소와 같이 이벤트로 로깅
log.WithFields(log.Fields{"string": "foo", "int": 1, "float": 1.1 }).Info("My first event from golang to stdout")
}
로그 이벤트에서 보고 싶은 JSON 개체를 제공하여 로그에 메타데이터를 추가할 수 있습니다.
hostname
, username
, customers
, metric
등, Go 애플리케이션과 관련해 트러블슈팅을 할 수 있는 어떤 정보든 메타데이터로 사용할 수 있습니다.
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
// JSONFormatter 사용
log.SetFormatter(&log.JSONFormatter{})
// logrus로 이벤트 로깅
log.WithFields(log.Fields{"string": "foo", "int": 1, "float": 1.1 }).Info("My first event from golang to stdout")
// 메타데이터의 경우 다음을 재사용해 로깅 문 사이에 필드를 재사용하는 것이 일반적임
contextualizedLog := log.WithFields(log.Fields{
"hostname": "staging-1",
"appname": "foo-app",
"session": "1ce3f6v"
})
contextualizedLog.Info("Simple event with global metadata")
}
Datadog 에이전트 설정
로그 수집을 활성화한 후에는 커스텀 로그 수집을 설정해 로그 파일에 테일링하고 Datadog로 새 로그를 전송하세요.
에이전트 구성 디렉터리의 conf.d/
에 go.d/
폴더를 생성하세요.
다음 내용으로 go.d/
에 conf.yaml
파일을 생성하세요.
##Log section
logs:
- type: file
path: "<path_to_your_go_log>.log"
service: <service_name>
source: go
sourcecategory: sourcecode
에이전트를 재시작합니다.
에이전트의 상태 하위 명령을 실행하고 Checks
섹션 아래 go
를 찾아서 로그가 Datadog로 잘 전송되었는지 확인하세요.
로그가 JSON 형식인 경우 Datadog에서 자동으로 로그 메시지를 파싱하여 로그 속성을 추출합니다. Log Explorer를 사용해 로그를 확인하고 트러블슈팅하세요.
로그 및 트레이스 연결
애플리케이션에서 APM이 활성화된 경우에는 APM Go 로깅 설명서에 따라 자동으로 로그에 트레이스 및 스팬 ID를 추가해 애플리케이션 로그와 트레이스 간의 상관 관계를 개선할 수 있습니다.
모범 사례
- 로거 이름을 기능 및 서비스와 관련된 이름으로 지정하세요.
DEBUG
, INFO
, WARNING
, FATAL
로그 수준을 사용하세요. Go의 FATAL
수준은 Datadog의 Emergency
수준으로 매핑됩니다.- 가장 중요한 정보부터 로깅하세요. 그 후 이터레이션을 추가해 로깅을 확장해 나가세요.
- 로그에 컨텍스트를 추가할 때는 메타데이터를 이용하세요. 그러면 사용자, 고객, 비즈니스 관련 속성으로 빠르게 필터링할 수 있습니다.
참고 자료