このトピックでは、Go アプリケーションモニタリングのオペレーティングシステムおよびアーキテクチャの要件について説明し、サポートされているサードパーティのコンポーネントとフレームワークの一覧を示します。
オペレーティングシステムの要件
コンパイラ名 | オペレーティングシステム | アーキテクチャ |
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 |
サポート対象の Go バージョン
1.18 以降
サポート対象のプラグインバージョン
メッセージング
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
AMQP | v1.4.0 | v1.13.0 | |
Segmentio Kafka | v0.4.10 | 制限なし | |
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 サーバー | v2.6.0 | 制限なし | |
franz-go | v1.18.0 | 制限なし | |
confluent-kafka-go | v1.7.0 | 制限なし | |
streadway-amqp | v1.0.0 | v1.1.0 |
RPC フレームワーク
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
Beego | v1.2.0 | 制限なし | |
Dubbo | v3.0.1 | 制限なし | |
Echo | v4.0.0 | 制限なし | |
FastHTTP | v1.6.0 | 制限なし | |
Fiber | v2.43.0 | 制限なし | |
Gin | v1.7.0 | 制限なし | |
GoFrame | v2.4.0 | 制限なし | |
Go Micro | v4.9.0 | v5.30.0 | |
Go Restful | v3.7.0 | 制限なし | |
Go Zero | v1.5.0 | 制限なし | |
gRPC | v1.20.1 | 制限なし | |
Iris | v12.0.0 | 制限なし | |
Kitex | v0.5.1 | 制限なし | |
Kratos | v2.1.2 | v3.0.0 | |
Macaron | v1.1.0 | 制限なし | |
Mux | v1.3.0 | 制限なし | |
Net/HTTP | v1.18 | 制限なし | |
Thrift | v0.19.0 | v0.20.0 | |
Hertz | v0.8.0 | v0.10.5 | |
Rpcx | v1.9.0 | 制限なし | |
Req | v3.0.0 | 制限なし |
SQL/NoSQL
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
Go Elasticsearch | v7.0.0 | 制限なし | |
Go Redis | v8.10.0 | 制限なし | |
Go SQL ドライバー | v1.4.0 | v1.9.3 | |
Gorm | v1.20.12 | 制限なし | |
GORM MySQL | v1.0.4 | 制限なし | |
Go 標準ライブラリ database/sql | v1.18 | 制限なし | |
Mongo | v1.11.1 | 制限なし | |
PostgreSQL | v10.10.0 | v10.15.1 | |
Redis Go | v1.9.0 | v1.9.3 | |
Rueidis | v1.0.30 | 制限なし | |
sqlx | v1.3.0 | 制限なし | |
Xorm | v0.2.2 | 制限なし | |
ClickHouse | v2.0.1 | 制限なし | |
GORM ClickHouse | v0.2.0 | 制限なし | |
Cassandra | v1.3.0 | 制限なし |
ロギング
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
Gokit Log | v0.1.0 | v0.2.1 | |
Zerolog | v1.10.0 | 制限なし | |
Zap | v1.13.0 | 制限なし | |
Logrus | v1.4.2 | 制限なし | |
Log | v1.21 | 制限なし | |
Slog | v1.21 | 制限なし | |
go-zero logx | v1.6.5 | 制限なし | |
Kratos log | https://github.com/go-kratos/kratos/blob/main/middleware/logging | v2.1.2 | v2.4.0 |
タスクスケジューリング
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
Cron | v3.0.0 | 制限なし | |
XxlJob | v1.2.0 | 制限なし | |
Asynq | v0.23.0 | 制限なし |
トレース SDK
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
OpenTracing SDK | v1.1.0 | v1.2.0 | |
OpenTelemetry SDK | v1.6.0 | 制限なし |
AI SDK
コンポーネント | リポジトリ アドレス | 最小バージョン | 最大バージョン |
Dify Sandbox | v0.2.0 | 制限なし | |
Dify Plugin Daemon | v0.0.6 | 制限なし | |
MCP SDK | v0.20.0 | 制限なし | |
Langchain SDK | v0.1.0 | 制限なし | |
openai-go | v1.5.0 | 制限なし | |
go-openai | v1.30.0 | 制限なし | |
deepseek | v1.3.0 | 制限なし | |
coze-studio | v0.2.0 | 制限なし | |
adk-go | v0.3.0 | 制限なし | |
eino | v0.4.0 | 制限なし | |
Google GenAI | v1.30.0 | 制限なし (Google GenAI ストリームモードは現在、v1.36.0、v1.37.0、v1.45.0、および v1.46.0 のみをサポートしています。) | |
anthropic-sdk-go | v1.25.0 | 制限なし | |
volcengine-go-sdk | v1.2.21 | 制限なし | |
new-api | v0.12.8 | 制限なし | |
milvus client | v2.5.0 | 制限なし | |
beads | v1.0.0 | 制限なし | |
trpc-go-agent | v0.1.0 | 制限なし | |
agent-orchestrator | v0.1.0 | 制限なし | |
bifrost | v1.4.0 | 制限なし | |
e2b | v0.4.0-alpha4 | 制限なし |
Alibaba Cloud SDKs
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
FC Go SDK | v0.2.9 | v0.3.1 | |
OTS Go SDK | v1.5.0 | 制限なし |
その他の SDK
コンポーネント | リポジトリ アドレス | 最小バージョン | 最大バージョン |
ants pool | v1.1.0 | 制限なし | |
K8s クライアント | v0.27.0 | v0.32.3 | |
K8s コントローラーランタイム | v0.13.1 | v0.23.3 |
よくある質問
Asynq v0.26.0 未満のバージョンで継続的なトレースを実現する方法
メッセージングフレームワークを使用するとトレースが途切れる理由
一部のメッセージングフレームワークの実装上の詳細により、Go エージェントにはトレースコンテキストの伝播時に制限があります。 制限は次のとおりです。
コンポーネント | リポジトリアドレス | プロデューサー | コンシューマー |
AMQP | 制限はありません。 | Receive スパンのみが収集されます。 メッセージの内容に基づいたダウンストリーム呼び出しで作成されたスパンを、Receive スパンにリンクすることはできません。 | |
Segmentio Kafka | 制限はありません。 | Receive スパンのみが収集されます。 メッセージの内容に基づいたダウンストリーム呼び出しで作成されたスパンを、Receive スパンにリンクすることはできません。 | |
Sarama | AsyncProducer を使用する場合、Publish スパンを親の呼び出しスパンにリンクすることはできません。 | Receive スパンのみが収集されます。 メッセージの内容に基づいたダウンストリーム呼び出しで作成されたスパンを、Receive スパンにリンクすることはできません。 | |
IBM Sarama | When you use AsyncProducer, the Publish span cannot be linked to its parent call span. | Only Receive spans are collected. Spans created by downstream calls based on the message content cannot be linked to the Receive span. | |
RocketMQ Client Go | 制限はありません。 |
| |
RocketMQ Client | https://github.com/apache/rocketmq-clients/tree/master/golang | 制限はありません。 | Receive スパンのみが収集されます。 メッセージの内容に基づいたダウンストリーム呼び出しで作成されたスパンを、Receive スパンにリンクすることはできません。 |
Redis クライアントを使用する際にコンソールでデータベース/NoSQL 呼び出しが表示されない理由
フレームワーク固有の実装のため、Go エージェントは init 関数の前に実行されるアクションを効果的にインストルメンテーションできません。
init 関数で Redis クライアントまたはデータベースクライアントを初期化してください。
// 無効なコード
var rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // パスワードが設定されていません
DB: 0, // デフォルトの DB を使用
})
// 有効なコード
var rdb *redis.Client
func init() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // パスワードが設定されていません
DB: 0, // デフォルトの DB を使用
})
}
カスタム OTel SDK インストルメンテーションが表示されない理由
[カスタム設定] ページで、[プローブスイッチ設定] セクションの [opentelemetry-plugin] を選択します。 その後、アプリケーションを再起動します。
デフォルトのサンプリングレートは 10% です。 リクエストの量が少ない場合、データが表示されないことがあります。 必要に応じてサンプリングレートを調整できます。
RabbitMQ にカスタムスパンを追加する方法
次のコードサンプルは、カスタムスパンを追加する方法を示しています。
import (
"context"
oTrace "go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/trace"
)
// メッセージハンドラでメッセージごとにスパンを作成します。
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"] = d.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()
// その他のプロセス
}
}
Kafka にカスタムスパンを追加する方法
次のコードサンプルは、カスタムスパンを追加する方法を示しています。
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"
)
// メッセージハンドラでメッセージごとにスパンを作成します。
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()
// その他のプロセス
}
}
}