Cette rubrique décrit les exigences relatives au système d'exploitation et à l'architecture pour la surveillance des applications Go, ainsi que les composants tiers et les frameworks pris en charge.
Exigences relatives au système d'exploitation
|
Nom de l'outil de compilation |
Système d'exploitation |
Architecture |
|
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 |
Versions Go prises en charge
Version 1.18 et ultérieures
Versions de plug-in prises en charge
Messagerie
|
Composant |
Adresse du dépôt |
Versions antérieures |
Versions ultérieures |
|
AMQP |
v1.4.0 |
v1.13.0 |
|
|
Segmentio Kafka |
v0.4.10 |
Aucune limite |
|
|
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.60.1 |
|
|
Shopify Sarama |
v1.22.0 |
v1.38.1 |
|
|
Mqtt Server |
v2.6.0 |
Aucune limite |
|
|
franz-go |
v1.18.0 |
Aucune limite |
|
|
confluent-kafka-go |
v1.7.0 |
Aucune limite |
|
|
streadway-amqp |
v1.0.0 |
Aucune limite |
Frameworks RPC
|
Composant |
Adresse du dépôt |
Versions inférieures |
Versions ultérieures |
|
Beego |
v1.2.0 |
Aucune limite |
|
|
Dubbo |
v3.0.1 |
Aucune limite |
|
|
Echo |
v4.0.0 |
Aucune limite |
|
|
FastHTTP |
v1.6.0 |
Aucune limite |
|
|
Fiber |
v2.43.0 |
Aucune limite |
|
|
Gin |
v1.7.0 |
Aucune limite |
|
|
GoFrame |
v2.4.0 |
Aucune limite |
|
|
Go Micro |
v4.9.0 |
v5.30.0 |
|
|
Go Restful |
v3.7.0 |
Aucune limite |
|
|
Go Zero |
v1.5.0 |
Aucune limite |
|
|
gRPC |
v1.20.1 |
Aucune limite |
|
|
Iris |
v12.0.0 |
Aucune limite |
|
|
Kitex |
v0.5.1 |
Aucune limite |
|
|
Kratos |
v2.1.2 |
v2.9.2 |
|
|
Macaron |
v1.1.0 |
Aucune limite |
|
|
Mux |
v1.3.0 |
Aucune limite |
|
|
Net/HTTP |
v1.18 |
Aucune limite |
|
|
Thrift |
v0.19.0 |
v0.20.0 |
|
|
Hertz |
v0.8.0 |
v0.10.3 |
|
|
Rpcx |
v1.9.0 |
Aucune limite |
|
|
Req |
v3.0.0 |
Aucune limite |
SQL/NoSQL
|
Composant |
Adresse du dépôt |
Version minimale |
Versions ultérieures |
|
Go Elasticsearch |
v7.0.0 |
Aucune limite |
|
|
Go Redis |
v8.10.0 |
Aucune limite |
|
|
Go SQL Driver |
v1.4.0 |
v1.9.3 |
|
|
Gorm |
v1.20.12 |
Aucune limite |
|
|
GORM MySQL |
v1.0.4 |
Aucune limite |
|
|
Bibliothèque standard Go MySQL |
v1.18 |
Aucune limite |
|
|
Mongo |
v1.11.1 |
Aucune limite |
|
|
PostgreSQL |
v10.10.0 |
v10.15.1 |
|
|
Redis Go |
v1.9.0 |
v1.9.3 |
|
|
Rueidis |
v1.0.30 |
Aucune limite |
|
|
sqlx |
v1.3.0 |
Aucune limite |
|
|
Xorm |
v0.2.2 |
Aucune limite |
|
|
ClickHouse |
v2.0.1 |
Aucune limite |
|
|
GORM ClickHouse |
v0.2.0 |
Aucune limite |
|
|
Cassandra |
v1.3.0 |
Aucune limite |
Journalisation
|
Composant |
Adresse du dépôt |
Version antérieure |
Version plus récente |
|
Gokit Log |
v0.1.0 |
v0.2.1 |
|
|
Zerolog |
v1.10.0 |
Aucune limite |
|
|
Zap |
v1.13.0 |
Aucune limite |
|
|
Logrus |
v1.4.2 |
Aucune limite |
|
|
Log |
v1.21 |
Aucune limite |
|
|
Slog |
v1.21 |
Aucune limite |
|
|
go-zero logx |
v1.6.5 |
Aucune limite |
|
|
Kratos log |
https://github.com/go-kratos/kratos/blob/main/middleware/logging |
v2.1.2 |
v2.4.0 |
Planification des tâches
|
Composant |
Adresse du dépôt |
Version minimale |
Version supérieure |
|
Cron |
v3.0.0 |
Aucune limite |
|
|
XxlJob |
v1.2.0 |
Aucune limite |
|
|
Asynq |
v0.23.0 |
Aucune limite |
SDK de traçage
|
Composant |
Adresse du dépôt |
Version minimale |
Édition avancée |
|
OpenTracing SDK |
v1.1.0 |
v1.2.0 |
|
|
OpenTelemetry SDK |
v1.6.0 |
Aucune limite supérieure |
SDK IA
|
Composant |
Adresse du dépôt |
Version minimale |
Versions supérieures |
|
Dify Sandbox |
v0.2.0 |
Aucune limite |
|
|
Dify Plugin Daemon |
v0.0.6 |
Aucune limite |
|
|
MCP SDK |
v0.20.0 |
Aucune limite |
|
|
Langchain SDK |
v0.1.0 |
Aucune limite |
|
|
openai-go |
v1.5.0 |
Aucune limite |
|
|
go-openai |
v1.30.0 |
Aucune limite |
|
|
deepseek |
v1.3.0 |
Aucune limite |
|
|
coze-studio |
v0.2.0 |
Aucune limite |
|
|
adk-go |
v0.3.0 |
Aucune limite |
|
|
eino |
v0.4.0 |
Aucune limite |
|
|
Google GenAI |
v1.30.0 |
Aucune limite (Le mode Stream de Google GenAI prend actuellement uniquement en charge les versions v1.36.0, v1.37.0, v1.45.0 et v1.46.0.) |
|
|
anthropic-sdk-go |
v1.25.0 |
Aucune limite |
|
|
volcengine-go-sdk |
v1.2.21 |
Aucune limite |
|
|
new-api |
v0.12.8 |
Aucune limite |
|
|
milvus client |
v2.5.0 |
Aucune limite |
|
|
beads |
v1.0.0 |
Aucune limite |
|
|
trpc-go-agent |
v0.1.0 |
Aucune limite |
|
|
agent-orchestrator |
v0.1.0 |
Aucune limite |
|
|
bifrost |
v1.4.0 |
Aucune limite |
|
|
e2b |
v0.4.0-alpha4 |
Aucune limite |
SDK Alibaba Cloud
|
Composant |
Adresse du dépôt |
Version minimale |
Version supérieure |
|
FC Go SDK |
v0.2.9 |
v0.3.1 |
|
|
OTS Go SDK |
v1.5.0 |
Aucune limite |
Autres SDK
|
Composant |
Adresse du dépôt |
Versions antérieures |
Version plus récente |
|
ants pool |
v1.1.0 |
Aucune limite |
|
|
K8s Client |
v0.27.0 |
v0.32.3 |
|
|
K8s Controller Runtime |
v0.13.1 |
v0.23.3 |
FAQ
Comment maintenir la continuité des traces pour les versions Asynq antérieures à v0.26.0 ?
Pour plus d'informations, consultez Comment maintenir la continuité des traces pour les versions Asynq antérieures à v0.26.0 ?.
Pourquoi une discontinuité des traces se produit-elle lors de l'utilisation de frameworks de messagerie ?
En raison des détails d'implémentation de certains frameworks de messagerie, l'agent Go actuel présente des limitations lors de la propagation du contexte de trace entre eux.
Composant | URL du dépôt | Producteur | Consommateur |
AMQP | Aucune limite. | Seuls les spans Receive sont enregistrés. Les spans générés à partir des appels en aval basés sur le contenu du message ne peuvent pas être liés au span Receive. | |
Segmentio Kafka | Aucune limite. | Seuls les spans Receive sont enregistrés. Les spans générés à partir des appels en aval basés sur le contenu du message ne peuvent pas être liés au span Receive. | |
Shopify Sarama | Lors de l'utilisation d'AsyncProducer, le span Publish ne peut pas être lié à son span parent appelant. | Seuls les spans Receive sont enregistrés. Les spans générés à partir des appels en aval basés sur le contenu du message ne peuvent pas être liés au span Receive. | |
IBM Sarama | Lors de l'utilisation d'AsyncProducer, le span Publish ne peut pas être lié à son span parent appelant. | Seuls les spans Receive sont enregistrés. Les spans générés à partir des appels en aval basés sur le contenu du message ne peuvent pas être liés au span Receive. | |
RocketMQ Client Go | Aucune limite. |
| |
RocketMQ Client | https://github.com/apache/rocketmq-clients/tree/master/golang | Aucune limite. | Seuls les spans Receive sont enregistrés. Les spans générés à partir des appels en aval basés sur le contenu du message ne peuvent pas être liés au span Receive. |
Pourquoi ne vois-je pas les appels de base de données ou NoSQL dans la console lorsque j'utilise des clients Redis ?
En raison des détails d'implémentation du framework, l'agent Go ne peut pas instrumenter les actions qui s'exécutent avant la fonction init.
Assurez-vous d'initialiser votre client Redis ou de base de données dans la fonction init.
// Invalid approach
var rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
// Valid approach
var rdb *redis.Client
func init() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
}
Pourquoi ne vois-je pas mon instrumentation personnalisée du SDK OpenTelemetry ?
Dans la page Custom Configuration, sélectionnez opentelemetry-plugin dans la section Agent Switch Settings, puis redémarrez votre application.
Le taux d'échantillonnage par défaut est de 10 %. Il est possible que vous ne voyiez pas les traces si le nombre de requêtes est faible. Vous pouvez ajuster le taux d'échantillonnage selon vos besoins.
Comment ajouter des spans personnalisés pour RabbitMQ ?
Utilisez l'exemple de code suivant pour ajouter des spans personnalisés :
import (
"context"
oTrace "go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/trace"
)
// Create a span for each message in the 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()
// Your message processing logic here
}
}
Comment ajouter des spans personnalisés pour Kafka ?
Utilisez l'exemple de code suivant pour ajouter des spans personnalisés :
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"
)
// Create a span for each message in the 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()
// Your message processing logic here
}
}
}