すべてのプロダクト
Search
ドキュメントセンター

Application Real-Time Monitoring Service:Go トレースデータの SkyWalking を介したレポート

最終更新日:Mar 12, 2026

ご利用の Go アプリケーションに SkyWalking エージェントをイベントトラッキングし、分散トレースを Managed Service for OpenTelemetry コンソールに送信します。トレースが到着すると、アプリケーションのトポロジー、トレース、低速トランザクション、エラー分析、SQL 分析を探索できます。

Go をサポートする SkyWalking エージェントは 2 種類あります。

エージェント計装スタイルステータス
skywalking-go (推奨)非侵入型 -- -toolexec活発にメンテナンス中
Go2Sky (レガシ)侵入型 -- ソースコード内にプラグインごとのフックが必要廃止、メンテナンス終了

ご利用のプロジェクトがすでに Go2Sky に依存している場合を除き、skywalking-go から開始してください。SkyWalking は Go2Sky プラグインを skywalking-go エージェントに徐々に移植しており、gRPC フレームワークのサポートも追加しています。

説明

ARMS は、より豊富な機能セットと強化された安定性を備えた非侵入型イベントトラッキングを可能にする、商用サポートされた自社開発の Go 用エージェントも提供しています。

skywalking-go エージェントを使用したトレースのレポート

以下の手順では、skywalking-go エージェントのビルド、Managed Service for OpenTelemetry 用の設定、およびコンパイル時イベントトラッキングを使用した Go プロジェクトの再ビルドについて説明します。

ステップ 1: SkyWalking エンドポイントの取得

  1. Managed Service for OpenTelemetry コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[クラスタ設定] をクリックします。表示されるページで、[エンドポイント情報] タブをクリックします。

  3. 上部ナビゲーションバーでリージョンを選択します。[クラスター情報] セクションで、[トークンを表示] をオンにします。

  4. [クライアント] パラメーターを [SkyWalking] に設定します。

  5. エンドポイントを、[関連情報] 列からコピーします。

SkyWalking endpoint information
説明

ご利用のアプリケーションが Alibaba Cloud 本番環境で実行されている場合は、VPC エンドポイントを使用します。それ以外の場合は、パブリックエンドポイントを使用します。

ステップ 2: エージェントバイナリのビルド

skywalking-go エージェントをクローンしてビルドします。

git clone https://github.com/apache/skywalking-go.git
cd skywalking-go && make build

ビルドにより、skywalking-go/bin/ ディレクトリに実行可能ファイルが生成されます。ファイル名は OS によって異なります -- たとえば、macOS では skywalking-go-agent--darwin-amd64 です。

Executable files in the skywalking-go/bin directory

ステップ 3: プロジェクトへの SkyWalking モジュールの追加

次のいずれかの方法を選択してください。

オプション A -- コードでのインポート

(メインパッケージに追加):

package main

import (
	_ "github.com/apache/skywalking-go"
)

オプション B -- エージェントバイナリでのインジェクション

skywalking-go/bin/skywalking-go-agent--darwin-amd64 -inject path/to/your-project
説明

インジェクションメソッドが失敗した場合は、代わりにオプション A を使用してください。

ステップ 4: エージェントの設定

少なくとも以下の3つのパラメーターを含むconfig.yaml ファイルを作成します。

agent:
  service_name: ${SW_AGENT_NAME:<your-service-name>}

reporter:
  grpc:
    backend_service: ${SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE:<your-skywalking-endpoint>}
    authentication: ${SW_AGENT_REPORTER_GRPC_AUTHENTICATION:<your-auth-token>}

プレースホルダーを実際の値に置き換えます。

プレースホルダー説明
<your-service-name>コンソールでアプリケーションを識別する名前my-go-service
<your-skywalking-endpoint>ステップ 1xxx.api.aliyuncs.com:11800
<your-auth-token>エンドポイントの横に表示される認証トークンabcdef123456

これらの値を config.yaml に直接 (推奨)、または環境変数で設定します:

export SW_AGENT_NAME=my-go-service
export SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE=xxx.api.aliyuncs.com:11800
export SW_AGENT_REPORTER_GRPC_AUTHENTICATION=abcdef123456

特定のプラグインの無効化

デフォルトでは、skywalking-go エージェントはサポートされているすべてのプラグインをインストルメント化します。特定のプラグインを除外するには、excluded パラメーターを追加します:

plugin:
  # 単一のプラグインを無効にする
  excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql}

  # 複数のプラグインを無効にする (カンマ区切り)
  # excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql,gorm}

`config.yaml` の完全なリファレンス

agent:
  # UI に表示されるサービス名。
  service_name: ${SW_AGENT_NAME:Your_ApplicationName}
  # インスタンス名の環境変数キーを取得します。取得できない場合は、インスタンス名が自動的に生成されます。
  instance_env_name: SW_AGENT_INSTANCE_NAME
  # トレースデータのサンプリングレート。0 から 1 までの浮動小数点値である必要があります。
  sampler: ${SW_AGENT_SAMPLE:1}
  meter:
    # メトリック収集の間隔 (秒単位)。
    collect_interval: ${SW_AGENT_METER_COLLECT_INTERVAL:20}

reporter:
  grpc:
    # バックエンドサービスの gRPC サーバーアドレス。
    backend_service: ${SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE:127.0.0.1:11800}
    # トレースデータレポートの最大セグメント数。
    max_send_queue: ${SW_AGENT_REPORTER_GRPC_MAX_SEND_QUEUE:5000}
    # サービスとバックエンドサービスのチェック間隔 (秒単位)。
    check_interval: ${SW_AGENT_REPORTER_GRPC_CHECK_INTERVAL:20}
    # バックエンドとの通信用の認証文字列。
    authentication: ${SW_AGENT_REPORTER_GRPC_AUTHENTICATION:}
    # バックエンドから動的構成をフェッチする間隔 (秒単位)。
    cds_fetch_interval: ${SW_AGENT_REPORTER_GRPC_CDS_FETCH_INTERVAL:20}
    tls:
      # バックエンドとの TLS を有効にするかどうか。
      enable: ${SW_AGENT_REPORTER_GRPC_TLS_ENABLE:false}
      # ca.crt のファイルパス。この設定は TLS スイッチをオンにした場合にのみ機能します。
      ca_path: ${SW_AGENT_REPORTER_GRPC_TLS_CA_PATH:}
      # client.pem のファイルパス。この設定は mTLS の場合にのみ機能します。
      client_key_path: ${SW_AGENT_REPORTER_GRPC_TLS_CLIENT_KEY_PATH:}
      # client.crt のファイルパス。この設定は mTLS の場合にのみ機能します。
      client_cert_chain_path: ${SW_AGENT_REPORTER_GRPC_TLS_CLIENT_CERT_CHAIN_PATH:}
      # クライアントがサーバーの証明書チェーンとホスト名を検証するかどうかを制御します。
      insecure_skip_verify: ${SW_AGENT_REPORTER_GRPC_TLS_INSECURE_SKIP_VERIFY:false}

log:
  # システムで現在使用されているロギングタイプを決定します。
  # Go エージェントは、このログタイプを使用してカスタムログを生成します。サポートされているのは "auto"、"logrus"、"zap" です。
  # auto: ログのソースを自動的に識別します。
  #       プロジェクトに logrus が存在する場合、自動的に logrus を使用します。
  #       プロジェクトで zap が初期化されている場合、zap フレームワークを使用します。
  #       デフォルトでは、標準エラーを使用してログコンテンツを出力します。
  # logrus: エージェントが logrus フレームワークを使用する必要があることを指定します。
  # zap: エージェントが zap フレームワークを使用する必要があることを指定します。
  # システムは、"zap.New"、"zap.NewProduction" などのメソッドを通じてすでに初期化されている必要があります。
  type: ${SW_AGENT_LOG_TYPE:auto}
  tracing:
    # トレース情報をログに自動的に統合するかどうか。
    enable: ${SW_AGENT_LOG_TRACING_ENABLE:true}
    # トレース情報が有効になっている場合、トレース情報は各ログの現在のキーに保存されます。
    key: ${SW_AGENT_LOG_TRACING_KEY:SW_CTX}
  reporter:
    # ログをバックエンドにアップロードするかどうか。
    enable: ${SW_AGENT_LOG_REPORTER_ENABLE:true}
    # ログのラベルに追加する必要があるフィールド名リスト (複数ある場合はカンマで区切ります)。
    label_keys: ${SW_AGENT_LOG_REPORTER_LABEL_KEYS:}

plugin:
  # 除外するプラグインの名前をリストします。複数のプラグイン名はカンマで区切る必要があります。
  # 注: このパラメーターはコンパイルフェーズ中にのみ有効になります。
  excluded: ${SW_AGENT_PLUGIN_EXCLUDES:}
  config:
    http:
      # サーバー側の HTTP リクエストのパラメーターを収集します。
      server_collect_parameters: ${SW_AGENT_PLUGIN_CONFIG_HTTP_SERVER_COLLECT_PARAMETERS:false}
    mongo:
      # MongoDB リクエストのステートメントを収集します。
      collect_statement: ${SW_AGENT_PLUGIN_CONFIG_MONGO_COLLECT_STATEMENT:false}
    sql:
      # SQL リクエストのパラメーターを収集します。
      collect_parameter: ${SW_AGENT_PLUGIN_CONFIG_SQL_COLLECT_PARAMETER:false}

ステップ 5: プロジェクトの再ビルド

-toolexec フラグを使用して、エージェントのバイナリと設定ファイルを指定してコンパイルします:

sudo go build -toolexec "path/to/skywalking-go-agent -config path/to/config.yaml" -a
  • path/to/skywalking-go-agent -- ステップ 2 でビルドされた実行可能ファイルへの絶対パス

  • path/to/config.yaml -- ステップ 4 で作成された設定ファイルへの絶対パス

ステップ 6: アプリケーションの起動と検証

コンパイルされたバイナリを実行します。エージェントはサポートされているすべてのプラグインを自動的にイベントトラッキングし、gRPC 経由でトレースのレポートを開始します。

プロジェクトを開始した後、SkyWalking はデータを Managed Service for OpenTelemetry コンソールにレポートします。

環境変数リファレンス

環境変数説明デフォルト
SW_AGENT_NAMEコンソールに表示されるアプリケーション名なし
SW_AGENT_INSTANCE_NAMEインスタンス名自動生成
SW_AGENT_SAMPLEサンプリングレート (0~1、1 は 100% に相当します)1
SW_AGENT_REPORTER_GRPC_BACKEND_SERVICEトレースレポート用の gRPC エンドポイント127.0.0.1:11800
SW_AGENT_REPORTER_GRPC_AUTHENTICATION認証トークンなし
SW_AGENT_PLUGIN_EXCLUDES無効にするプラグインのカンマ区切りリストなし

サポートされているプラグイン

skywalking-go エージェントは、コンパイル時に以下のライブラリを自動的にイベントトラッキングします。ライブラリごとのインストールは不要です。

ライブラリ
sql
dubbo-go
gear
gin
go-restful
gorm
http
go-kratos v2
logrus
go-micro v3.5.0
mongo
go-resty v2.2.0
zap v1.16.0

Go2Sky エージェント (レガシ) を使用したトレースのレポート

説明

SkyWalking は Go2Sky を廃止しました。プルリクエストを受け付けず、アップデートも提供していません。新しいプロジェクトには、skywalking-go エージェントを使用してください。

ステップ 1: レポーターのセットアップ

パラメーターをハードコーディングするか、環境変数を設定して gRPC レポーターを設定します。

オプション A -- プロジェクトでのハードコード

report, err := reporter.NewGRPCReporter(
    "<your-backend-server-address>",
    reporter.WithAuthentication("<your-auth-token>"))

オプション B -- 環境変数の設定

# 永続的 -- シェルプロファイルに追加します
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address>
export SW_AGENT_AUTHENTICATION=<your-auth-token>

# その後、アプリケーションを起動します (エージェントはこれらの変数を自動的に読み取ります)

ステップ 2: トレーサーの作成

ServiceName := "<your-service-name>"
tracer, err := go2sky.NewTracer(ServiceName, go2sky.WithReporter(report))

ステップ 3: プラグインフックの追加

Go2Sky は、イベントトラッキングされた各ライブラリにフックを必要とします。GitHub の go2sky-plugins リポジトリをご参照ください。各プラグインフォルダーには、統合手順が記載された README が含まれています。

例 -- gin フレームワーク:

package main

import (
	"log"

	"github.com/SkyAPM/go2sky"
	v3 "github.com/SkyAPM/go2sky-plugins/gin/v3"
	"github.com/SkyAPM/go2sky/reporter"
	"github.com/gin-gonic/gin"
)

func main() {
	// 本番環境には gRPC レポーターを使用します
	re, err := reporter.NewLogReporter()
	if err != nil {
		log.Fatalf("new reporter error %v \n", err)
	}
	defer re.Close()

	tracer, err := go2sky.NewTracer("gin-server", go2sky.WithReporter(re))
	if err != nil {
		log.Fatalf("create tracer error %v \n", err)
	}

	gin.SetMode(gin.ReleaseMode)
	r := gin.New()

	// トレース付きの go2sky ミドルウェアを使用します
	r.Use(v3.Middleware(r, tracer))

	// ここにルートを追加します
}

ステップ 4: アプリケーションの再起動

フックを追加した後、アプリケーションを再起動します。トレースが Managed Service for OpenTelemetry コンソールに流れ始めます。

サポートされているプラグインライブラリ

各プラグインには go get による個別のインストールが必要です:

ライブラリインストールコマンド
sqlgo get -u github.com/SkyAPM/go2sky-plugins/sql
dubbo-gogo get -u github.com/SkyAPM/go2sky-plugins/dubbo-go
geargo get -u github.com/SkyAPM/go2sky-plugins/gear
gingo get -u github.com/SkyAPM/go2sky-plugins/gin/v2 または gin/v3
go-restfulgo get -u github.com/SkyAPM/go2sky-plugins/go-restful
gormgo get -u github.com/SkyAPM/go2sky-plugins/gorm
httpgo get -u github.com/SkyAPM/go2sky
go-kratos v2go get -u github.com/SkyAPM/go2sky-plugins/kratos
logrusgo get -u github.com/SkyAPM/go2sky-plugins/logrus
go-micro v3.5.0go get -u github.com/SkyAPM/go2sky-plugins/micro
mongogo get -u github.com/SkyAPM/go2sky-plugins/mongo
go-resty v2.2.0go get -u github.com/SkyAPM/go2sky-plugins/resty
zap v1.16.0go get -u github.com/SkyAPM/go2sky-plugins/zap

環境変数リファレンス

環境変数説明デフォルト
SW_AGENT_NAMEアプリケーション名なし
SW_AGENT_LAYERインスタンスのレイヤー名なし
SW_AGENT_INSTANCE_NAMEインスタンス名ランダム
SW_AGENT_SAMPLEサンプリングレート (1 = フルサンプリング)1
SW_AGENT_COLLECTOR_BACKEND_SERVICESトレースレポート用のサーバーエンドポイントなし
SW_AGENT_AUTHENTICATION認証トークンなし
SW_AGENT_COLLECTOR_HEARTBEAT_PERIODハートビート間隔 (秒単位)20
SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL動的構成フェッチ間隔 (秒単位)20
SW_AGENT_COLLECTOR_MAX_SEND_QUEUE_SIZEスパンキューバッファーサイズ30000
SW_AGENT_PROCESS_STATUS_HOOK_ENABLEプロセスステータスフックを有効にするfalse
SW_AGENT_PROCESS_LABELSカンマ区切りのプロセスラベルなし

よくある質問

skywalking-go のインジェクションコマンドが失敗した場合の対処法

Error when inject fails

-inject メソッドが失敗した場合は、代わりにメインパッケージに SkyWalking のインポートを直接追加します:

import _ "github.com/apache/skywalking-go"

次に、手順 5で説明されているように、-toolexec を使用して再構築します。

Go2Sky を使用したプロセス間呼び出しで、コンソールにトレースが切断されて表示されるのはなぜですか?

Managed Service for OpenTelemetry は、HTTP ヘッダーで伝達されるトレース ID によってスパンを関連付けます。サービス間でトレースが切断されて表示される場合、トレースコンテキストが正しく伝播されていません。

これを修正するには、HTTP 境界を越えてトレースコンテキストを伝播するエントリスパンとイグジットスパンを作成します。

// CreateEntrySpan -- 受信 HTTP リクエストからトレースコンテキストを抽出します
span, ctx, err := tracer.CreateEntrySpan(r.Context(), "/api/login", func(key string) (string, error) {
    return r.Header.Get(key), nil
})

// CreateExitSpan -- 送信 HTTP リクエストにトレースコンテキストを注入します
span, err := tracer.CreateExitSpan(req.Context(), "/service/validate", "tomcat-service:8080", func(key, value string) error {
    req.Header.Set(key, value)
    return nil
})

インプロセススパン (ネットワーク境界がない場合) には、 CreateLocalSpan を使用します:

span, ctx, err := tracer.CreateLocalSpan(context.Background())
subSpan, newCtx, err := tracer.CreateLocalSpan(ctx)

プロセス境界を越えるすべての HTTP 呼び出しは、トレースコンテキストを保持する必要があります。各境界で CreateEntrySpan および CreateExitSpan を使用しない場合、ダウンストリームサービスは新しい切断されたトレースを開始します。

サンプルコード

完全な動作例については、GitHub の skywalking-demo リポジトリをご参照ください。

関連項目