全部產品
Search
文件中心

Application Real-Time Monitoring Service:ARMS應用監控支援的Go組件和架構

更新時間:Jan 30, 2026

本文列出了Go應用監控對作業系統和架構的要求,以及支援的第三方組件和架構。

作業系統要求

編譯工具名

作業系統

架構

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

支援的Go版本

1.18及以上版本

支援的外掛程式版本

訊息

組件

倉庫地址

低版本

高版本

AMQP

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

v1.4.0

v1.10.0

Segmentio Kafka

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

v0.4.10

v0.4.49

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.3

IBM Sarama

https://github.com/IBM/sarama

v1.22.0

v1.46.3

Shopify Sarama

https://github.com/Shopify/sarama

v1.22.0

v1.38.1

Mqtt Server

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

v2.6.0

無限制

franz-go

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

v1.18.0

無限制

confluent-kafka-go

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

v1.7.0

無限制

streadway-amqp

https://github.com/streadway/amqp

v1.0.0

無限制

RPC架構

組件

倉庫地址

低版本

高版本

Beego

https://github.com/beego/beego

v1.2.0

無限制

Dubbo

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

v3.0.1

v3.3.0

Echo

https://github.com/labstack/echo

v4.0.0

無限制

FastHTTP

https://github.com/valyala/fasthttp

v1.45.0

無限制

Fiber

https://github.com/gofiber/fiber

v2.43.0

無限制

Gin

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

v1.7.0

無限制

GoFrame

https://github.com/gogf/gf

v2.4.0

無限制

Go Micro

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

v4.9.0

v5.12.0

Go Restful

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

v3.7.0

無限制

Go Zero

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

v1.5.0

無限制

gRPC

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

v1.44.0

無限制

Iris

https://github.com/kataras/iris

v12.0.0

v12.2.11

Kitex

https://github.com/cloudwego/kitex

v0.5.1

無限制

Kratos

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

v2.1.2

v2.9.2

Macaron

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

v1.1.0

無限制

Mux

https://github.com/gorilla/mux

v1.3.0

無限制

Net/HTTP

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

v1.18

無限制

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.3

SQL/NOSQL

組件

倉庫地址

低版本

高版本

Go Elasticsearch

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

v7.0.0

無限制

Go Redis

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

v8.10.0

無限制

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

v1.31.1

GORM MySQL

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

v1.0.4

無限制

Go標準庫MySQL

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

v1.18

無限制

Mongo

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

v1.11.1

無限制

PostgreSQL

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

v10.10.0

v10.15.0

Redis Go

https://github.com/gomodule/redigo

v1.9.0

v1.9.3

Rueidis

https://github.com/redis/rueidis

v1.0.30

無限制

sqlx

https://github.com/jmoiron/sqlx

v1.3.0

v1.4.0

Xorm

https://github.com/go-xorm

v0.2.2

無限制

ClickHouse

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

v2.0.1

無限制

GORM ClickHouse

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

v0.2.0

無限制

日誌

組件

倉庫地址

低版本

高版本

Gokit Log

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

v0.1.0

v0.2.1

Zerolog

https://github.com/rs/zerolog

v1.10.0

無限制

Zap

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

v1.13.0

無限制

Logrus

https://github.com/sirupsen/logrus

v1.5.0

無限制

Log

https://pkg.go.dev/log

v1.21

無限制

Slog

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

v1.21

無限制

go-zero logx

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

v1.6.5

無限制

Kratos log

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

v2.1.2

v2.4.0

任務調度

組件

倉庫地址

低版本

高版本

Cron

https://github.com/robfig/cron

v3.0.0

無限制

XxlJob

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

v1.2.0

無限制

Trace SDK

組件

倉庫地址

低版本

高版本

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

v1.39.0

AI SDK

組件

倉庫地址

低版本

高版本

Dify Sandbox

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

v0.2.0

無限制

Dify Plugin Daemon

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

v0.0.6

無限制

MCP SDK

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

v0.20.0

無限制

Langchain SDK

https://github.com/tmc/langchaingo

v0.1.0

無限制

openai-go

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

v1.5.0

無限制

go-openai

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

v1.30.0

無限制

deepseek

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

v1.3.0

無限制

coze-studio

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

v0.2.0

無限制

阿里雲SDK

組件

倉庫地址

低版本

高版本

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

無限制

其他SDK

組件

倉庫地址

低版本

高版本

ants pool

https://github.com/panjf2000/ants

v1.1.0

無限制

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.22.4

常見問題

為什麼使用訊息架構時存在斷鏈?

受限於訊息架構的具體實現,目前的版本的Go探針對某些訊息架構的Trace上下文傳遞存在一定限制,具體如下:

組件

倉庫地址

Producer

Consumer

AMQP

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

無限制。

僅統計Receive Span,基於訊息內容調用下遊產生的Span無法與Receive Span串聯。

Segmentio Kafka

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

無限制。

僅統計Receive Span,基於訊息內容調用下遊產生的Span無法與Receive Span串聯。

Shopify Sarama

https://github.com/IBM/sarama

使用AsyncProducer時,Publish Span無法與所屬調用的Span串聯。

僅統計Receive Span,基於訊息內容調用下遊產生的Span無法與Receive Span串聯。

IBM Sarama

https://github.com/IBM/sarama

使用AsyncProducer時,Publish Span無法與所屬調用的Span串聯。

僅統計Receive Span,基於訊息內容調用下遊產生的Span無法與Receive Span串聯。

RocketMQ Client Go

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

無限制。

  • 僅支援PushConsumer。

  • 對於一次性消費多條訊息,且消費中存在調用下遊的情況,調用下遊的Span都會被掛到這一批消費的最後一條下面(一次消費單條訊息則不存在該問題)。

RocketMQ Client

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

無限制。

僅統計Receive Span,基於訊息內容調用下遊產生的Span無法與Receive Span串聯。

為什麼使用Redis資料庫的用戶端時控制台看不見資料庫/NoSQL相關調用?

受限於架構的具體實現,Go Agent無法對init函數執行之前的動作進行有效插樁。

請確保已在init函數中執行Redis用戶端或者資料庫用戶端的初始化動作。

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

// 生效寫法
var rdb *redis.Client

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

為什麼看不到自訂的OTel SDK埋點?

  1. 請在自訂配置頁面的探針開關設定地區選中opentelemetry-plugin,然後重啟應用。

    image

  2. 預設採樣率為10%,請求次數少的情況下可能會看不到,建議調整採樣率。

如何為RabbitMQ增加自訂Span?

增加自訂Span的範例程式碼如下:

import (
    "context"
    oTrace "go.opentelemetry.io/otel/trace"
    "go.opentelemetry.io/otel/propagation"
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/trace"
  )
  
  //在訊息的handle對每個訊息處理時候建立一個span
  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
      }
  }
  
  

如何為Kafka增加自訂Span?

增加自訂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"
  )
  
  //在訊息的handle對每個訊息處理時候建立一個span
  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)
              tracer := otel.GetTracerProvider().Tracer("")
              opts := append([]oTrace.SpanStartOption{}, oTrace.WithSpanKind(oTrace.SpanKindConsumer))
              ctx, span := tracer.Start(ctx, "mq", opts...)
              defer span.End()
              //other process
          }
  
      }
  }