All Products
Search
Document Center

Cloud Monitor:Go components and frameworks supported by ARMS Application Monitoring

Last Updated:Oct 12, 2026

This topic describes the operating system and architecture requirements for Go application monitoring and lists the supported third-party components and frameworks.

Operating system requirements

Compiler name

Operating system

Architecture

instgo_linux_amd64

Linux

amd64

instgo_linux_arm64

Linux

arm64

instgo_darwin_amd64

Darwin

amd64

instgo_darwin_arm64

Darwin

arm64

instgo_windows_amd64.exe

Windows

amd64

Supported Go versions

1.18 and later

Supported plugin versions

Messaging

Component

Repository address

Minimum version

Maximum version

AMQP

https://github.com/rabbitmq/amqp091-go

v1.4.0

v1.15.0

Segmentio Kafka

https://github.com/segmentio/kafka-go

v0.4.10

No limit

RocketMQ Client Go

https://github.com/apache/rocketmq-client-go

v2.1.0

v2.1.2

RocketMQ Client

https://github.com/apache/rocketmq-clients/tree/master/golang

v5.0.0

v5.1.4

IBM Sarama

https://github.com/IBM/sarama

v1.22.0

v1.60.1

Shopify Sarama

https://github.com/Shopify/sarama

v1.22.0

v1.38.1

Mqtt Server

https://github.com/mochi-mqtt/server

v2.6.0

No limit

franz-go

https://github.com/twmb/franz-go

v1.18.0

No limit

confluent-kafka-go

https://github.com/confluentinc/confluent-kafka-go

v1.7.0

No limit

streadway-amqp

https://github.com/streadway/amqp

v1.0.0

No limit

RPC frameworks

Component

Repository address

Minimum version

Maximum version

Beego

https://github.com/beego/beego

v1.2.0

No limit

Dubbo

https://github.com/apache/dubbo-go

v3.0.1

No limit

Echo

https://github.com/labstack/echo

v4.0.0

No limit

FastHTTP

https://github.com/valyala/fasthttp

v1.6.0

No limit

Fiber

https://github.com/gofiber/fiber

v2.43.0

No limit

Gin

https://github.com/gin-gonic/gin

v1.7.0

No limit

GoFrame

https://github.com/gogf/gf

v2.4.0

No limit

Go Micro

https://github.com/go-micro/go-micro

v4.9.0

v5.30.0

Go Restful

https://github.com/emicklei/go-restful

v3.7.0

No limit

Go Zero

https://github.com/zeromicro/go-zero

v1.5.0

No limit

gRPC

https://github.com/grpc/grpc-go

v1.20.1

No limit

Iris

https://github.com/kataras/iris

v12.0.0

No limit

Kitex

https://github.com/cloudwego/kitex

v0.5.1

No limit

Kratos

https://github.com/go-kratos/kratos

v2.1.2

v3.0.0

Macaron

https://github.com/go-macaron/macaron

v1.1.0

No limit

Mux

https://github.com/gorilla/mux

v1.3.0

No limit

Net/HTTP

https://pkg.go.dev/net/http

v1.18

No limit

Thrift

https://github.com/apache/thrift/tree/master/lib/go

v0.19.0

v0.20.0

Hertz

https://github.com/cloudwego/hertz

v0.8.0

v0.10.6

Rpcx

https://github.com/smallnest/rpcx

v1.9.0

No limit

Req

https://github.com/imroc/req

v3.0.0

No limit

SQL/NoSQL

Component

Repository address

Minimum version

Maximum version

Go Elasticsearch

https://github.com/elastic/go-elasticsearch

v7.0.0

No limit

Go Redis

https://github.com/redis/go-redis

v8.10.0

No limit

Go SQL Driver

https://github.com/go-sql-driver/mysql

v1.4.0

v1.9.3

Gorm

https://github.com/go-gorm/gorm

v1.20.12

No limit

GORM MySQL

https://github.com/go-gorm/mysql

v1.0.4

No limit

Go standard library database/sql

https://pkg.go.dev/database/sql

v1.18

No limit

Mongo

https://github.com/mongodb/mongo-go-driver

v1.11.1

No limit

PostgreSQL

https://github.com/go-pg/pg

v10.10.0

v10.15.1

Redis Go

https://github.com/gomodule/redigo

v1.9.0

v1.9.3

Rueidis

https://github.com/redis/rueidis

v1.0.30

No limit

sqlx

https://github.com/jmoiron/sqlx

v1.3.0

No limit

Xorm

https://github.com/go-xorm

v0.2.2

No limit

ClickHouse

https://github.com/ClickHouse/clickhouse-go

v2.0.1

No limit

GORM ClickHouse

https://github.com/go-gorm/clickhouse

v0.2.0

No limit

Cassandra

https://github.com/apache/cassandra-gocql-driver

v1.3.0

No limit

Logging

Component

Repository address

Minimum version

Maximum version

Gokit Log

https://github.com/go-kit/log

v0.1.0

v0.2.1

Zerolog

https://github.com/rs/zerolog

v1.10.0

No limit

Zap

https://github.com/uber-go/zap

v1.13.0

No limit

Logrus

https://github.com/sirupsen/logrus

v1.4.2

No limit

Log

https://pkg.go.dev/log

v1.21

No limit

Slog

https://pkg.go.dev/log/slog

v1.21

No limit

go-zero logx

https://github.com/zeromicro/go-zero/tree/master/core/logx

v1.6.5

No limit

Kratos log

https://github.com/go-kratos/kratos/blob/main/middleware/logging

v2.1.2

v2.4.0

Task scheduling

Component

Repository address

Minimum version

Maximum version

Cron

https://github.com/robfig/cron

v3.0.0

No limit

XxlJob

https://github.com/xxl-job/xxl-job-executor-go

v1.2.0

No limit

Asynq

https://github.com/hibiken/asynq

v0.23.0

No limit

Trace SDKs

Component

Repository address

Minimum version

Maximum version

OpenTracing SDK

https://github.com/opentracing/opentracing-go

v1.1.0

v1.2.0

OpenTelemetry SDK

https://github.com/open-telemetry/opentelemetry-go

v1.6.0

No limit

AI SDKs

Component

Repository address

Minimum version

Maximum version

Dify Sandbox

https://github.com/langgenius/dify-sandbox

v0.2.0

No limit

Dify Plugin Daemon

https://github.com/langgenius/dify-plugin-daemon

v0.0.6

No limit

MCP SDK

https://github.com/mark3labs/mcp-go

v0.20.0

No limit

Langchain SDK

https://github.com/tmc/langchaingo

v0.1.0

No limit

openai-go

https://github.com/openai/openai-go

v1.5.0

No limit

go-openai

https://github.com/sashabaranov/go-openai

v1.30.0

No limit

deepseek

https://github.com/cohesion-org/deepseek-go

v1.3.0

No limit

coze-studio

https://github.com/coze-dev/coze-studio

v0.2.0

No limit

adk-go

https://github.com/google/adk-go

v0.3.0

No limit

eino

https://github.com/cloudwego/eino

v0.4.0

No limit

Google GenAI

https://github.com/googleapis/go-genai

v1.30.0

No limit (Google GenAI Stream mode currently only supports versions v1.36.0, v1.37.0, v1.45.0, and v1.46.0)

anthropic-sdk-go

https://github.com/anthropics/anthropic-sdk-go

v1.25.0

No limit

volcengine-go-sdk

https://github.com/volcengine/volc-sdk-golang

v1.2.21

No limit

new-api

https://github.com/QuantumNous/new-api

v0.12.8

No limit

milvus client

https://github.com/milvus-io/milvus/tree/master/client

v2.5.0

No limit

beads

https://github.com/gastownhall/beads

v1.0.0

No limit

trpc-go-agent

https://github.com/trpc-group/trpc-agent-go

v0.1.0

No limit

agent-orchestrator

https://github.com/AgentWrapper/agent-orchestrator

v0.1.0

No limit

bifrost

https://github.com/maximhq/bifrost

v1.4.0

No limit

e2b

https://github.com/openkruise/agents-api/

v0.4.0-alpha4

No limit

Alibaba Cloud SDKs

Component

Repository address

Minimum version

Maximum version

FC Go SDK

https://github.com/aliyun/fc-runtime-go-sdk

v0.2.9

v0.3.1

OTS Go SDK

https://github.com/aliyun/aliyun-tablestore-go-sdk

v1.5.0

No limit

Other SDKs

Component

Repository address

Minimum version

Maximum version

ants pool

https://github.com/panjf2000/ants

v1.1.0

No limit

K8s Client

https://github.com/kubernetes/client-go

v0.27.0

v0.32.3

K8s Controller Runtime

https://github.com/kubernetes-sigs/controller-runtime

v0.13.1

v0.23.3

FAQ

How do I achieve unbroken chain tracing with Asynq versions below v0.26.0?

Maintain trace continuity in Asynq versions earlier than v0.26.0

Why are traces broken when I use a messaging framework?

Because of implementation details in some messaging frameworks, the Go agent has limitations when propagating the trace context. The limitations are as follows:

Component

Repository address

Producer

Consumer

AMQP

https://github.com/rabbitmq/amqp091-go

No limitations.

Only Receive spans are collected. Spans created by downstream calls based on the message content cannot be linked to the Receive span.

Segmentio Kafka

https://github.com/segmentio/kafka-go

No limitations.

Only Receive spans are collected. Spans created by downstream calls based on the message content cannot be linked to the Receive span.

Shopify Sarama

https://github.com/IBM/sarama

When you use AsyncProducer, the Publish span cannot be linked to its parent call span.

Only Receive spans are collected. Spans created by downstream calls based on the message content cannot be linked to the Receive span.

IBM Sarama

https://github.com/IBM/sarama

When you use AsyncProducer, the Publish span cannot be linked to its parent call span.

Only Receive spans are collected. Spans created by downstream calls based on the message content cannot be linked to the Receive span.

RocketMQ Client Go

https://github.com/apache/rocketmq-client-go

No limitations.

  • Only PushConsumer is supported.

  • If multiple messages are consumed at once and a downstream service is called, the spans for the downstream calls are all attached to the span of the last message in the batch. This issue does not occur when consuming a single message at a time.

RocketMQ Client

https://github.com/apache/rocketmq-clients/tree/master/golang

No limitations.

Only Receive spans are collected. Spans created by downstream calls based on the message content cannot be linked to the Receive span.

Why can't I see database/NoSQL calls in the console when I use a Redis client?

Because of framework-specific implementations, the Go agent cannot effectively instrument actions that are executed before the init function.

Initialize the Redis client or database client in the init function.

// Invalid code
var rdb = redis.NewClient(&redis.Options{
	Addr:     "localhost:6379",
	Password: "", // no password set
	DB:       0,  // use default DB
})

// Valid code
var rdb *redis.Client

func init() {
	rdb = redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "", // no password set
		DB:       0,  // use default DB
	})
}

Why can't I see my custom OTel SDK instrumentation?

  1. On the Custom Configurations page, select opentelemetry-plugin in the Probe switch settings section. Then, restart the application.

  2. The default sample rate is 10%. If you have a low volume of requests, you might not see any data. You can adjust the sample rate as needed.

How do I add a custom span for RabbitMQ?

The following code sample shows how to add a custom span:

import (
    "context"
    oTrace "go.opentelemetry.io/otel/trace"
    "go.opentelemetry.io/otel/propagation"
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/trace"
  )
  
  // Create a span for each message in the message handler.
  func handle(deliveries <-chan amqp.Delivery, done chan error) {
      cleanup := func() {
          Log.Printf("handle: deliveries channel closed")
          done <- nil
      }
  
      defer cleanup()
      for d := range deliveries {
        var headerMap propagation.MapCarrier
        headerMap = make(map[string]string)
        headerMap["traceparent"] = delivery.Headers["traceparent"]
        ctx := otel.GetTextMapPropagator().Extract(context.Background(), headerMap)
        ctx = oTrace.ContextWithSpanContext(context.Background(), oTrace.SpanFromContext(ctx).SpanContext())
        tracer = otel.GetTracerProvider().Tracer("")
        opts := append([]oTrace.SpanStartOption{}, oTrace.WithSpanKind(oTrace.SpanKindConsumer))
        ctx, span := tracer.Start(context.Background(), "mq", opts...)
        defer span.End()
        //other process
      }
  }
  
  

How do I add a custom span for Kafka?

The following code sample shows how to add a custom span:

import (
    kafka "github.com/segmentio/kafka-go"
      "go.opentelemetry.io/otel"
      "go.opentelemetry.io/otel/propagation"
      "go.opentelemetry.io/otel/trace"
      oTrace "go.opentelemetry.io/otel/trace"
  )
  
  // Create a span for each message in the message handler.
  func handle(msg kafka.Message) {
      for _, attr := range msg.Headers {
          if attr.Key == "traceparent" {
              var headerMap propagation.MapCarrier
              headerMap = make(map[string]string)
              headerMap["traceparent"] = string(attr.Value)
              ctx := otel.GetTextMapPropagator().Extract(context.Background(), headerMap)
              ctx = oTrace.ContextWithSpanContext(context.Background(), oTrace.SpanFromContext(ctx).SpanContext())
              tracer := otel.GetTracerProvider().Tracer("")
              opts := append([]oTrace.SpanStartOption{}, oTrace.WithSpanKind(oTrace.SpanKindConsumer))
              ctx, span := tracer.Start(context.Background(), "mq", opts...)
              defer span.End()
              //other process
          }
  
      }
  }