Este tema describe los requisitos de sistema operativo y arquitectura para el monitoreo de aplicaciones en Go, así como los componentes y frameworks de terceros compatibles.
Requisitos del sistema operativo
|
Nombre de la herramienta de compilación |
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
Versión 1.18 y posteriores
Versiones de plugin compatibles
Mensajería
|
Componente |
Dirección del repositorio |
Versiones anteriores |
Versiones posteriores |
|
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 |
Versiones inferiores |
Versiones posteriores |
|
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 |
v2.9.2 |
|
|
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 |
Versiones posteriores |
|
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 |
|
|
MySQL de la biblioteca estándar de Go |
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 anterior |
Versión más reciente |
|
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 trabajos
|
Componente |
Dirección del repositorio |
Versión mínima |
Versión superior |
|
Cron |
v3.0.0 |
Sin límite |
|
|
XxlJob |
v1.2.0 |
Sin límite |
|
|
Asynq |
v0.23.0 |
Sin límite |
Trace SDK
|
Componente |
Dirección del repositorio |
Versión mínima |
Edición avanzada |
|
OpenTracing SDK |
v1.1.0 |
v1.2.0 |
|
|
OpenTelemetry SDK |
v1.6.0 |
Sin límite superior |
AI SDK
|
Componente |
Dirección del repositorio |
Versión mínima |
Versiones superiores |
|
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 |
|
|
Langchain SDK |
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 actualmente solo es compatible 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 superior |
|
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 |
Versiones anteriores |
Versión más reciente |
|
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 en versiones de Asynq anteriores a la v0.26.0?
Para obtener más información, consulte How do I maintain trace continuity for Asynq versions earlier than v0.26.0?.
¿Por qué se interrumpe la continuidad de las trazas al usar frameworks de mensajería?
Debido a detalles de implementación en ciertos frameworks de mensajería, el agente actual de Go presenta limitaciones para propagar el contexto de traza entre ellos.
Componente | URL del repositorio | Productor | Consumidor |
AMQP | Sin límite. | Solo se registran los Receive Spans. Los spans generados por llamadas descendentes basadas en el contenido del mensaje no se pueden vincular al Receive Span. | |
Segmentio Kafka | Sin límite. | Solo se registran los Receive Spans. Los spans generados por llamadas descendentes basadas en el contenido del mensaje no se pueden vincular al Receive Span. | |
Shopify Sarama | Al usar AsyncProducer, el Publish Span no se puede vincular a su span de llamada padre. | Solo se registran los Receive Spans. Los spans generados por llamadas descendentes basadas en el contenido del mensaje no se pueden vincular al Receive Span. | |
IBM Sarama | Al usar AsyncProducer, el Publish Span no se puede vincular a su span de llamada padre. | Solo se registran los Receive Spans. Los spans generados por llamadas descendentes basadas en el contenido del mensaje no se pueden vincular al Receive Span. | |
RocketMQ Client Go | Sin límite. |
| |
RocketMQ Client | https://github.com/apache/rocketmq-clients/tree/master/golang | Sin límite. | Solo se registran los Receive Spans. Los spans generados por llamadas descendentes basadas en el contenido del mensaje no se pueden vincular al Receive Span. |
¿Por qué no veo las llamadas a la base de datos o NoSQL en la consola al usar clientes de Redis?
Debido a detalles de implementación del framework, el agente de Go no puede instrumentar acciones que se ejecutan antes de la función init.
Asegúrese de inicializar su cliente de Redis o de base de datos dentro de la función 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
})
}
¿Por qué no veo mi instrumentación personalizada del OpenTelemetry SDK?
En la página Custom Configuration, seleccione opentelemetry-plugin en la sección Agent Switch Settings y luego reinicie su aplicación.
La tasa de muestreo predeterminada es del 10 %. Es posible que no vea trazas si hay pocas solicitudes. Ajuste la tasa de muestreo según sea necesario.
¿Cómo agrego spans personalizados para RabbitMQ?
Utilice a continuación el código de ejemplo para agregar spans personalizados:
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
}
}
¿Cómo agrego spans personalizados para Kafka?
Utilice a continuación el código de ejemplo para agregar spans personalizados:
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
}
}
}