본문 바로가기
WIKI 기술 지식 베이스

Go 로그 수집

원문 보기 위키 갱신

Datadog에 Go 로그를 보내려면 파일에 로그를 기록한 다음 Datadog Agent로 그 파일을 tail하세요. 오픈소스 로깅 라이브러리인 logrus와 함께 다음 구성을 사용할 수 있어요.

Datadog는 사용자 정의 파싱 규칙이 필요 없도록 로깅 라이브러리가 JSON으로 로그를 생성하게 설정하는 것을 강력히 권장해요.

출처: 문서

본문

로거 구성하기

클래식한 Go 구성을 위해 main.go 파일을 열고 다음 코드를 붙여넣으세요:

package main

import (
  log "github.com/sirupsen/logrus"
)

func main() {

    // use JSONFormatter
    log.SetFormatter(&log.JSONFormatter{})

    // log an event as usual with 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() {

    // use JSONFormatter
    log.SetFormatter(&log.JSONFormatter{})

    // log an event with logrus
    log.WithFields(log.Fields{"string": "foo", "int": 1, "float": 1.1 }).Info("My first event from golang to stdout")
    
  // for metadata, a common pattern is to reuse fields between logging statements by reusing
  contextualizedLog := log.WithFields(log.Fields{
    "hostname": "staging-1",
    "appname": "foo-app",
    "session": "1ce3f6v"
  })

  contextualizedLog.Info("Simple event with global metadata")
}

Datadog Agent 구성하기

log collection이 활성화되면 custom log collection을 설정해 로그 파일을 tail하고 새 로그를 Datadog로 보내세요.

  1. conf.d/ Agent 구성 디렉터리에 go.d/ 폴더를 만드세요.

  2. go.d/에 다음 내용으로 conf.yaml 파일을 만드세요:

    ##Log section
    logs:
    
      - type: file
        path: "<path_to_your_go_log>.log"
        service: <service_name>
        source: go
        sourcecategory: sourcecode
    
  3. Agent를 재시작하세요.

  4. Agent의 status 하위 명령을 실행하고 Checks 섹션에서 go를 찾아 로그가 Datadog로 성공적으로 제출됐는지 확인하세요.

로그가 JSON 형식이라면 Datadog는 로그 속성을 추출하기 위해 로그 메시지를 자동으로 파싱해요. Log Explorer를 사용해 로그를 보고 문제를 해결하세요.

로그와 트레이스 연결하기

이 애플리케이션에서 APM이 활성화되어 있다면 APM Go 로깅 문서를 따라 애플리케이션 로그와 트레이스 간 상관관계를 개선해 로그에 트레이스·스팬 ID를 자동으로 추가할 수 있어요.

모범 사례

  • 로거 이름을 관련 기능이나 서비스에 대응하는 이름으로 지으세요.
  • DEBUG, INFO, WARNING, FATAL 로그 레벨을 사용하세요. Datadog에서 Go의 FATAL은 Emergency 심각도 레벨로 매핑돼요.
  • 가장 중요한 정보를 기록하는 데서 시작해 이후 반복을 거쳐 로깅의 포괄성을 넓혀가세요.
  • 메타데이터를 사용해 어떤 로그에도 컨텍스트를 추가하세요. 이를 통해 사용자, 고객, 비즈니스 중심 속성 등으로 빠르게 필터링할 수 있어요.

더 알아보기 (Learn more)