社内ネットワーク環境における Dubbo マイクロサービスの Guance への接続¶
著者: 刘玉杰
はじめに¶
一部のプロジェクトでは、ユーザーは社内の従業員やグループ企業の従業員です。セキュリティのため、これらのプロジェクトは自社のデータセンターにデプロイされ、従業員は社内ネットワークや VPN を介してアクセスします。このようなシナリオに対応するため、Guanceはオフラインデプロイソリューションを提供しています。これは、外部ネットワークに接続可能な 1 台のホストに DataKit をデプロイし、Proxy コレクターを有効にすることで、社内ネットワークのホストがこのプロキシを介して DataKit をインストールし、すべてのデータもこのデプロイされた DataKit を介して Guance に送信されるというものです。
以下では、マイクロサービスアーキテクチャのプロジェクトを使用して、Guance に接続する方法を説明します。このプロジェクトはフロントエンド/バックエンドが分離されたプロジェクトで、フロントエンドは Vue を使用して開発され、バックエンドのマイクロサービスは Spring Boot と Dubbo を使用して開発されています。フロントエンドは Gateway を介してバックエンドのサービスにアクセスします。ユーザーはブラウザでフロントエンドの Web サイトにアクセスし、画面上のボタンをクリックしてバックエンドのインターフェースリクエストをトリガーします。リクエストは Gateway によって Consumer マイクロサービスに転送され、Consumer マイクロサービスはリクエスト処理中に Provider マイクロサービスを呼び出し、ログを記録し、処理が完了すると結果をブラウザに返します。これで 1 回の呼び出しが完了します。
デプロイ計画¶
サンプルのプロジェクト全体には 4 つのサービスがあり、それぞれ 4 台のホストにデプロイされています。また、外部ネットワークに接続できるホストが 1 台必要で、このホストも他の 4 台のホストと同じ社内ネットワーク上にあります。
- まず、外部ネットワークのあるホストに DataKit をデプロイし、Proxy コレクターを有効にします。
- 次に、他の 4 台のホストがこのプロキシを介して DataKit をインストールします。
- その後、Nginx がインストールされた Web サーバーに Web プロジェクトをデプロイします。この Web ホストの 9529 ポートは、社内ネットワークの他のホストからアクセスできるようにします。
- 最後に、Gateway、Consumer、Provider のマイクロサービスをデプロイし、SkyWalking コレクターを有効にします。
サンプルで使用するサービスは https://github.com/stevenliu2020/vue3-dubbo からダウンロードできます。これには provider.jar、consumer.jar、gateway.jar および dist ディレクトリが含まれています。dist が Vue プロジェクトです。
以下は、プロジェクトとホストの対応関係、および全体のデプロイアーキテクチャ図です。
- プロジェクトとホストの対応関係
| IP | デプロイするプロジェクト | 説明 |
|---|---|---|
| 172.16.0.245 | DataKit (Proxy) | 外部ネットワーク接続可能 |
| 172.16.0.29 | Web/DataKit | 社内ネットワーク、Web サーバー(Nginx) |
| 172.16.0.51 | Gateway/DataKit | 社内ネットワーク、Gateway サービスをデプロイ |
| 172.16.0.52 | Consumer/DataKit | 社内ネットワーク、Consumer サービスをデプロイ |
| 172.16.0.53 | Provider/DataKit | 社内ネットワーク、Provider サービスをデプロイ |
- 全体デプロイアーキテクチャ図
前提条件¶
- CentOS 7.9
- Nginx のインストール
- JDK のインストール
- Zookeeper のインストール
- Guance アカウント
環境バージョン¶
Warning
今回のサンプルで使用するバージョンは以下の通りです:DataKit 1.4.9、Nginx 1.22.0、Spring Cloud 3.1.1、Spring Boot 2.6.6、Dubbo 2.7.15、Zookeeper 3.7.1、Vue 3.2、 JDK 1.8
操作手順¶
1 DataKit のデプロイ¶
1.1 オンラインでの DataKit デプロイ¶
「Guance」にログインし、「統合」モジュールにアクセスし、「DataKit」→「Linux」をクリックし、インストールコマンドをコピーして、172.16.0.245 ホストで実行します。インストールコマンドにはトークンが含まれていることに注意してください。このトークンは後続の操作で使用されます。
インストールが完了したら、以下のコマンドを実行して Proxy コレクターを有効にします。
/usr/local/datakit/conf.d/datakit.conf ファイルを編集し、http_api の listen の値を 0.0.0.0:9529 に変更して、他のホストがこのホストの 9529 ポートにアクセスできるようにします。
DataKit を再起動します。
1.2 プロキシ経由での DataKit デプロイ¶
172.16.0.29 ホストにログインし、以下のコマンドを実行して DataKit をインストールします。
ここで 172.16.0.245 は前の手順でインストールした DataKit のホスト IP です。この手順では DataKit プロキシを介してインストールします。コマンドで使用するトークンは上記で説明したトークンと同じです。
export HTTPS_PROXY=http://172.16.0.245:9530; DK_DATAWAY=https://openway.guance.com?token=tkn_9a1111123412341234123412341113bb bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"
以下のコマンドを実行して、Guance にデータを送信できるかテストします。
curl -x http://172.16.0.245:9530 -v -X POST https://openway.guance.com/v1/write/metrics?token=tkn_9a1111123412341234123412341113bb -d "proxy_test,name=test c=123i"
200 が返されればデータの送信成功です。
同様の手順で 172.16.0.51、172.16.0.52、172.16.0.53 ホストにも DataKit をデプロイします。これで 4 台のホストへの DataKit のデプロイが完了です。
2 APM の接続¶
2.1 SkyWalking コレクターの有効化¶
172.16.0.51 ホストにログインし、サンプルファイルをコピーして、SkyWalking コレクターを有効にします。
DataKit を再起動します。
同様の操作で、172.16.0.52、172.16.0.53 ホストにデプロイされた DataKit の SkyWalking コレクターを有効にします。
2.2 SkyWalking エージェントのアップロード¶
市場には多くの APM ツールがありますが、マイクロサービスが Dubbo フレームワークを使用しているため、ここでは SkyWalking を推奨します。
apache-skywalking-java-agent-8.11.0 をダウンロードし、解凍後、ファイル名を agent に変更し、172.16.0.51、172.16.0.52、172.16.0.53 ホストの /usr/local/df-demo/ ディレクトリにアップロードします。
注意: 172.16.0.51 ホストには Gateway がデプロイされているため、
agent\optional-pluginsディレクトリのapm-spring-cloud-gateway-3.x-plugin-8.11.0.jarとapm-spring-webflux-5.x-plugin-8.11.0.jarをagent\pluginsディレクトリにコピーする必要があります。
2.3 Provider マイクロサービスのデプロイ¶
provider.jar を 172.16.0.53 ホストの /usr/local/df-demo/ ディレクトリにアップロードし、provider.jar が agent フォルダと同じディレクトリにあることを確認します。Provider サービスを起動します。
cd /usr/local/df-demo/
java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider -Dskywalking.collector.backend_service=localhost:11800 -jar provider.jar
2.4 Consumer マイクロサービスのデプロイ¶
consumer.jar を 172.16.0.52 ホストの /usr/local/df-demo/ ディレクトリにアップロードします。Consumer サービスを起動します。
cd /usr/local/df-demo/
java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-consumer -Dskywalking.collector.backend_service=localhost:11800 -jar consumer.jar
2.5 Gateway マイクロサービスのデプロイ¶
gateway.jar を 172.16.0.51 ホストの /usr/local/df-demo/ ディレクトリにアップロードします。Gateway サービスを起動します。
cd /usr/local/df-demo/
java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-gateway -Dskywalking.collector.backend_service=localhost:11800 -jar gateway.jar
3 RUM の接続¶
dist ディレクトリを 172.16.0.29 ホストの /usr/local/df-demo/ ディレクトリにアップロードします。フロントエンドがバックエンドのインターフェースに接続する URL は dist\js\app.ec288764.js ファイル内にあります。ここではバックエンドの Gateway の URL は http://172.16.0.51:9000/api です。
「Guance」にログインし、「ユーザーアクセス監視」モジュールにアクセスし、dubbo-web アプリケーションを作成し、以下のコマンドをコピーします。
/etc/nginx/nginx.conf ファイルを編集し、以下の内容を追加します:
server {
listen 80;
#add_header Access-Control-Allow-Origin '*';
#add_header Access-Control-Allow-Headers Origin,X-Requested-Width,Content-Type,Accept;
location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root /usr/local/df-demo/dist;
index index.html index.htm;
}
#location /nginx_status{
# stub_status on;
#}
}
設定を再読み込みします。
ブラウザで http://172.16.0.29/ にアクセスすると、フロントエンドのインターフェースにアクセスできます。画面のボタンをクリックすると、バックエンドのインターフェースが呼び出されます。
「Guance」にログインし、「ユーザーアクセス監視」→「dubbo-web」にアクセスします。ここにはフロントエンドアプリケーションのパフォーマンス分析に使用できる多くの機能があります。
4 ログの接続¶
SkyWalking の apm-toolkit-log4j-2.x パッケージを使用すると、SkyWalking が生成した traceId を log4j2 を介してログに出力できます。
DataKit のパイプラインは、ログから traceId を抽出してトレースに関連付けることができます。
4.1 依存関係の追加¶
Provider マイクロサービスのログに traceId を出力するには、Provider の pom.xml ファイルに依存関係を追加する必要があります。バージョンは javaagent で使用されているバージョンと同じで、ここでは 8.11.0 です。
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-2.x</artifactId>
<version>8.11.0</version>
</dependency>
4.2 ログコレクターの有効化¶
Provider サービスがデプロイされているサーバー 172.16.0.53 にログインし、サンプルファイルをコピーします。
logging.conf ファイルを編集し、source に log-dubbo-provider を入力します。この名前はログクエリやパイプラインの設定で使用されます。logfiles には収集するログファイルのパスを入力します。
DataKit を再起動します。
4.3 パイプライン¶
「Guance」にログインし、「ログ」→「Pipelines」にアクセスします。
「パイプラインを作成」をクリックし、フィルターでログコレクターを有効にする際に定義した source、つまり log-dubbo-provider を選択します。
解析ルールを定義し、以下の内容を入力します。最後に「保存」をクリックします。
# 2022-08-03 10:55:50.818 [DubboServerHandler-172.16.0.29:20880-thread-2] INFO dubbo.service.StockAPIService - [decreaseStorage,21] - [TID: 1bc41dfa-3c2c-4917-9da7-0f48b4bcf4b7] - ユーザーID:-4972683369271453960 、発起流程审批:-1133938638
grok(_, "%{TIMESTAMP_ISO8601:time} %{NOTSPACE:thread_name} %{LOGLEVEL:status}%{SPACE}%{NOTSPACE:class_name} - \\[%{NOTSPACE:method_name},%{NUMBER:line}\\] - \\[TID: %{DATA:trace_id}\\] - %{GREEDYDATA:msg}")
default_time(time)
フロントエンドを使用して Provider サービスの呼び出しをトリガーすると、Provider が生成したログが DataKit によって収集され、Guance に送信されます。
「Guance」にログインし、「ログ」モジュールのエクスプローラーにアクセスし、データソースから log-dubbo-provider を見つけ、1 つのログをクリックして開くと、traceId がタグとして設定されていることが確認できます。その後、APM でこの traceId を使用してログに関連付けることができ、問題の迅速な特定に役立ちます。
5 連携分析¶
上記の手順により、RUM、APM、ログの連携が完了しました。
「Guance」にログインし、「ユーザーアクセス監視」にアクセスし、「dubbo-web」をクリックして入り、「エクスプローラー」をクリックし、「view」を選択して、ページの呼び出し状況を確認します。
次に「route_change」をクリックして入り、Fetch/XHR タブでフロントエンドがトリガーしたインターフェースの呼び出し状況を確認できます。1 つをクリックして入ると、フレームグラフ、スパンリスト、サービス呼び出し関係、および関連する Provider サービスのログを表示できます。













