Go APM configuration

This guide shows you how to control the Middleware.io Go APM's behavior and extend its observability capabilities through configuration options and manual instrumentation.

The Pause* options allow you to disable specific telemetry data (metrics, traces, logs) and profiling. Use these to reduce overhead by pausing unnecessary data collection.

PauseMetrics

If you want to disable metrics, you can use PauseMetrics, or you can set the environment variable MW_APM_COLLECT_METRICS to false.

PauseDefaultMetrics

If you want to disable only default runtime metrics.

PauseTraces

If you want to disable traces, you can use PauseTraces, or you can set the environment variable MW_APM_COLLECT_TRACES to false.

PauseLogs

If you want to disable logs, you can use PauseLogs, or you can set the environment variable MW_APM_COLLECT_LOGS to false.

PauseProfiling

If you want to disable Profiling, you can use PauseProfiling, or you can set the environment variable MW_APM_COLLECT_PROFILING to false.

Debugging the Middleware Go APM

The debug option enables detailed logging of metrics, traces, and logs by printing structured telemetry data directly to the standard output. This mode is ideal for local development and troubleshooting, providing real-time insights into the application's execution and performance.

Debug Log File

When DebugLogFile is enabled, structured telemetry data (metrics, traces, logs) is saved to files instead of being printed to the standard output. This allows for easier storage, analysis, and sharing of debug information without cluttering the console during development.

Sending Custom Data

You can manually create custom spans and transactions to capture more granular details of your application's operations.

Custom Logs

To ingest custom logs into Middleware, utilize the following functions inside your logging method based on desired log severity levels.

logrus
slog
zap

Record Error

Use the track.ErrorRecording(ctx,error) method to record a stack trace when an error occurs. See an example of this method below.

Get Current Span

To get the current span, you’ll need to pull it out of a context.Context you have a handle on:

Custom Spans

To create a span with a tracer, you'll need a context.Context instance, usually derived from a request object. This context may already carry a parent span from an existing instrumentation.

Custom Events

Custom Attributes

Attributes are keys and values that are applied as metadata to your spans and are useful for aggregating, filtering, and grouping traces. Attributes can be added at span creation, or at any other time during the lifecycle of a span before it has completed.

Custom Resource Attributes

Resource attributes are key-value pairs that describe specific characteristics of a service or system component, like its name, version, or environment. These attributes help in tracking and analyzing the behavior of the resource in logs, metrics, or traces.

Framework-specific configuration

If any of the following Go web frameworks are used in your application, additional configuration is required. View the additional configuration steps per framework below.

go-chi

Middleware APM requires go-chi/chi v1.5.4 or higher.

Install the Middleware APM go-chi package.

Add the Middleware APM go-chi package to the existing import statement from Step 2.

Initialize the Middleware APM wherever the go-chi package is initialized, typically in the main function.

go-chi/v5

Middleware APM requires go-chi/chi/v5 v5.0.8 or higher.

Install the Middleware APM go-chi package.

Add the Middleware APM go-chi package to the existing import statement from Step 2.

Initialize the Middleware APM wherever the go-chi package is initialized, typically in the main function.

astaxie-beego

Middleware APM requires astaxie/beego v1.12.3 or higher.

Install the Middleware APM astaxie-beego package.

Add the Middleware APM astaxie-beego package to the existing import statement from Step 2.

Initialize the Middleware APM wherever the astaxie-beego package is initialized, typically in the main function.

beego/v2

Middleware APM requires beego/v2 v2.0.7 or higher.

Install the Middleware APM astaxie-beego package.

Add the Middleware APM astaxie-beego package to the existing import statement from Step 2.

Initialize the Middleware APM wherever the astaxie-beego package is initialized, typically in the main function.

database/sql

Middleware APM requires go-sql-driver/mysql v1.7.1 or higher.

Install the Middleware APM SQL package.

Add the Middleware APM SQL package to the existing import statement from Step 2.

Initialize the Middleware APM wherever the SQL package is initialized, typically in the main function.

go-pg/pg

Middleware APM requires go-pg/pg v10.11.1 or higher.

Install the Middleware APM PG package.

Add the Middleware APM PG package to the existing import statement from Step 2.

Initialize the Middleware APM wherever the PG package is initialized, typically in the main function.

jinzhu/gorm

Middleware APM requires jinzhu/gorm v1.9.16 or higher.

Install the Middleware APM SQL package.

Add the Middleware APM SQL package to the existing import statement from Step 2.

Initialize the Middleware APM inside the main function.

gorm.io/gorm

Middleware APM requires gorm.io/gorm v1.25.1 or higher.

Install the Middleware APM GORM package.

To instrument GORM, you need to install the plugin

Then use db.WithContext(ctx) to propagate the active span.

mongo

Middleware APM requires go.mongodb.org/mongo-driver v1.12.1 or higher.

Install the Middleware APM Mongo package.

Add the Middleware APM Mongo package to the existing import statement from Step 2.

Initialize the Middleware APM inside the main function.

gRPC

Middleware APM requires google.golang.org/grpc v1.53.0 or higher.

Install the Middleware APM gRPC package.

Add the Middleware APM grpc package to the existing import statement from Step 2.

Initialize the Middleware APM wherever the grpc server is initialized, typically in the main function.

Initialize the Middleware APM wherever the grpc client is initialized, typically in the main function.

net/http

Install the Middleware APM net/http package.

Add the Middleware APM http package to the existing import statement from Step 2.

The code snippet below initializes Middleware Go APM package and shows how to use it with net/http.

Want to configure the Go APM in ways not explained here? Contact our support team at [email protected].