Este tema describe los requisitos de sistema operativo y arquitectura para el monitoreo de aplicaciones en Go. También enumera los componentes y frameworks de terceros compatibles.
Requisitos del sistema operativo
|
Nombre del compilador |
Sistema operativo |
Arquitectura |
|
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 |
Versiones de Go compatibles
1.18 y posteriores
Versiones de plugin compatibles
Mensajería
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión máxima |
|
AMQP |
v1.4.0 |
v1.15.0 |
|
|
Segmentio Kafka |
v0.4.10 |
Sin límite |
|
|
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.4 |
|
IBM Sarama |
v1.22.0 |
v1.60.1 |
|
|
Shopify Sarama |
v1.22.0 |
v1.38.1 |
|
|
Mqtt Server |
v2.6.0 |
Sin límite |
|
|
franz-go |
v1.18.0 |
Sin límite |
|
|
confluent-kafka-go |
v1.7.0 |
Sin límite |
|
|
streadway-amqp |
v1.0.0 |
Sin límite |
Frameworks RPC
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión máxima |
|
Beego |
v1.2.0 |
Sin límite |
|
|
Dubbo |
v3.0.1 |
Sin límite |
|
|
Echo |
v4.0.0 |
Sin límite |
|
|
FastHTTP |
v1.6.0 |
Sin límite |
|
|
Fiber |
v2.43.0 |
Sin límite |
|
|
Gin |
v1.7.0 |
Sin límite |
|
|
GoFrame |
v2.4.0 |
Sin límite |
|
|
Go Micro |
v4.9.0 |
v5.30.0 |
|
|
Go Restful |
v3.7.0 |
Sin límite |
|
|
Go Zero |
v1.5.0 |
Sin límite |
|
|
gRPC |
v1.20.1 |
Sin límite |
|
|
Iris |
v12.0.0 |
Sin límite |
|
|
Kitex |
v0.5.1 |
Sin límite |
|
|
Kratos |
v2.1.2 |
v3.0.0 |
|
|
Macaron |
v1.1.0 |
Sin límite |
|
|
Mux |
v1.3.0 |
Sin límite |
|
|
Net/HTTP |
v1.18 |
Sin límite |
|
|
Thrift |
v0.19.0 |
v0.20.0 |
|
|
Hertz |
v0.8.0 |
v0.10.6 |
|
|
Rpcx |
v1.9.0 |
Sin límite |
|
|
Req |
v3.0.0 |
Sin límite |
SQL/NoSQL
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión máxima |
|
Go Elasticsearch |
v7.0.0 |
Sin límite |
|
|
Go Redis |
v8.10.0 |
Sin límite |
|
|
Go SQL Driver |
v1.4.0 |
v1.9.3 |
|
|
Gorm |
v1.20.12 |
Sin límite |
|
|
GORM MySQL |
v1.0.4 |
Sin límite |
|
|
Biblioteca estándar de Go database/sql |
v1.18 |
Sin límite |
|
|
Mongo |
v1.11.1 |
Sin límite |
|
|
PostgreSQL |
v10.10.0 |
v10.15.1 |
|
|
Redis Go |
v1.9.0 |
v1.9.3 |
|
|
Rueidis |
v1.0.30 |
Sin límite |
|
|
sqlx |
v1.3.0 |
Sin límite |
|
|
Xorm |
v0.2.2 |
Sin límite |
|
|
ClickHouse |
v2.0.1 |
Sin límite |
|
|
GORM ClickHouse |
v0.2.0 |
Sin límite |
|
|
Cassandra |
v1.3.0 |
Sin límite |
Registros
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión máxima |
|
Gokit Log |
v0.1.0 |
v0.2.1 |
|
|
Zerolog |
v1.10.0 |
Sin límite |
|
|
Zap |
v1.13.0 |
Sin límite |
|
|
Logrus |
v1.4.2 |
Sin límite |
|
|
Log |
v1.21 |
Sin límite |
|
|
Slog |
v1.21 |
Sin límite |
|
|
go-zero logx |
v1.6.5 |
Sin límite |
|
|
Kratos log |
https://github.com/go-kratos/kratos/blob/main/middleware/logging |
v2.1.2 |
v2.4.0 |
Programación de tareas
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión máxima |
|
Cron |
v3.0.0 |
Sin límite |
|
|
XxlJob |
v1.2.0 |
Sin límite |
|
|
Asynq |
v0.23.0 |
Sin límite |
SDK de trazas
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión máxima |
|
SDK de OpenTracing |
v1.1.0 |
v1.2.0 |
|
|
SDK de OpenTelemetry |
v1.6.0 |
Sin límite |
SDK de IA
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión máxima |
|
Dify Sandbox |
v0.2.0 |
Sin límite |
|
|
Dify Plugin Daemon |
v0.0.6 |
Sin límite |
|
|
MCP SDK |
v0.20.0 |
Sin límite |
|
|
SDK de Langchain |
v0.1.0 |
Sin límite |
|
|
openai-go |
v1.5.0 |
Sin límite |
|
|
go-openai |
v1.30.0 |
Sin límite |
|
|
deepseek |
v1.3.0 |
Sin límite |
|
|
coze-studio |
v0.2.0 |
Sin límite |
|
|
adk-go |
v0.3.0 |
Sin límite |
|
|
eino |
v0.4.0 |
Sin límite |
|
|
Google GenAI |
v1.30.0 |
Sin límite (el modo Stream de Google GenAI solo es compatible actualmente con las versiones v1.36.0, v1.37.0, v1.45.0 y v1.46.0) |
|
|
anthropic-sdk-go |
v1.25.0 |
Sin límite |
|
|
volcengine-go-sdk |
v1.2.21 |
Sin límite |
|
|
new-api |
v0.12.8 |
Sin límite |
|
|
milvus client |
v2.5.0 |
Sin límite |
|
|
beads |
v1.0.0 |
Sin límite |
|
|
trpc-go-agent |
v0.1.0 |
Sin límite |
|
|
agent-orchestrator |
v0.1.0 |
Sin límite |
|
|
bifrost |
v1.4.0 |
Sin límite |
|
|
e2b |
v0.4.0-alpha4 |
Sin límite |
SDK de Alibaba Cloud
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión máxima |
|
FC Go SDK |
v0.2.9 |
v0.3.1 |
|
|
OTS Go SDK |
v1.5.0 |
Sin límite |
Otros SDK
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión máxima |
|
ants pool |
v1.1.0 |
Sin límite |
|
|
K8s Client |
v0.27.0 |
v0.32.3 |
|
|
K8s Controller Runtime |
v0.13.1 |
v0.23.3 |
Preguntas frecuentes
¿Cómo mantengo la continuidad de las trazas con versiones de Asynq anteriores a la v0.26.0?
Maintain trace continuity in Asynq versions earlier than v0.26.0
¿Por qué se interrumpen las trazas cuando uso un framework de mensajería?
Debido a detalles de implementación en algunos frameworks de mensajería, el agente de Go presenta limitaciones al propagar el contexto de la traza. A continuación se detallan dichas limitaciones:
Componente | Dirección del repositorio | Productor | Consumidor |
AMQP | Sin limitaciones. | Solo se recopilan los spans Receive. Los spans que generan las llamadas descendentes según el contenido del mensaje no se pueden vincular al span Receive. | |
Segmentio Kafka | Sin limitaciones. | Solo se recopilan los spans Receive. Los spans que generan las llamadas descendentes según el contenido del mensaje no se pueden vincular al span Receive. | |
Shopify Sarama | Cuando usa AsyncProducer, el span Publish no se puede vincular a su span de llamada principal. | Solo se recopilan los spans Receive. Los spans que generan las llamadas descendentes según el contenido del mensaje no se pueden vincular al span Receive. | |
IBM Sarama | Cuando usa AsyncProducer, el span Publish no se puede vincular a su span de llamada principal. | Solo se recopilan los spans Receive. Los spans que generan las llamadas descendentes según el contenido del mensaje no se pueden vincular al span Receive. | |
RocketMQ Client Go | Sin limitaciones. |
| |
RocketMQ Client | https://github.com/apache/rocketmq-clients/tree/master/golang | Sin limitaciones. | Solo se recopilan los spans Receive. Los spans que generan las llamadas descendentes según el contenido del mensaje no se pueden vincular al span Receive. |
¿Por qué no puedo ver las llamadas a la base de datos o NoSQL en la consola cuando uso un cliente de Redis?
Debido a implementaciones específicas de cada framework, el agente de Go no instrumenta correctamente las acciones que se ejecutan antes de la función init.
Inicialice el cliente de Redis o de la base de datos dentro de la función init.
// Invalid code
var rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
// Valid code
var rdb *redis.Client
func init() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
}
¿Por qué no puedo ver la instrumentación personalizada de mi SDK de OTel?
En la página Custom Configurations, seleccione opentelemetry-plugin en la sección Probe switch settings. Luego, reinicie la aplicación.
La tasa de muestreo predeterminada es del 10 %. Si el volumen de solicitudes es bajo, es posible que no vea ningún dato. Ajuste la tasa de muestreo según sus necesidades.
¿Cómo agrego un span personalizado para RabbitMQ?
A continuación se muestra un ejemplo de código para agregar un span personalizado:
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 message 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()
//other process
}
}
¿Cómo agrego un span personalizado para Kafka?
A continuación se muestra un ejemplo de código para agregar un span personalizado:
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 message 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)
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()
//other process
}
}
}