Skip to content

Commit 7c0be6a

Browse files
authored
Merge pull request #12 from middleware-labs/arjun/eng-3084-golang
ENG-3084: golang-apm add log support using otel lib and update profiling for v2.
2 parents 1af16b8 + 80752a3 commit 7c0be6a

File tree

13 files changed

+494
-192
lines changed

13 files changed

+494
-192
lines changed

.github/workflows/publish.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ jobs:
3030
with:
3131
tag_name: ${{ github.ref }}
3232
release_name: Release ${{ github.ref }}
33-
draft: false
33+
draft: true
3434
prerelease: false

README.md

+49-39
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ Add this snippet in your main function
1818

1919
```
2020
go track.Track(
21-
track.WithConfigTag("service", "your service name"),
22-
track.WithConfigTag("projectName", "your project name"),
23-
track.WithConfigTag("accessToken", "your API key"),
21+
track.WithConfigTag(track.Service, "your service name"),
22+
track.WithConfigTag(track.Project, "your project name"),
23+
track.WithConfigTag(track.Token, "your API token"),
2424
)
2525
```
2626
## Import Application logs
@@ -29,23 +29,22 @@ go track.Track(
2929

3030
| Logger | Version | Minimal go version |
3131
|--------------------------------|---------|--------------------|
32-
| [mwotelslog](mwotelslog) | v0.1.0 | 1.21 |
33-
| [mwotelzap](mwotelzap) | v0.2.1 | 1.20 |
32+
| [mwotelslog](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/bridges/otelslog) | v0.2.0 | 1.21 |
33+
| [mwotelzap](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/bridges/otelzap) | v0.0.1 | 1.20 |
3434
| [mwotelzerolog](mwotelzerolog) | v0.0.1 | 1.20 |
35+
| [mwotellogrus](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/bridges/otellogrus) | v0.2.0 | 1.21 |
3536

3637
### `log/slog`
3738
```go
3839
config, _ := track.Track(
39-
track.WithConfigTag("service", "your service name"),
40-
track.WithConfigTag("projectName", "your project name"),
40+
track.WithConfigTag(track.Service, "your service name"),
41+
track.WithConfigTag(track.Project, "your project name"),
4142
)
4243

43-
logger := slog.New(
44-
//use slog-multi if logging in console is needed with stderr handler.
45-
sm.Fanout(
46-
slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{}),
47-
mwotelslog.NewMWOtelHandler(config, mwotelslog.HandlerOptions{}),
48-
),
44+
logger := mwotelslog.NewMWOTelLogger(
45+
config,
46+
mwotelslog.WithDefaultConsoleLog(), // to enable console log
47+
mwotelslog.WithName("otelslog"),
4948
)
5049
//configure default logger
5150
slog.SetDefault(logger)
@@ -54,59 +53,70 @@ Add NewMWOtelHandler with config from tracker config.
5453

5554
This will start collecting the application log from slog and standard library logs.
5655

57-
See [mwotelslog]() features sample for more details.
56+
See [mwotelslog](https://github.com/middleware-labs/demo-apm/tree/master/golang/features) features sample for more details.
57+
5858
### `zap`
5959
```go
60-
config, _ := track.Track(
61-
track.WithConfigTag("service", "your service name"),
62-
track.WithConfigTag("projectName", "your project name"),
60+
config, _ := track.Track(
61+
track.WithConfigTag(track.Service, "your service name"),
62+
track.WithConfigTag(track.Project, "your project name"),
63+
track.WithConfigTag(track.Token, "your token"),
6364
)
6465

65-
logger := zap.New(zapcore.NewTee(consoleCore, fileCore, mwotelzap.NewMWOtelCore(config)))
66+
logger := zap.New(zapcore.NewTee(consoleCore, fileCore, mwotelzap.NewMWOTelCore(config, mwotelzap.WithName("otelzaplog"))))
6667
zap.ReplaceGlobals(logger)
6768
```
68-
Add NewMWOtelCore with config from tracker config.
69+
Add NewMWOTelCore with config from tracker config.
6970

7071
This will start collecting the application log from zap.
7172

72-
See [mwotelzap]() features sample for more details.
73+
See [mwotelzap](https://github.com/middleware-labs/demo-apm/tree/master/golang/features) features sample for more details.
7374

7475
### `zerolog`
7576
```go
7677
config, _ := track.Track(
77-
track.WithConfigTag("service", "your service name"),
78-
track.WithConfigTag("projectName", "your project name"),
78+
track.WithConfigTag(track.Service, "your service name"),
79+
track.WithConfigTag(track.Project, "your project name"),
7980
)
80-
hook := mwotelzerolog.NewMWOtelHook(config)
81+
hook := mwotelzerolog.NewMWOTelHook(config)
8182
logger := log.Hook(hook)
8283
```
83-
Add NewMWOtelHook with config from tracker config.
84+
Add NewMWOTelHook with config from tracker config.
8485

8586
This will start collecting the application log from zerolog.
8687

87-
See [mwotelzerolog]() features sample for more details.
88+
See [mwotelzerolog](https://github.com/middleware-labs/demo-apm/tree/master/golang/features) features sample for more details.
8889

89-
## Collect Application Profiling Data
90+
### `logrus`
91+
```go
92+
config, _ := track.Track(
93+
track.WithConfigTag(track.Service, "your service name"),
94+
track.WithConfigTag(track.Project, "your project name"),
95+
)
9096

91-
If you also want to collect profiling data for your application,
92-
simply add this one config to your track.Track() call
97+
logHook := otellog.NewMWOTelHook(config, otellog.WithLevels(log.AllLevels), otellog.WithName("otellogrus"))
9398

94-
```go
95-
track.WithConfigTag("accessToken", "{ACCOUNT_KEY}")
99+
// add hook in logrus
100+
log.AddHook(logHook)
101+
// set formatter if required
102+
log.SetFormatter(&log.JSONFormatter{})
96103
```
104+
Add NewMWOTelHook with config from tracker config.
97105

98-
## Add custom logs
106+
This will start collecting the application log from logrus.
99107

100-
```go
101-
"github.com/middleware-labs/golang-apm/logger"
108+
See [mwotellogrus](https://github.com/middleware-labs/demo-apm/tree/master/golang/features) features sample for more details.
102109

103-
....
110+
## Collect Application Profiling Data
104111

105-
logger.Error("Error")
106-
logger.Info("Info")
107-
logger.Warn("Warn")
112+
If you also want to collect profiling data for your application,
113+
simply add this one config to your track.Track() call
114+
115+
```go
116+
track.WithConfigTag(track.Token, "{ACCOUNT_KEY}"),
108117
```
109-
# Custom Logs
118+
119+
## Custom Logs
110120

111121
To ingest custom logs into Middleware, you can use library functions as given below.
112122

@@ -121,7 +131,7 @@ logger.Warn("Warn")
121131
122132
```
123133

124-
# Stack Error
134+
## Stack Error
125135

126136
If you want to record exception in traces then you can use track.RecordError(ctx,error) method.
127137

go.mod

+28-20
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,54 @@ go 1.21
55
toolchain go1.22.2
66

77
require (
8-
github.com/agoda-com/opentelemetry-go/otelslog v0.1.1
9-
github.com/agoda-com/opentelemetry-go/otelzap v0.2.2
108
github.com/agoda-com/opentelemetry-go/otelzerolog v0.0.1
119
github.com/agoda-com/opentelemetry-logs-go v0.5.0
1210
github.com/fluent/fluent-logger-golang v1.9.0
1311
github.com/go-errors/errors v1.5.1
1412
github.com/grafana/pyroscope-go v1.1.0
13+
github.com/samber/slog-multi v1.1.0
14+
github.com/sirupsen/logrus v1.9.3
15+
go.opentelemetry.io/contrib/bridges/otellogrus v0.2.0
16+
go.opentelemetry.io/contrib/bridges/otelslog v0.2.0
17+
go.opentelemetry.io/contrib/bridges/otelzap v0.0.0-20240611215918-b368fc0c6318
1518
go.opentelemetry.io/contrib/instrumentation/runtime v0.51.0
1619
go.opentelemetry.io/contrib/propagators/b3 v1.22.0
17-
go.opentelemetry.io/otel v1.26.0
20+
go.opentelemetry.io/otel v1.27.0
21+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0
1822
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.45.0
19-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0
20-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.22.0
21-
go.opentelemetry.io/otel/metric v1.26.0
22-
go.opentelemetry.io/otel/sdk v1.25.0
23-
go.opentelemetry.io/otel/sdk/metric v1.22.0
24-
go.opentelemetry.io/otel/trace v1.26.0
25-
go.uber.org/zap v1.27.0
23+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0
24+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0
25+
go.opentelemetry.io/otel/metric v1.27.0
26+
go.opentelemetry.io/otel/sdk v1.27.0
27+
go.opentelemetry.io/otel/sdk/log v0.3.0
28+
go.opentelemetry.io/otel/sdk/metric v1.27.0
29+
go.opentelemetry.io/otel/trace v1.27.0
2630
)
2731

2832
require (
2933
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
3034
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
31-
github.com/go-logr/logr v1.4.1 // indirect
35+
github.com/go-logr/logr v1.4.2 // indirect
3236
github.com/go-logr/stdr v1.2.2 // indirect
3337
github.com/grafana/pyroscope-go/godeltaprof v0.1.6 // indirect
34-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
38+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
3539
github.com/klauspost/compress v1.17.3 // indirect
3640
github.com/mattn/go-colorable v0.1.13 // indirect
3741
github.com/mattn/go-isatty v0.0.20 // indirect
3842
github.com/philhofer/fwd v1.1.2 // indirect
3943
github.com/rs/zerolog v1.30.0 // indirect
44+
github.com/samber/lo v1.38.1 // indirect
4045
github.com/tinylib/msgp v1.1.9 // indirect
46+
go.opentelemetry.io/otel/log v0.3.0 // indirect
4147
go.opentelemetry.io/proto/otlp v1.2.0 // indirect
42-
go.uber.org/multierr v1.10.0 // indirect
43-
golang.org/x/net v0.24.0 // indirect
44-
golang.org/x/sys v0.19.0 // indirect
45-
golang.org/x/text v0.14.0 // indirect
46-
google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
47-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect
48-
google.golang.org/grpc v1.63.2 // indirect
49-
google.golang.org/protobuf v1.33.0 // indirect
48+
go.uber.org/multierr v1.11.0 // indirect
49+
go.uber.org/zap v1.27.0 // indirect
50+
golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect
51+
golang.org/x/net v0.26.0 // indirect
52+
golang.org/x/sys v0.21.0 // indirect
53+
golang.org/x/text v0.16.0 // indirect
54+
google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect
55+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect
56+
google.golang.org/grpc v1.64.0 // indirect
57+
google.golang.org/protobuf v1.34.1 // indirect
5058
)

0 commit comments

Comments
 (0)