Skip to content

middleware-labs/golang-apm

Repository files navigation

Install Golang package

go get github.com/middleware-labs/golang-apm@latest

Import Tracker

Add this import statement in your project.

import (
    track "github.com/middleware-labs/golang-apm/tracker"
)

Add this snippet in your main function

go track.Track(
		track.WithConfigTag(track.Service, "your-service-name"),
		track.WithConfigTag(track.Token, "your API token"),
	)

Import Application logs

Open-telemetry Loggers

Logger Version Minimal go version
mwotelslog v0.2.0 1.21
mwotelzap v0.0.1 1.20
mwotelzerolog v0.0.1 1.20
mwotellogrus v0.2.0 1.21

log/slog

    config, _ := track.Track(
		track.WithConfigTag(track.Service, "your service name"),
		track.WithConfigTag(track.Token, "your API token"),
	)

	logger := mwotelslog.NewMWOTelLogger(
		config,
		mwotelslog.WithDefaultConsoleLog(), // to enable console log
		mwotelslog.WithName("otelslog"),
	)
	//configure default logger
	slog.SetDefault(logger)

Add NewMWOtelHandler with config from tracker config.

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

See mwotelslog features sample for more details.

zap

     config, _ := track.Track(
		track.WithConfigTag(track.Service, "your service name"),
		track.WithConfigTag(track.Token, "your token"),
	)

	logger := zap.New(zapcore.NewTee(consoleCore, fileCore, mwotelzap.NewMWOTelCore(config, mwotelzap.WithName("otelzaplog"))))
	zap.ReplaceGlobals(logger)

Add NewMWOTelCore with config from tracker config.

This will start collecting the application log from zap.

See mwotelzap features sample for more details.

zerolog

    config, _ := track.Track(
		track.WithConfigTag(track.Service, "your service name"),
		track.WithConfigTag(track.Token, "your API token"),
=	)
	hook := mwotelzerolog.NewMWOTelHook(config)
	logger := log.Hook(hook)

Add NewMWOTelHook with config from tracker config.

This will start collecting the application log from zerolog.

See mwotelzerolog features sample for more details.

logrus

     config, _ := track.Track(
		track.WithConfigTag(track.Service, "your service name"),
		track.WithConfigTag(track.Token, "your API token"),
	)

	logHook := otellog.NewMWOTelHook(config, otellog.WithLevels(log.AllLevels), otellog.WithName("otellogrus"))

	// add hook in logrus
	log.AddHook(logHook)
	// set formatter if required
	log.SetFormatter(&log.JSONFormatter{})

Add NewMWOTelHook with config from tracker config.

This will start collecting the application log from logrus.

See mwotellogrus features sample for more details.

Collect Application Profiling Data

If you also want to collect profiling data for your application, simply add this one config to your track.Track() call

track.WithConfigTag(track.Token, "{ACCOUNT_KEY}"),

Stack Error

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

err := errors.New("something went wrong")
track.ErrorRecording(ctx, err)

Pause Default Metrics

go track.Track(
	track.WithConfigTag(track.PauseDefaultMetrics,true),
)

Enable Debug Mode with console log

go track.Track(
	track.WithConfigTag(track.Debug, true),
)

Enable Debug Mode with logs files for Metrics, Traces and Logs

go track.Track(
	 track.WithConfigTag(track.Debug, true),
     track.WithConfigTag(track.DebugLogFile, true),
)