GO エージェント

GO エージェントは、GO 言語アプリケーションとマイクロサービスを監視し、パフォーマンス問題の根本原因を特定、発見するのに有用です。

前提条件

  • エージェントのインストールに必要な前提条件の確認については、エージェントのインストールに必要な前提条件の確認 を参照してください。
  • Linux では、Golang バージョン1.11以降が必要です。
  • ACCESS_TOKEN: .netrc に含めるために必要な環境変数
  • USERNAME: .netrc に含めるために必要な環境変数
  • SIXTHSENSE_TOKEN: トークンへのアクセスについては 「SixthSense ポータルを利用開始する」にある アクセス トークンの取得 を参照してください。

GO エージェントのインストール

以下の手順にて、VM と Docke rに GO エージェントをインストールします。

VM へのインストール

  1. SixthSense レジストリへの認証用にルートで .netrc ファイルを設定します。
nano ~/.netrc
echo 「machine artifacts-observability.sixthsense.rakuten.com login ${USERNAME} password ${ACCESS_TOKEN}」 > ~/.netrc
  1. パッケージをインストールします。

a. パッケージのインストールには、GONOSUMDB および GOPROXY などの環境変数をエクスポートする必要があります。

export GONOSUMDB=artifacts-observability.sixthsense.rakuten.com/sixthsense
export GOPROXY="direct"

b. go get/ go install を使用してインストールします。

go get artifacts-observability.sixthsense.rakuten.com/sixthsense/sixthsenseGoAgent

go get を実行する前に、ENV を引数として使用してグローバル環境をエクスポートせずにパッケージを直接インストールします。

GONOSUMDB=artifacts-observability.sixthsense.rakuten.com/sixthsense GOPROXY="direct" go get artifacts-observability.sixthsense.rakuten.com/sixthsense/sixthsenseGoAgent

Docker へのインストール

  1. .netrc ファイルを含む Docker ファイルをファイルシステムのルートにセットアップします。
  2. go get/go mod を使用してエージェントをダウンロードします。

Docker 構成例:

FROM golang:1.14
WORKDIR /src
COPY . .
RUN apt-get update
RUN apt-get install -y git
# SixthSense Setup
ENV GONOSUMDB=artifacts-observability.sixthsense.rakuten.com/sixthsense
ARG ACCESS_TOKEN
ARG USERNAME
RUN echo "machine artifacts-observability.sixthsense.rakuten.com login ${USERNAME} password ${ACCESS_TOKEN}" > ~/.netrc
# Setup netrc in local, then copy the configuration
# COPY .netrc /root/.netrc
RUN go mod download
RUN go build -o /app /src/cmd/cataloguesvc/main.go
ENTRYPOINT ["/app", "-port=8080"]
EXPOSE 8080

アプリケーションの設定

  1. アプリケーションのメイン関数に artifacts-observability.sixthsense.rakuten.com/sixthsense/sixthsenseGoAgent package/plugins をインポートします。サポート対象のプラグインについては、サポート対象のフレームワークおよびプラグインを参照してください。
import (
"artifacts-observability.sixthsense.rakuten.com/sixthsense/sixthsenseGoAgent"
httpPlugin "artifacts-observability.sixthsense.rakuten.com/sixthsense/sixthsenseGoAgent/plugins/http" // If using http plugin of sixthsense
)
  1. main 関数内でエージェントを初期化します。ここでは http プラグインを使用してセットアップします。
const (
OAP_TOKEN = "$SIXTHSENSE_TOKEN"
OAP_ADDRESS = "grpc-collector-observability.sixthsense.rakuten.com:443"
API_USER_NAME = "APPLICATION_NAME"
)
re, err := reporter.NewGRPCReporter(OAP_ADDRESS, reporter.WithAuthentication(OAP_TOKEN))
if err != nil {
log.Fatalf("new reporter error %v \n", err)
}
// add the application name and send the tracer to ConnectDatabase
tracer, err := sixthsenseGoAgent.NewTracer(API_USER_NAME, sixthsenseGoAgent.WithReporter(re))
if err != nil {
log.Fatalf("create tracer error %v \n", err)
}
serverMiddleWare, err := httpPlugin.NewServerMiddleware(tracer)
if err != nil {
log.Fatalf("create server middleware error %v \n", err)
}

OneCloud プラットフォームを使用する場合は、以下のコマンドを使用します。

// プライベートネットワークのOneCloudを使用するバックエンドへの接続用: 100.99.116.221:80
// イントラパブリックネットワークを使用するバックエンドへの接続用:133.237.176.44:80
const (
OAP_TOKEN = 「$SIXTHSENSE_TOKEN」
OAP_ADDRESS = 」133.237.176.44:80」
API_USER_NAME = 「APPLICATION_NAME」)
re, err := reporter.NewGRPCReporter(OAP_ADDRESS, reporter.WithAuthentication(OAP_TOKEN))e, err := reporter.NewGRPCReporter(OAP_ADDRESS, reporter.WithAuthentication(OAP_TOKEN), reporter.WithTransportInsecure(true))
if err != nil {
log.Fatalf(「new reporter error %v \n」, err)
}
アプリケーション名を追加し、トレースをConnectDatabaseに送信します。
tracer, err := sixthsenseGoAgent.NewTracer(API_USER_NAME, sixthsenseGoAgent.WithReporter(re))
if err != nil {
log.Fatalf(「create tracer error %v \n」, err)
}
serverMiddleWare, err := httpPlugin.NewServerMiddleware(tracer)
if err != nil {
log.Fatalf(「create tracer error %v \n」, err)
}
serverMiddleWare, err := httpPlugin.NewServerMiddleware(tracer)
if err != nil {
log.Fatalf(「create server middleware error %v \n」, err)
}
  1. http サーバーをラップしてトランザクションを記録します。
go func() {
logger.Log("transport", "HTTP", "port", *port)
errc <- http.ListenAndServe(":"+*port, serverMiddleWare(handler))
}()
  1. gin、go-resty など、その他のトランザクションをインストルメント化します。 詳細は サポート対象のテクノロジー を参照してください。

サポート対象のフレームワークおよびプラグイン

言語サポート対象のフレームワーク
GOhttp サーバーおよびクライアント、Gin(v1.5.0)、Gear(v1.21.0)、go-resty(v2.2.0)、go-micro(<=v1.8) (v2.x はサポート対象外)、go-restful(v3+)
SchedulerElastic Job 2.x Apache ShardingSphere-Elasticjob 3.0.0-alpha Spring @Scheduled 3.1+ Quartz Scheduler 2.x (オプション²) XXL Job 2.x

| | GraphQL | Graphql 8.0 -> 15.x

関連リンク:

APM メトリクス