このトピックでは、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 | 制限なし |
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 | v2.9.2 | |
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.3 | |
Rpcx | v1.9.0 | 制限なし | |
Req | v3.0.0 | 制限なし |
SQL/NoSQL
コンポーネント | リポジトリアドレス | 最小バージョン | 最大バージョン |
go-elasticsearch | v7.0.0 | 無制限 | |
go-redis | v8.10.0 | 無制限 | |
go-sql-driver | v1.4.0 | v1.9.3 | |
GORM | v1.20.12 | 無制限 | |
GORM MySQL | v1.0.4 | 無制限 | |
database/sql | v1.18 | 無制限 | |
mongo-go-driver | v1.11.1 | 無制限 | |
go-pg | v10.10.0 | v10.15.1 | |
Redigo | v1.9.0 | v1.9.3 | |
rueidis | v1.0.30 | 無制限 | |
sqlx | v1.3.0 | 無制限 | |
xorm | v0.2.2 | 無制限 | |
clickhouse-go | v2.0.1 | 無制限 | |
GORM ClickHouse | v0.2.0 | 無制限 | |
gocql | 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
コンポーネント | リポジトリアドレス | 最小バージョン | Advanced Edition |
OpenTracing SDK | v1.1.0 | v1.2.0 | |
OpenTelemetry SDK | v1.6.0 | 上限なし |
AI SDK
コンポーネント | リポジトリアドレス | 最小バージョン | 上位バージョン |
Dify サンドボックス | v0.2.0 | 制限なし | |
Dify プラグイン デーモン | 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 クライアント | 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 SDK
コンポーネント | リポジトリ アドレス | 最小バージョン | 上位バージョン |
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.15.3 |
よくある質問
Asynq v0.26.0 より前のバージョンでトレースの継続性を維持するにはどうすればよいですか?
詳細については、「v0.26.0 より前のバージョンの Asynq でトレースの継続性を維持する方法」をご参照ください。
メッセージフレームワークの使用時にトレースが途切れるのはなぜですか?
一部のメッセージフレームワークでは実装上の都合により、現在の Go エージェントによるトレースコンテキストの伝播に制限があります。
コンポーネント | リポジトリ URL | プロデューサー | コンシューマー |
AMQP | 制限なし。 | Receive スパンのみが記録されます。メッセージ内容に基づくダウンストリーム呼び出しで生成されたスパンは、Receive スパンにリンクできません。 | |
Segmentio Kafka | 制限なし。 | Receive スパンのみが記録されます。メッセージ内容に基づくダウンストリーム呼び出しで生成されたスパンは、Receive スパンにリンクできません。 | |
Shopify Sarama | When using AsyncProducer, the Publish Span cannot be linked to its parent calling Span. | Only Receive Spans are recorded. Spans generated from downstream calls based on message content cannot be linked to the Receive Span. | |
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 関数より前に実行されるアクションをインストルメントできません。
Redis やデータベースのクライアントは、init 関数内で初期化してください。
// 無効なアプローチ
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を使用
})
}
カスタム OpenTelemetry SDK によるインストルメンテーションの結果が表示されないのはなぜですか?
[Custom Configuration] ページの [Agent Switch Settings] セクションで [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"].(string)
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()
// ここにメッセージ処理ロジックを記述します。
}
}
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)
tracer := otel.GetTracerProvider().Tracer("")
opts := append([]oTrace.SpanStartOption{}, oTrace.WithSpanKind(oTrace.SpanKindConsumer))
ctx, span := tracer.Start(ctx, "mq", opts...)
defer span.End()
// ここにメッセージ処理ロジックを記述します。
}
}
}