Topik ini menjelaskan persyaratan sistem operasi dan arsitektur untuk pemantauan aplikasi Go serta mencantumkan komponen dan framework pihak ketiga 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 dan versi setelahnya
Versi plugin yang didukung
Messaging
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 kerja 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 | No limit | |
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 | No limit | |
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 | No limit | |
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 | No limit | |
Log | v1.21 | No limit | |
Slog | v1.21 | No limit |
Penjadwalan tugas
Komponen | Alamat repositori | Versi minimum | Versi maksimum |
Cron | v3.0.0 | No limit |
Trace SDKs
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 | No limit | |
Dify Plugin Daemon | v0.0.6 | No limit | |
MCP SDK | v0.20.0 | No limit | |
Langchain SDK | v0.1.0 | No limit |
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 | No limit |
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 (trace) terputus saat saya menggunakan framework messaging?
Karena detail implementasi pada beberapa framework messaging, agen Go memiliki keterbatasan dalam menyebarkan konteks jejak (trace context). Keterbatasan tersebut adalah sebagai berikut:
Komponen | Alamat repositori | Producer | Consumer |
AMQP | Tidak ada keterbatasan. | Hanya rentang Receive yang dikumpulkan. Rentang yang dibuat oleh panggilan downstream berdasarkan konten pesan tidak dapat dihubungkan ke rentang Receive. | |
Segmentio Kafka | Tidak ada keterbatasan. | Hanya rentang Receive yang dikumpulkan. Rentang yang dibuat oleh panggilan downstream berdasarkan konten pesan tidak dapat dihubungkan ke rentang Receive. | |
Shopify Sarama | Saat Anda menggunakan AsyncProducer, rentang Publish tidak dapat dihubungkan ke rentang panggilan induknya. | Hanya rentang Receive yang dikumpulkan. Rentang yang dibuat oleh panggilan downstream berdasarkan konten pesan tidak dapat dihubungkan ke rentang Receive. | |
IBM Sarama | Saat Anda menggunakan AsyncProducer, rentang Publish tidak dapat dihubungkan ke rentang panggilan induknya. | Hanya rentang Receive yang dikumpulkan. Rentang yang dibuat oleh panggilan downstream berdasarkan konten 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 downstream berdasarkan konten pesan tidak dapat dihubungkan ke rentang Receive. |
Mengapa saya tidak melihat panggilan database/NoSQL di Konsol saat menggunakan client Redis?
Karena implementasi spesifik framework, agen Go tidak dapat melakukan instrumentasi secara efektif terhadap aksi yang dieksekusi sebelum fungsi init.
Inisialisasi client Redis atau client database di dalam fungsi init.
// Kode tidak valid
var rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // tidak ada password 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 password yang disetel
DB: 0, // gunakan DB default
})
}
Mengapa saya tidak melihat instrumentasi SDK OTel kustom saya?
-
Pada halaman Konfigurasi Kustom, pilih opentelemetry-plugin di bagian Pengaturan sakelar probe. Kemudian, restart 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 di penangan pesan.
func handle(deliveries <-chan amqp.Delivery, done chan error) {
cleanup := func() {
Log.Printf("handle: saluran deliveries 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 di 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
}
}
}