DatadogAPM을 Opencensus에서 활용하자(로그 및 추적 연결)

6272 단어 opencensusDatadog

소개



안녕하세요, 스에켄( @sueken5 )입니다.

이 기사에서는 DatadogAPM 추적에 로그 정보를 수반하는 방법을 작성합니다.



이렇게 로그와 트레이스를 연결하면 쉽게 디버깅할 수 있으므로 매우 추천합니다.

끈을 붙이려면



datadog APM과 로그를 연결하려면 로그에 trace_id와 span_id를 붙여야합니다. 실제 로그는 다음과 같은 느낌입니다.
{"level":"DEBUG","ts":"2020-01-31T15:33:52.042+0900","msg":"hello world","dd.trace_id":10034860525566454582}

datadog 예약어? 에 dd.trace_id와 dd.span_id가 있으므로 id를 넣습니다.

datadog 용 TraceID / SpanID를 얻으십시오.



여기서 빠졌는데 TraceID/SpanID는 문자열 상태로 보내서 잘 TraceID가 다르며 추적과 로그가 붙지 않습니다. 그래서 다음과 같이 합니다.
    spanCTX := trace.FromContext(ctx).SpanContext()
    fields = append(
        fields,
        zap.Uint64("dd.trace_id", binary.BigEndian.Uint64(spanCTX.TraceID[8:])),
        zap.Uint64("dd.span_id", binary.BigEndian.Uint64(spanCTX.SpanID[:])),
    )
    l.logger.Error(msg, fields...)

spanContext에서 TraceID를 가져와 binary 패키지를 사용하여 처리합니다. 이 방법은 datagg의 exporter의 TraceID를 취득하는 방법을 참고로 하고 있습니다.

github.com/DataDog/opencensus-go-exporter-datadog/span.go
func (e *traceExporter) convertSpan(s *trace.SpanData) *ddSpan {
    startNano := s.StartTime.UnixNano()
    span := &ddSpan{
        TraceID:  binary.BigEndian.Uint64(s.SpanContext.TraceID[8:]),
        SpanID:   binary.BigEndian.Uint64(s.SpanContext.SpanID[:]),
        Name:     "opencensus",
        Resource: s.Name,
        Service:  e.opts.Service,
        Start:    startNano,
        Duration: s.EndTime.UnixNano() - startNano,
        Metrics:  map[string]float64{},
        Meta:     map[string]string{},
    }
        // 省略
}

이렇게 하면 추적과 로그가 연결됩니다.

요약



트레이스와 로그가 끈적거리며 단번에 디버깅이 쉬워집니다. 추천합니다.

좋은 웹페이지 즐겨찾기