Topik ini menjelaskan persyaratan sistem operasi dan arsitektur untuk pemantauan aplikasi Go, serta komponen dan framework pihak ketiga yang didukung.
Persyaratan sistem operasi
Nama alat build | 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
Komponen | Alamat repositori | Versi Sebelumnya | Versi yang Lebih Baru |
AMQP | v1.4.0 | v1.12.0 | |
Segmentio Kafka | v0.4.10 | no limit | |
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 |
Framework RPC
Komponen | Alamat Repositori | Versi Lebih Rendah | Versi yang Lebih Baru |
Beego | v1.2.0 | No limit | |
Dubbo | v3.0.1 | No limit | |
Echo | v4.0.0 | No limit | |
FastHTTP | v1.6.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.30.0 | |
Go Restful | v3.7.0 | No limit | |
Go Zero | v1.5.0 | No limit | |
gRPC | v1.20.1 | No limit | |
Iris | v12.0.0 | No limit | |
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
Komponen | Alamat Repositori | Versi minimum | Versi yang Lebih Baru |
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 | Unlimited | |
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.1 | |
Redis Go | v1.9.0 | v1.9.3 | |
Rueidis | v1.0.30 | No limit | |
sqlx | v1.3.0 | Unlimited | |
Xorm | v0.2.2 | No limit | |
ClickHouse | v2.0.1 | No limit | |
GORM ClickHouse | v0.2.0 | No limit | |
Cassandra | v1.3.0 | Unlimited |
Logging
Komponen | Alamat Repositori | Versi Awal | Versi Baru |
Gokit Log | v0.1.0 | v0.2.1 | |
Zerolog | v1.10.0 | No limit | |
Zap | v1.13.0 | No limit | |
Logrus | v1.4.2 | 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 |
Penjadwalan pekerjaan
Komponen | Alamat Repositori | Versi minimum | Versi lebih tinggi |
Cron | v3.0.0 | No limit | |
XxlJob | v1.2.0 | No limit | |
Asynq | v0.23.0 | No limit |
Trace SDK
Komponen | Alamat Repositori | Versi minimum | Edisi Lanjutan |
OpenTracing SDK | v1.1.0 | v1.2.0 | |
OpenTelemetry SDK | v1.6.0 | No upper limit |
AI SDK
Komponen | Alamat repositori | Versi minimum | Versi lebih tinggi |
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.) | |
anthropic-sdk-go | v1.25.0 | No limit | |
volcengine-go-sdk | v1.2.21 | No limit | |
new-api | v0.12.8 | No limit |
Alibaba Cloud SDK
Komponen | Alamat repositori | Versi minimum | Versi lebih tinggi |
FC Go SDK | v0.2.9 | v0.3.1 | |
OTS Go SDK | v1.5.0 | No limit |
SDK Lainnya
Komponen | Alamat repositori | Versi Sebelumnya | Versi baru |
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 lebih lanjut, 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 pesan tertentu, agen Go saat ini memiliki keterbatasan dalam menyebarkan konteks jejak (trace context) melalui framework tersebut.
Komponen | URL Repositori | Producer | Consumer |
AMQP | No limit. | Hanya Receive Span yang direkam. Span yang dihasilkan dari panggilan downstream berdasarkan konten pesan tidak dapat ditautkan ke Receive Span tersebut. | |
Segmentio Kafka | No limit. | Hanya Receive Span yang direkam. Span yang dihasilkan dari panggilan downstream berdasarkan konten pesan tidak dapat ditautkan ke Receive Span tersebut. | |
Shopify Sarama | Saat menggunakan AsyncProducer, Publish Span tidak dapat ditautkan ke Span pemanggil induknya. | Hanya Receive Span yang direkam. Span yang dihasilkan dari panggilan downstream berdasarkan konten pesan tidak dapat ditautkan ke Receive Span tersebut. | |
IBM Sarama | Saat menggunakan AsyncProducer, Publish Span tidak dapat ditautkan ke Span pemanggil induknya. | Hanya Receive Span yang direkam. Span yang dihasilkan dari panggilan downstream berdasarkan konten pesan tidak dapat ditautkan ke 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 ditautkan ke 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 disetel
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 disetel
DB: 0, // gunakan DB default
})
}
Mengapa saya tidak melihat instrumentasi OpenTelemetry SDK kustom saya?
Pada halaman Konfigurasi Kustom, pilih opentelemetry-plugin di bagian Pengaturan Switch Agent, lalu restart aplikasi Anda.
Laju sampel 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(ctx, "mq", opts...)
defer span.End()
// Logika pemrosesan pesan Anda di sini
}
}
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()
// Logika pemrosesan pesan Anda di sini
}
}
}