GO エージェント
GO エージェントは、GO 言語アプリケーションとマイクロサービスを監視し、パフォーマンス問題の根本原因を特定、発見するのに有用です。
前提条件
- エージェントのインストールに必要な前提条件の確認については、エージェントのインストールに必要な前提条件の確認 を参照してください。
- Linux では、Golang バージョン1.11以降が必要です。
- ACCESS_TOKEN: .netrc に含めるために必要な環境変数
- USERNAME: .netrc に含めるために必要な環境変数
- SIXTHSENSE_TOKEN: トークンへのアクセスについては 「SixthSense ポータルを利用開始する」にある アクセス トークンの取得 を参照してください。
GO エージェントのインストール
以下の手順にて、VM と Docke rに GO エージェントをインストールします。
VM へのインストール
- SixthSense レジストリへの認証用にルートで .netrc ファイルを設定します。
nano ~/.netrc
echo 「machine artifacts-observability.sixthsense.rakuten.com login ${USERNAME} password ${ACCESS_TOKEN}」 > ~/.netrc
- パッケージをインストールします。
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 へのインストール
- .netrc ファイルを含む Docker ファイルをファイルシステムのルートにセットアップします。
- 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
アプリケーションの設定
- アプリケーションのメイン関数に 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
)
- 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)
}
- http サーバーをラップしてトランザクションを記録します。
go func() {
logger.Log("transport", "HTTP", "port", *port)
errc <- http.ListenAndServe(":"+*port, serverMiddleWare(handler))
}()
- gin、go-resty など、その他のトランザクションをインストルメント化します。 詳細は サポート対象のテクノロジー を参照してください。
サポート対象のフレームワークおよびプラグイン
言語 | サポート対象のフレームワーク |
---|---|
GO | http サーバーおよびクライアント、Gin(v1.5.0)、Gear(v1.21.0)、go-resty(v2.2.0)、go-micro(<=v1.8) (v2.x はサポート対象外)、go-restful(v3+) |
Scheduler | Elastic 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
関連リンク: