Este tópico descreve os requisitos de sistema operacional e arquitetura para o monitoramento de aplicações Go, além dos componentes e frameworks de terceiros suportados.
Requisitos de sistema operacional
|
Nome da ferramenta de build |
Sistema operacional |
Arquitetura |
|
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 |
Versões do Go suportadas
Versão 1.18 e posteriores
Versões de plug-ins suportadas
Mensagens
|
Componente |
Endereço do repositório |
Versões anteriores |
Versões posteriores |
|
AMQP |
v1.4.0 |
v1.12.0 |
|
|
Segmentio Kafka |
v0.4.10 |
sem 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.46.3 |
|
|
Shopify Sarama |
v1.22.0 |
v1.38.1 |
|
|
Mqtt Server |
v2.6.0 |
Sem limite |
|
|
franz-go |
v1.18.0 |
Sem limite |
|
|
confluent-kafka-go |
v1.7.0 |
Sem limite |
|
|
streadway-amqp |
v1.0.0 |
Sem limite |
Frameworks RPC
|
Componente |
Endereço do Repositório |
Versões inferiores |
Versões posteriores |
|
Beego |
v1.2.0 |
Sem limite |
|
|
Dubbo |
v3.0.1 |
Sem limite |
|
|
Echo |
v4.0.0 |
Sem limite |
|
|
FastHTTP |
v1.6.0 |
Sem limite |
|
|
Fiber |
v2.43.0 |
Sem limite |
|
|
Gin |
v1.7.0 |
Sem limite |
|
|
GoFrame |
v2.4.0 |
Sem limite |
|
|
Go Micro |
v4.9.0 |
v5.30.0 |
|
|
Go Restful |
v3.7.0 |
Sem limite |
|
|
Go Zero |
v1.5.0 |
Sem limite |
|
|
gRPC |
v1.20.1 |
Sem limite |
|
|
Iris |
v12.0.0 |
Sem limite |
|
|
Kitex |
v0.5.1 |
Sem limite |
|
|
Kratos |
v2.1.2 |
v2.9.2 |
|
|
Macaron |
v1.1.0 |
Sem limite |
|
|
Mux |
v1.3.0 |
Sem limite |
|
|
Net/HTTP |
v1.18 |
Sem limite |
|
|
Thrift |
v0.19.0 |
v0.20.0 |
|
|
Hertz |
v0.8.0 |
v0.10.3 |
|
|
Rpcx |
v1.9.0 |
Sem limite |
|
|
Req |
v3.0.0 |
Sem limite |
SQL/NoSQL
|
Componente |
Endereço do Repositório |
Versão mínima |
Versões posteriores |
|
Go Elasticsearch |
v7.0.0 |
Sem limite |
|
|
Go Redis |
v8.10.0 |
Sem limite |
|
|
Go SQL Driver |
v1.4.0 |
v1.9.3 |
|
|
Gorm |
v1.20.12 |
Ilimitado |
|
|
GORM MySQL |
v1.0.4 |
Sem limite |
|
|
Biblioteca padrão Go MySQL |
v1.18 |
Sem limite |
|
|
Mongo |
v1.11.1 |
Sem limite |
|
|
PostgreSQL |
v10.10.0 |
v10.15.1 |
|
|
Redis Go |
v1.9.0 |
v1.9.3 |
|
|
Rueidis |
v1.0.30 |
Sem limite |
|
|
sqlx |
v1.3.0 |
Ilimitado |
|
|
Xorm |
v0.2.2 |
Sem limite |
|
|
ClickHouse |
v2.0.1 |
Sem limite |
|
|
GORM ClickHouse |
v0.2.0 |
Sem limite |
|
|
Cassandra |
v1.3.0 |
Ilimitado |
Logs
|
Componente |
Endereço do Repositório |
Versão Anterior |
Versão mais recente |
|
Gokit Log |
v0.1.0 |
v0.2.1 |
|
|
Zerolog |
v1.10.0 |
Sem limite |
|
|
Zap |
v1.13.0 |
Sem limite |
|
|
Logrus |
v1.4.2 |
Sem limite |
|
|
Log |
v1.21 |
Sem limite |
|
|
Slog |
v1.21 |
Sem limite |
|
|
go-zero logx |
v1.6.5 |
Sem limite |
|
|
Kratos log |
https://github.com/go-kratos/kratos/blob/main/middleware/logging |
v2.1.2 |
v2.4.0 |
Agendamento de tarefas
|
Componente |
Endereço do Repositório |
Versão mínima |
Versão superior |
|
Cron |
v3.0.0 |
Sem limite |
|
|
XxlJob |
v1.2.0 |
Sem limite |
|
|
Asynq |
v0.23.0 |
Sem limite |
SDK de Rastreamento
|
Componente |
Endereço do Repositório |
Versão mínima |
Edição Avançada |
|
OpenTracing SDK |
v1.1.0 |
v1.2.0 |
|
|
OpenTelemetry SDK |
v1.6.0 |
Sem limite superior |
SDK de IA
|
Componente |
Endereço do repositório |
Versão mínima |
Versões superiores |
|
Dify Sandbox |
v0.2.0 |
Sem limite |
|
|
Dify Plugin Daemon |
v0.0.6 |
Sem limite |
|
|
MCP SDK |
v0.20.0 |
Sem limite |
|
|
Langchain SDK |
v0.1.0 |
Sem limite |
|
|
openai-go |
v1.5.0 |
Sem limite |
|
|
go-openai |
v1.30.0 |
Sem limite |
|
|
deepseek |
v1.3.0 |
Sem limite |
|
|
coze-studio |
v0.2.0 |
Sem limite |
|
|
adk-go |
v0.3.0 |
Sem limite |
|
|
eino |
v0.4.0 |
Sem limite |
|
|
Google GenAI |
v1.30.0 |
Sem limite (O modo Stream do Google GenAI atualmente suporta apenas as versões v1.36.0, v1.37.0, v1.45.0 e v1.46.0.) |
|
|
anthropic-sdk-go |
v1.25.0 |
Sem limite |
|
|
volcengine-go-sdk |
v1.2.21 |
Sem limite |
|
|
new-api |
v0.12.8 |
Sem limite |
SDK da Alibaba Cloud
|
Componente |
Endereço do repositório |
Versão mínima |
Versão superior |
|
FC Go SDK |
v0.2.9 |
v0.3.1 |
|
|
OTS Go SDK |
v1.5.0 |
Sem limite |
Outros SDKs
|
Componente |
Endereço do repositório |
Versões anteriores |
Versão mais recente |
|
ants pool |
v1.1.0 |
Sem limite |
|
|
K8s Client |
v0.27.0 |
v0.32.3 |
|
|
K8s Controller Runtime |
v0.13.1 |
v0.23.3 |
Perguntas frequentes
Como manter a continuidade do rastreamento para versões do Asynq anteriores à v0.26.0?
Para mais informações, consulte Como manter a continuidade do rastreamento para versões do Asynq anteriores à v0.26.0?.
Por que ocorre descontinuidade de rastreamento ao usar frameworks de mensagens?
Devido a detalhes de implementação em certos frameworks de mensagens, o agente Go atual apresenta limitações na propagação do contexto de rastreamento entre eles.
Componente | URL do Repositório | Produtor | Consumidor |
AMQP | Sem limite. | Apenas Spans de Receive são registrados. Spans gerados a partir de chamadas downstream baseadas no conteúdo da mensagem não podem ser vinculados ao Span de Receive. | |
Segmentio Kafka | Sem limite. | Apenas Spans de Receive são registrados. Spans gerados a partir de chamadas downstream baseadas no conteúdo da mensagem não podem ser vinculados ao Span de Receive. | |
Shopify Sarama | Ao usar AsyncProducer, o Span de Publish não pode ser vinculado ao seu Span de chamada pai. | Apenas Spans de Receive são registrados. Spans gerados a partir de chamadas downstream baseadas no conteúdo da mensagem não podem ser vinculados ao Span de Receive. | |
IBM Sarama | Ao usar AsyncProducer, o Span de Publish não pode ser vinculado ao seu Span de chamada pai. | Apenas Spans de Receive são registrados. Spans gerados a partir de chamadas downstream baseadas no conteúdo da mensagem não podem ser vinculados ao Span de Receive. | |
RocketMQ Client Go | Sem limite. |
| |
RocketMQ Client | https://github.com/apache/rocketmq-clients/tree/master/golang | Sem limite. | Apenas Spans de Receive são registrados. Spans gerados a partir de chamadas downstream baseadas no conteúdo da mensagem não podem ser vinculados ao Span de Receive. |
Por que não vejo chamadas de banco de dados ou NoSQL no console ao usar clientes Redis?
Devido a detalhes de implementação do framework, o agente Go não consegue instrumentar ações executadas antes da função init.
Certifique-se de inicializar seu cliente Redis ou de banco de dados dentro da função 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 que não vejo minha instrumentação personalizada do OpenTelemetry SDK?
Na página Configuração Personalizada, selecione opentelemetry-plugin na seção Agent Switch Settings e reinicie sua aplicação.
A taxa de amostragem padrão é de 10%. Talvez você não veja rastreamentos se houver poucas requisições. Ajuste a taxa de amostragem conforme necessário.
Como adicionar spans personalizados para RabbitMQ?
Utilize o código de exemplo a seguir para adicionar 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
}
}
Como adicionar spans personalizados para Kafka?
Utilize o código de exemplo a seguir para adicionar 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
}
}
}