Topik ini menjelaskan persyaratan sistem operasi dan arsitektur untuk pemantauan aplikasi Go, serta komponen dan framework pihak ketiga yang didukung.
Persyaratan sistem operasi
Nama build tool | Sistem operasi | Arsitektur |
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 |
Versi Go yang didukung
Versi 1.18 dan yang lebih baru
Versi plug-in yang didukung
Message
Component | Repository address | Earlier versions | Later versions |
AMQP | v1.4.0 | v1.10.0 | |
Segmentio Kafka | v0.4.10 | v0.4.49 | |
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 | v1.22.0 | v1.46.3 | |
Shopify Sarama | v1.22.0 | v1.38.1 | |
Mqtt Server | v2.6.0 | No limit | |
franz-go | v1.18.0 | No limit | |
confluent-kafka-go | v1.7.0 | No limit | |
streadway-amqp | v1.0.0 | No limit |
RPC frameworks
Component | Repository Address | Lower versions | Later versions |
Beego | v1.2.0 | No limit | |
Dubbo | v3.0.1 | v3.3.0 | |
Echo | v4.0.0 | No limit | |
FastHTTP | v1.45.0 | No limit | |
Fiber | v2.43.0 | No limit | |
Gin | v1.7.0 | No limit | |
GoFrame | v2.4.0 | No limit | |
Go Micro | v4.9.0 | v5.19.1 | |
Go Restful | v3.7.0 | No limit | |
Go Zero | v1.5.0 | No limit | |
gRPC | v1.44.0 | No limit | |
Iris | v12.0.0 | v12.2.11 | |
Kitex | v0.5.1 | No limit | |
Kratos | v2.1.2 | v2.9.2 | |
Macaron | v1.1.0 | No limit | |
Mux | v1.3.0 | No limit | |
Net/HTTP | v1.18 | No limit | |
Thrift | v0.19.0 | v0.20.0 | |
Hertz | v0.8.0 | v0.10.3 | |
Rpcx | v1.9.0 | No limit | |
Req | v3.0.0 | No limit |
SQL/NoSQL
Component | Repository Address | Minimum version | Later versions |
Go Elasticsearch | v7.0.0 | No limit | |
Go Redis | v8.10.0 | No limit | |
Go SQL Driver | v1.4.0 | v1.9.3 | |
Gorm | v1.20.12 | v1.31.1 | |
GORM MySQL | v1.0.4 | No limit | |
Go standard library MySQL | v1.18 | No limit | |
Mongo | v1.11.1 | No limit | |
PostgreSQL | v10.10.0 | v10.15.0 | |
Redis Go | v1.9.0 | v1.9.3 | |
Rueidis | v1.0.30 | No limit | |
sqlx | v1.3.0 | v1.4.0 | |
Xorm | v0.2.2 | No limit | |
ClickHouse | v2.0.1 | No limit | |
GORM ClickHouse | v0.2.0 | No limit |
Logging
Component | Repository Address | Earlier Version | Newer version |
Gokit Log | v0.1.0 | v0.2.1 | |
Zerolog | v1.10.0 | No limit | |
Zap | v1.13.0 | No limit | |
Logrus | v1.5.0 | No limit | |
Log | v1.21 | No limit | |
Slog | v1.21 | No limit | |
go-zero logx | v1.6.5 | No limit | |
Kratos log | https://github.com/go-kratos/kratos/blob/main/middleware/logging | v2.1.2 | v2.4.0 |
Job scheduling
Component | Repository Address | Minimum version | Higher version |
Cron | v3.0.0 | No limit | |
XxlJob | v1.2.0 | No limit | |
Asynq | v0.23.0 | No limit |
Trace SDK
Component | Repository Address | Minimum version | Advanced Edition |
OpenTracing SDK | v1.1.0 | v1.2.0 | |
OpenTelemetry SDK | v1.6.0 | v1.40.0 |
AI SDK
Component | Repository address | Minimum version | Higher versions |
Dify Sandbox | v0.2.0 | No limit | |
Dify Plugin Daemon | v0.0.6 | No limit | |
MCP SDK | v0.20.0 | No limit | |
Langchain SDK | v0.1.0 | No limit | |
openai-go | v1.5.0 | No limit | |
go-openai | v1.30.0 | No limit | |
deepseek | v1.3.0 | No limit | |
coze-studio | v0.2.0 | No limit | |
adk-go | v0.3.0 | No limit | |
eino | v0.4.0 | No limit | |
Google GenAI | v1.30.0 | No limit (Mode Stream Google GenAI saat ini hanya mendukung versi v1.36.0, v1.37.0, v1.45.0, dan v1.46.0.) |
Alibaba Cloud SDK
Component | Repository address | Minimum version | Higher version |
FC Go SDK | v0.2.9 | v0.3.1 | |
OTS Go SDK | v1.5.0 | No limit |
Other SDKs
Component | Repository address | Earlier versions | Newer version |
ants pool | v1.1.0 | No limit | |
K8s Client | v0.27.0 | v0.32.3 | |
K8s Controller Runtime | v0.13.1 | v0.23.3 |
FAQ
Bagaimana cara mempertahankan kontinuitas jejak untuk versi Asynq sebelum v0.26.0?
Untuk informasi selengkapnya, lihat Bagaimana cara mempertahankan kontinuitas jejak untuk versi Asynq sebelum v0.26.0?.
Mengapa terjadi diskontinuitas jejak saat menggunakan framework message?
Karena detail implementasi pada framework message tertentu, agen Go saat ini memiliki keterbatasan dalam menyebarkan konteks jejak (trace context) melalui framework tersebut.
Component | Repository URL | Producer | Consumer |
AMQP | No limit. | Hanya Receive Span yang direkam. Span yang dihasilkan dari panggilan downstream berdasarkan konten pesan tidak dapat dikaitkan dengan Receive Span tersebut. | |
Segmentio Kafka | No limit. | Hanya Receive Span yang direkam. Span yang dihasilkan dari panggilan downstream berdasarkan konten pesan tidak dapat dikaitkan dengan Receive Span tersebut. | |
Shopify Sarama | Saat menggunakan AsyncProducer, Publish Span tidak dapat dikaitkan dengan Span pemanggil induknya. | Hanya Receive Span yang direkam. Span yang dihasilkan dari panggilan downstream berdasarkan konten pesan tidak dapat dikaitkan dengan Receive Span tersebut. | |
IBM Sarama | Saat menggunakan AsyncProducer, Publish Span tidak dapat dikaitkan dengan Span pemanggil induknya. | Hanya Receive Span yang direkam. Span yang dihasilkan dari panggilan downstream berdasarkan konten pesan tidak dapat dikaitkan dengan Receive Span tersebut. | |
RocketMQ Client Go | No limit. |
| |
RocketMQ Client | https://github.com/apache/rocketmq-clients/tree/master/golang | No limit. | Hanya Receive Span yang direkam. Span yang dihasilkan dari panggilan downstream berdasarkan konten pesan tidak dapat dikaitkan dengan Receive Span tersebut. |
Mengapa saya tidak melihat panggilan database atau NoSQL di Konsol saat menggunakan klien Redis?
Karena detail implementasi framework, agen Go tidak dapat menginstrumentasi aksi yang dijalankan sebelum fungsi init.
Pastikan Anda menginisialisasi klien Redis atau database di dalam fungsi init.
// Pendekatan yang tidak valid
var rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // tidak ada password yang diatur
DB: 0, // gunakan DB default
})
// Pendekatan yang valid
var rdb *redis.Client
func init() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // tidak ada password yang diatur
DB: 0, // gunakan DB default
})
}
Mengapa saya tidak melihat instrumentasi OpenTelemetry SDK kustom saya?
Di halaman Custom Configuration, pilih opentelemetry-plugin di bagian Agent Switch Settings, lalu restart aplikasi Anda.

Laju sampel (sample rate) default adalah 10%. Anda mungkin tidak melihat jejak jika jumlah permintaan sedikit. Anda dapat menyesuaikan laju sampel sesuai kebutuhan.
Bagaimana cara menambahkan span kustom untuk RabbitMQ?
Gunakan contoh kode berikut untuk menambahkan span kustom:
import (
"context"
oTrace "go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/trace"
)
// Buat span untuk setiap pesan di 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()
// proses lainnya
}
}
Bagaimana cara menambahkan span kustom untuk Kafka?
Gunakan contoh kode berikut untuk menambahkan span kustom:
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"
)
// Buat span untuk setiap pesan di 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)
tracer := otel.GetTracerProvider().Tracer("")
opts := append([]oTrace.SpanStartOption{}, oTrace.WithSpanKind(oTrace.SpanKindConsumer))
ctx, span := tracer.Start(ctx, "mq", opts...)
defer span.End()
// proses lainnya
}
}
}