コンテンツにスキップ

社内ネットワーク環境における Dubbo マイクロサービスの Guance への接続


著者: 刘玉杰

はじめに

一部のプロジェクトでは、ユーザーは社内の従業員やグループ企業の従業員です。セキュリティのため、これらのプロジェクトは自社のデータセンターにデプロイされ、従業員は社内ネットワークや VPN を介してアクセスします。このようなシナリオに対応するため、Guanceはオフラインデプロイソリューションを提供しています。これは、外部ネットワークに接続可能な 1 台のホストに DataKit をデプロイし、Proxy コレクターを有効にすることで、社内ネットワークのホストがこのプロキシを介して DataKit をインストールし、すべてのデータもこのデプロイされた DataKit を介して Guance に送信されるというものです。

以下では、マイクロサービスアーキテクチャのプロジェクトを使用して、Guance に接続する方法を説明します。このプロジェクトはフロントエンド/バックエンドが分離されたプロジェクトで、フロントエンドは Vue を使用して開発され、バックエンドのマイクロサービスは Spring Boot と Dubbo を使用して開発されています。フロントエンドは Gateway を介してバックエンドのサービスにアクセスします。ユーザーはブラウザでフロントエンドの Web サイトにアクセスし、画面上のボタンをクリックしてバックエンドのインターフェースリクエストをトリガーします。リクエストは Gateway によって Consumer マイクロサービスに転送され、Consumer マイクロサービスはリクエスト処理中に Provider マイクロサービスを呼び出し、ログを記録し、処理が完了すると結果をブラウザに返します。これで 1 回の呼び出しが完了します。

image

デプロイ計画

サンプルのプロジェクト全体には 4 つのサービスがあり、それぞれ 4 台のホストにデプロイされています。また、外部ネットワークに接続できるホストが 1 台必要で、このホストも他の 4 台のホストと同じ社内ネットワーク上にあります。

  • まず、外部ネットワークのあるホストに DataKit をデプロイし、Proxy コレクターを有効にします。
  • 次に、他の 4 台のホストがこのプロキシを介して DataKit をインストールします。
  • その後、Nginx がインストールされた Web サーバーに Web プロジェクトをデプロイします。この Web ホストの 9529 ポートは、社内ネットワークの他のホストからアクセスできるようにします。
  • 最後に、Gateway、Consumer、Provider のマイクロサービスをデプロイし、SkyWalking コレクターを有効にします。

サンプルで使用するサービスは https://github.com/stevenliu2020/vue3-dubbo からダウンロードできます。これには provider.jarconsumer.jargateway.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 サービスをデプロイ
  • 全体デプロイアーキテクチャ図

image

前提条件

  • 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 ホストで実行します。インストールコマンドにはトークンが含まれていることに注意してください。このトークンは後続の操作で使用されます。

image

インストールが完了したら、以下のコマンドを実行して Proxy コレクターを有効にします。

cd /usr/local/datakit/conf.d/proxy
cp proxy.conf.sample proxy.conf

/usr/local/datakit/conf.d/datakit.conf ファイルを編集し、http_api の listen の値を 0.0.0.0:9529 に変更して、他のホストがこのホストの 9529 ポートにアクセスできるようにします。

image

DataKit を再起動します。

systemctl restart 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 が返されればデータの送信成功です。

image

同様の手順で 172.16.0.51172.16.0.52172.16.0.53 ホストにも DataKit をデプロイします。これで 4 台のホストへの DataKit のデプロイが完了です。

2 APM の接続

2.1 SkyWalking コレクターの有効化

172.16.0.51 ホストにログインし、サンプルファイルをコピーして、SkyWalking コレクターを有効にします。

cd /usr/local/datakit/conf.d/skywalking
cp skywalking.conf.sample skywalking.conf

DataKit を再起動します。

systemctl restart datakit

同様の操作で、172.16.0.52172.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.jarapm-spring-webflux-5.x-plugin-8.11.0.jaragent\plugins ディレクトリにコピーする必要があります。

image

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 アプリケーションを作成し、以下のコマンドをコピーします。

image

image

/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;
        #}

    }

設定を再読み込みします。

 nginx -s reload

ブラウザで http://172.16.0.29/ にアクセスすると、フロントエンドのインターフェースにアクセスできます。画面のボタンをクリックすると、バックエンドのインターフェースが呼び出されます。

Guance」にログインし、「ユーザーアクセス監視」→「dubbo-web」にアクセスします。ここにはフロントエンドアプリケーションのパフォーマンス分析に使用できる多くの機能があります。

image

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 にログインし、サンプルファイルをコピーします。

cd /usr/local/datakit/conf.d/log
cp logging.conf.sample logging.conf

logging.conf ファイルを編集し、source に log-dubbo-provider を入力します。この名前はログクエリやパイプラインの設定で使用されます。logfiles には収集するログファイルのパスを入力します。

image

DataKit を再起動します。

systemctl restart 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)

image

フロントエンドを使用して Provider サービスの呼び出しをトリガーすると、Provider が生成したログが DataKit によって収集され、Guance に送信されます。

Guance」にログインし、「ログ」モジュールのエクスプローラーにアクセスし、データソースから log-dubbo-provider を見つけ、1 つのログをクリックして開くと、traceId がタグとして設定されていることが確認できます。その後、APM でこの traceId を使用してログに関連付けることができ、問題の迅速な特定に役立ちます。

image

5 連携分析

上記の手順により、RUM、APM、ログの連携が完了しました。

Guance」にログインし、「ユーザーアクセス監視」にアクセスし、「dubbo-web」をクリックして入り、「エクスプローラー」をクリックし、「view」を選択して、ページの呼び出し状況を確認します。
次に「route_change」をクリックして入り、Fetch/XHR タブでフロントエンドがトリガーしたインターフェースの呼び出し状況を確認できます。1 つをクリックして入ると、フレームグラフ、スパンリスト、サービス呼び出し関係、および関連する Provider サービスのログを表示できます。

image

image

フィードバック

このページは役に立ちましたか?