Topik ini menjelaskan persyaratan sistem operasi dan arsitektur untuk pemantauan aplikasi Go serta mencantumkan komponen pihak ketiga dan framework yang didukung.
Persyaratan sistem operasi
Nama kompiler | 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
1.18 atau yang lebih baru
Versi plugin yang didukung
Pesan
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
AMQP | v1.9.0 | v1.10.0 | |
Segmentio Kafka | v0.4.10 | v0.4.48 | |
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.2 |
IBM Sarama | v1.22.0 | v1.45.2 | |
Shopify Sarama | v1.22.0 | v1.38.1 |
Kerangka RPC
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
Beego | v1.2.0 | v2.3.8 | |
Dubbo | v3.0.1 | v3.3.0 | |
Echo | v4.0.0 | v4.13.4 | |
FastHTTP | v1.45.0 | v1.65.0 | |
Fiber | v2.43.0 | v2.52.8 | |
Gin | v1.7.0 | Tidak terbatas | |
GoFrame | v2.4.0 | v2.9.0 | |
Go Micro | v4.9.0 | v5.3.1 | |
Go Restful | v3.7.0 | v3.12.1 | |
Go Zero | v1.5.0 | v1.9.0 | |
gRPC | v1.44.0 | Tidak terbatas | |
Iris | v12.0.0 | v12.2.11 | |
Kitex | v0.5.1 | v0.14.1 | |
Kratos | v2.1.2 | v2.8.4 | |
Macaron | v1.1.0 | v1.5.0 | |
Mux | v1.3.0 | v1.8.1 | |
Net/HTTP | v1.18 | Tidak terbatas | |
Thrift | v0.19.0 | v0.20.0 | |
Hertz | v0.8.0 | v0.10.2 |
SQL/NoSQL
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
Go Elasticsearch | v8.0.0 | v8.18.1 | |
Go Redis | v8.10.0 | v9.11.0 | |
Go SQL Driver | v1.4.0 | v1.9.3 | |
Gorm | v1.20.12 | v1.30.0 | |
GORM MySQL | v1.0.4 | v1.5.7 | |
Go standard library database/sql | v1.18 | v1.24 | |
Mongo | v1.11.1 | v1.17.3 | |
PostgreSQL | v10.10.0 | v10.14.0 | |
Redis Go | v1.9.0 | v1.9.2 |
Logging
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
Gokit Log | v0.1.0 | v0.2.1 | |
Zerolog | v1.10.0 | v1.34.0 | |
Zap | v1.13.0 | v1.27.0 | |
Logrus | v1.5.0 | Tidak ada batas | |
Log | v1.21 | Tidak ada batas | |
Slog | v1.21 | Tidak ada batas |
Penjadwalan Tugas
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
Cron | v3.0.0 | Tidak ada batas |
SDK Trace
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
OpenTracing SDK | v1.1.0 | v1.2.0 | |
OpenTelemetry SDK | v1.6.0 | v1.37.0 |
AI SDKs
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
Dify Sandbox | v0.2.0 | Tidak terbatas | |
Dify Plugin Daemon | v0.0.6 | Tidak terbatas | |
MCP SDK | v0.20.0 | Tidak terbatas | |
Langchain SDK | v0.1.0 | Tidak terbatas |
Alibaba Cloud SDKs
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
FC Go SDK | v0.2.9 | v0.3.1 | |
OTS Go SDK | v1.5.0 | Tidak terbatas |
SDK Lainnya
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
K8s Client | v0.27.0 | v0.32.3 | |
K8s Controller Runtime | v0.13.1 | v0.18.7 |
FAQ
Mengapa jejak terputus ketika saya menggunakan framework pesan?
Karena detail implementasi di beberapa framework pesan, agen Go memiliki keterbatasan dalam menyebarkan konteks jejak. Keterbatasannya adalah sebagai berikut:
Komponen | Alamat repositori | Produsen | Konsumen |
AMQP | Tidak ada batasan. | Hanya rentang Receive yang dikumpulkan. Rentang yang dibuat oleh panggilan hilir berdasarkan isi pesan tidak dapat dihubungkan ke rentang Receive. | |
Segmentio Kafka | Tidak ada keterbatasan. | Hanya rentang Receive yang dikumpulkan. Rentang yang dibuat oleh panggilan hilir berdasarkan isi pesan tidak dapat dihubungkan ke rentang Receive. | |
Shopify Sarama | Saat Anda menggunakan AsyncProducer, rentang Publish tidak dapat dihubungkan dengan rentang pemanggilan induknya. | Hanya rentang Receive yang dikumpulkan. Rentang yang dibuat oleh panggilan hilir berdasarkan isi pesan tidak dapat dihubungkan ke rentang Receive. | |
IBM Sarama | Saat Anda menggunakan AsyncProducer, rentang Publish tidak dapat dihubungkan dengan rentang pemanggilan induknya. | Hanya rentang Receive yang dikumpulkan. Rentang yang dibuat oleh panggilan hilir berdasarkan isi pesan tidak dapat dihubungkan ke rentang Receive. | |
RocketMQ Client Go | Tidak ada keterbatasan. |
| |
RocketMQ Client | https://github.com/apache/rocketmq-clients/tree/master/golang | Tidak ada keterbatasan. | Hanya rentang Receive yang dikumpulkan. Rentang yang dibuat oleh panggilan hilir berdasarkan isi pesan tidak dapat dihubungkan ke rentang Receive. |
Mengapa saya tidak bisa melihat panggilan database/NoSQL di Konsol saat menggunakan klien Redis?
Karena implementasi spesifik framework, agen Go tidak dapat secara efektif menginstrumen tindakan yang dieksekusi sebelum fungsi init.
Inisialisasi klien Redis atau klien database dalam fungsi init.
// Kode tidak valid
var rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // tidak ada kata sandi yang disetel
DB: 0, // gunakan DB default
})
// Kode valid
var rdb *redis.Client
func init() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // tidak ada kata sandi yang disetel
DB: 0, // gunakan DB default
})
}
Mengapa saya tidak bisa melihat instrumen SDK OTel kustom saya?
Pada halaman Konfigurasi Kustom, pilih opentelemetry-plugin di bagian Pengaturan Saklar Probe. Kemudian, mulai ulang aplikasi.

Laju sampel default adalah 10%. Jika volume permintaan Anda rendah, Anda mungkin tidak melihat data apa pun. Anda dapat menyesuaikan laju sampel sesuai kebutuhan.
Bagaimana cara menambahkan rentang kustom untuk RabbitMQ?
Contoh kode berikut menunjukkan cara menambahkan rentang kustom:
import (
"context"
oTrace "go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/trace"
)
// Buat rentang untuk setiap pesan dalam penangan pesan.
func handle(deliveries <-chan amqp.Delivery, done chan error) {
cleanup := func() {
Log.Printf("handle: saluran pengiriman ditutup")
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 rentang kustom untuk Kafka?
Contoh kode berikut menunjukkan cara menambahkan rentang 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 rentang untuk setiap pesan dalam penangan pesan.
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()
// proses lainnya
}
}
}