このトピックでは、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.9.0 | v1.10.0 | |
Segmentio Kafka | v0.4.10 | v0.4.48 | |
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.2 |
IBM Sarama | v1.22.0 | v1.45.2 | |
Shopify Sarama | v1.22.0 | v1.38.1 |
RPC フレームワーク
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
Beego | v1.2.0 | v2.3.8 | |
Dubbo | v3.0.1 | v3.3.0 | |
Echo | v4.0.0 | v4.13.4 | |
FastHTTP | v1.45.0 | v1.65.0 | |
Fiber | v2.43.0 | v2.52.8 | |
Gin | v1.7.0 | 制限なし | |
GoFrame | v2.4.0 | v2.9.0 | |
Go Micro | v4.9.0 | v5.3.1 | |
Go Restful | v3.7.0 | v3.12.1 | |
Go Zero | v1.5.0 | v1.9.0 | |
gRPC | v1.44.0 | 制限なし | |
Iris | v12.0.0 | v12.2.11 | |
Kitex | v0.5.1 | v0.14.1 | |
Kratos | v2.1.2 | v2.8.4 | |
Macaron | v1.1.0 | v1.5.0 | |
Mux | v1.3.0 | v1.8.1 | |
Net/HTTP | v1.18 | 制限なし | |
Thrift | v0.19.0 | v0.20.0 | |
Hertz | v0.8.0 | v0.10.2 |
SQL/NoSQL
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
Go Elasticsearch | v8.0.0 | v8.18.1 | |
Go Redis | v8.10.0 | v9.11.0 | |
Go SQL Driver | v1.4.0 | v1.9.3 | |
Gorm | v1.20.12 | v1.30.0 | |
GORM MySQL | v1.0.4 | v1.5.7 | |
Go 標準ライブラリ database/sql | v1.18 | v1.24 | |
Mongo | v1.11.1 | v1.17.3 | |
PostgreSQL | v10.10.0 | v10.14.0 | |
Redis Go | v1.9.0 | v1.9.2 |
ロギング
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
Gokit Log | v0.1.0 | v0.2.1 | |
Zerolog | v1.10.0 | v1.34.0 | |
Zap | v1.13.0 | v1.27.0 | |
Logrus | v1.5.0 | 制限なし | |
Log | v1.21 | 制限なし | |
Slog | v1.21 | 制限なし |
タスクスケジューリング
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
Cron | v3.0.0 | 制限なし |
トレース SDK
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
OpenTracing SDK | v1.1.0 | v1.2.0 | |
OpenTelemetry SDK | v1.6.0 | v1.37.0 |
AI SDK
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
Dify Sandbox | v0.2.0 | 制限なし | |
Dify Plugin Daemon | v0.0.6 | 制限なし | |
MCP SDK | v0.20.0 | 制限なし | |
Langchain SDK | v0.1.0 | 制限なし |
Alibaba Cloud SDK
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
FC Go SDK | v0.2.9 | v0.3.1 | |
OTS Go SDK | v1.5.0 | 制限なし |
その他の SDK
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
K8s Client | v0.27.0 | v0.32.3 | |
K8s Controller Runtime | v0.13.1 | v0.18.7 |
よくある質問
メッセージングフレームワークを使用するとトレースが壊れるのはなぜですか?
一部のメッセージングフレームワークの実装の詳細により、Go エージェントにはトレースコンテキストの伝播に制限があります。制限は次のとおりです。
コンポーネント | リポジトリアドレス | プロデューサー | コンシューマー |
AMQP | 制限事項はありません。 | Receive スパンのみが収集されます。メッセージコンテンツに基づくダウンストリーム呼び出しによって作成されたスパンは、Receive スパンにリンクできません。 | |
Segmentio Kafka | 制限なし。 | Receive スパンのみが収集されます。メッセージコンテンツに基づくダウンストリーム呼び出しによって作成されたスパンは、Receive スパンにリンクできません。 | |
Shopify Sarama | AsyncProducer を使用する場合、Publish スパンをその親呼び出しスパンにリンクすることはできません。 | Receive スパンのみが収集されます。メッセージコンテンツに基づくダウンストリーム呼び出しによって作成されたスパンは、Receive スパンにリンクできません。 | |
IBM Sarama | AsyncProducer を使用する場合、Publish スパンをその親呼び出しスパンにリンクすることはできません。 | Receive スパンのみが収集されます。メッセージコンテンツに基づくダウンストリーム呼び出しによって作成されたスパンは、Receive スパンにリンクできません。 | |
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"] = 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()
// その他のプロセス
}
}
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()
// その他のプロセス
}
}
}