Skip to content

Commit f4c356f

Browse files
committed
impl: added attribute events to parse json formatted log into datadog
1 parent 0ff08b4 commit f4c356f

File tree

7 files changed

+41
-22
lines changed

7 files changed

+41
-22
lines changed

docker-compose.yml

+1
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,6 @@ services:
5555
- '/var/run/docker.sock:/var/run/docker.sock:ro'
5656
- '/var/lib/docker/containers:/var/lib/docker/containers:ro'
5757
- '/sys/fs/cgroup/:/host/sys/fs/cgroup:ro'
58+
- '/sys/kernel/debug:/sys/kernel/debug'
5859
networks:
5960
web-service:

web/internal/web1/handler.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func (h *handler) Welcome() func(w http.ResponseWriter, r *http.Request) {
1919
ctx := r.Context()
2020
req, err := http.NewRequest("GET", "http://web2-server:3001/web2", nil)
2121
if err != nil {
22-
h.log.Errorf(ctx, "Unable to create request: %w", err)
22+
h.log.Errorf(ctx, "Welcome(): Unable to create request: %w", err)
2323
return
2424
}
2525

@@ -28,7 +28,7 @@ func (h *handler) Welcome() func(w http.ResponseWriter, r *http.Request) {
2828

2929
_, err = http.DefaultClient.Do(req)
3030
if err != nil {
31-
h.log.Errorf(ctx, "bad response: %w", err)
31+
h.log.Errorf(ctx, "Welcome():bad response: %w", err)
3232
return
3333
}
3434

web/internal/web1/middleware.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ func DataDogTracer() func(http.Handler) http.Handler {
1919
log.Printf("Failed to inject tracer: %v", err)
2020
}
2121

22-
r = r.WithContext(context.WithValue(r.Context(), "datadogTraceID", r.Header.Get("X-Datadog-Trace-Id")))
22+
r = r.WithContext(context.WithValue(r.Context(), "datadogTraceID", span.Context().TraceID()))
23+
r = r.WithContext(context.WithValue(r.Context(), "datadogSpanID", span.Context().SpanID()))
2324
next.ServeHTTP(w, r)
2425
}
2526
return http.HandlerFunc(fn)

web/internal/web2/middleware.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ func DataDogTracer() func(http.Handler) http.Handler {
1717
return
1818
}
1919

20-
span := tracer.StartSpan("web.request", tracer.ChildOf(sctx))
20+
span := tracer.StartSpan("web2.request", tracer.ChildOf(sctx))
2121
defer span.Finish()
2222

23-
r = r.WithContext(context.WithValue(r.Context(), "datadogTraceID", r.Header.Get("X-Datadog-Trace-Id")))
23+
r = r.WithContext(context.WithValue(r.Context(), "datadogTraceID", span.Context().TraceID()))
24+
r = r.WithContext(context.WithValue(r.Context(), "datadogSpanID", span.Context().SpanID()))
2425
next.ServeHTTP(w, r)
2526
}
2627
return http.HandlerFunc(fn)

web/pkg/log/attr.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package log
2+
3+
type HTTP struct {
4+
Method string `json:"method"`
5+
StatusCode int `json:"status_code"`
6+
}
7+
8+
type Error struct {
9+
Message string `json:"message"`
10+
}
11+
12+
type Network struct {
13+
ClientIP string `json:"client_ip"`
14+
}
15+
16+
type DataDog struct {
17+
TraceID uint64 `json:"trace_id"`
18+
SpanID uint64 `json:"span_id"`
19+
}

web/pkg/log/logger.go

+8-9
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,20 @@ func NewLogger(l *log.Logger, f Formatter) *LoggerWrapper {
2222
}
2323

2424
func (l *LoggerWrapper) Errorf(ctx context.Context, format string, args ...interface{}) {
25-
l.Logger.WithFields(l.tracingFields(ctx)).Errorf(format, args...)
25+
l.Logger.WithFields(l.processAttrFields(ctx)).Errorf(format, args...)
2626
}
2727

2828
func (l *LoggerWrapper) Infof(ctx context.Context, format string, args ...interface{}) {
29-
l.Logger.WithFields(l.tracingFields(ctx)).Infof(format, args...)
29+
l.Logger.WithFields(l.processAttrFields(ctx)).Infof(format, args...)
3030
}
3131

32-
func (l *LoggerWrapper) WithFields(fields Fields) *LoggerWrapper {
33-
l.Logger.WithFields(fields)
34-
return l
35-
}
36-
37-
func (l *LoggerWrapper) tracingFields(ctx context.Context) Fields {
32+
func (l *LoggerWrapper) processAttrFields(ctx context.Context) Fields {
3833
return Fields{
3934
"subdomain": ctx.Value("subdomain"),
40-
"x-trace": ctx.Value("datadogTraceID"),
35+
"dd": DataDog{
36+
TraceID: ctx.Value("datadogTraceID").(uint64),
37+
SpanID: ctx.Value("datadogSpanID").(uint64),
38+
},
39+
"http": ctx.Value(HTTP{}),
4140
}
4241
}

web/pkg/log/middleware.go

+6-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package log
22

33
import (
4+
"context"
45
"net/http"
5-
"time"
66

77
"github.com/go-chi/chi/middleware"
88
)
@@ -11,15 +11,13 @@ func Logger(l *LoggerWrapper) func(http.Handler) http.Handler {
1111
return func(next http.Handler) http.Handler {
1212
fn := func(w http.ResponseWriter, r *http.Request) {
1313
ww := middleware.NewWrapResponseWriter(w, r.ProtoMajor)
14-
timeNow := time.Now()
1514
defer func() {
16-
fields := Fields{
17-
"duration": timeNow.String(),
18-
"status_code": ww.Status(),
19-
"method": r.Method,
20-
"service": "web-2",
15+
http := &HTTP{
16+
StatusCode: ww.Status(),
17+
Method: r.Method,
2118
}
22-
l.WithFields(fields).Infof(r.Context(), "http://%s%s", r.Host, r.RequestURI)
19+
r = r.WithContext(context.WithValue(r.Context(), HTTP{}, http))
20+
l.Infof(r.Context(), "http://%s%s", r.Host, r.RequestURI)
2321
}()
2422

2523
next.ServeHTTP(ww, r)

0 commit comments

Comments
 (0)