Go Micro Logo Go Micro

Observability

Observability in Go Micro spans logs, metrics, and traces. The goal is rapid insight into service behavior with minimal configuration.

Core Principles

  1. Structured Logs – Machine-parsable, leveled output
  2. Metrics – Quantitative trends (counters, gauges, histograms)
  3. Traces – Request flows across service boundaries
  4. Correlation – IDs flowing through all three signals

Logging

The default logger can be replaced. Use env vars to adjust level:

MICRO_LOG_LEVEL=debug go run main.go

Recommended fields:

Metrics

Patterns:

Example (pseudo-code):

// Wrap handler to record metrics
func MetricsWrapper(fn micro.HandlerFunc) micro.HandlerFunc {
    return func(ctx context.Context, req micro.Request, rsp interface{}) error {
        start := time.Now()
        err := fn(ctx, req, rsp)
        latency := time.Since(start)
        metrics.Inc("requests_total", req.Endpoint(), errorLabel(err))
        metrics.Observe("request_latency_seconds", latency, req.Endpoint())
        return err
    }
}

Tracing

Distributed tracing links calls across services.

Propagation strategy:

Local Development Strategy

Start with only structured logs. Add metrics when operating multiple services. Introduce tracing once debugging multi-hop latency or failures.

Roadmap (Planned Enhancements)

Deployment Recommendations

Scale Suggested Stack
Dev Console logs only
Staging Logs + basic metrics (Prometheus)
Prod (basic) Logs + metrics + sampling traces
Prod (complex) Full tracing + profiling + anomaly detection

Troubleshooting

Symptom Cause Fix
Missing trace IDs in logs Context not propagated Ensure wrappers add IDs
Metrics server empty Endpoint not scraped Verify Prometheus config
High cardinality metrics Dynamic labels Reduce labeled dimensions

← Previous
Next →