docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法

docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法

1. 概要

最近、Skywalking を勉強しています。k8s を使用して Skywalking をデプロイし、ポッド内のアプリケーションを Skywalking に接続してサービス リンクを追跡する予定です。この記事では、k8s での skywalking のデプロイと使用方法を紹介するのではなく、まず手動で、docker で skywalking を使用する方法を紹介します。練習プロセス全体を通して、私は多くの文書を参照し、さまざまな問題に遭遇しました。ここでは、同じニーズを持つ友人に少しでも役立つことを願って、私自身の練習プロセスを記録します。

1. スカイウォーキング入門

SkyWalkingは、マイクロサービス、クラウドネイティブ、コンテナ化(Docker、Kubernetes、Mesos)アーキテクチャのアプリケーションを主にターゲットとした、国内で人気のAPM(アプリケーションパフォーマンスモニタリング)製品です。 SkyWalking の中核は分散トレース システムであり、現在は Apache Foundation のトップレベル プロジェクトとなっています。

スカイウォーキングの詳しい紹介については、公式ドキュメントをご覧ください:スカイウォーキング公式サイト

2. スカイウォーキング建築

論理的には、SkyWalking は、次の図に示すように、プローブ、プラットフォーム バックエンド、ストレージ、UI の 4 つの部分に分かれています。

画像.png

  • プローブはデータを収集し、SkyWalking の要件に合わせて再フォーマットします (プローブごとにサポートされるソースが異なります)。
  • プラットフォーム バックエンドは、トレース、メトリック、ログをカバーするデータの集約、分析、ストリーム処理をサポートします。
  • ストレージデバイスは、オープン/プラグ可能なインターフェイスを通じて SkyWalking データを保存します。 ElasticSearch、H2、MySQL、TiDB、InfluxDB などの既存の実装を選択することも、独自の実装を作成することもできます。
  • UIは高度にカスタマイズ可能な Web ベースのインターフェイスであり、SkyWalking エンドユーザーはこれを使用して SkyWalking データを視覚化し、管理できます。

3. スカイウォーキングはどのようにしてデータを自動的に報告するのでしょうか?

リンク トラッキング コンソールを使用してアプリケーションのリンク データを追跡する前に、クライアントを通じてアプリケーション データをリンク トラッキングに報告する必要があります。 SkyWalking は Java アプリケーション データをリンク トラッキング コンソールに報告し、まずトラッキング作業を完了する必要があります。 SkyWalking は、自動プローブ (Dubbo、gRPC、JDBC、OkHttp、Spring、Tomcat、Struts、Jedis など) と手動トレーサビリティ (OpenTracing) の両方をサポートしています。この記事では、自動ポイント埋め込み方式について紹介します。

スカイウォーキングによるデータ報告の原理を次の図に示します。

画像.png

2. docker-composeを使用してskywalking-oap-serverとskywalking-uiをインストールします。

Linux にdocker-composeをインストールするには、次のコマンドを使用します。

yum インストール -y docker-compose

次のコマンドを使用して、 skywalking-docker-compose.yamlファイルを作成します。

vim スカイウォーキング-docker-compose.yaml

ここでは、デフォルトでH2を使用してデータを保存するstandloneコンテナーを起動します。他のストレージが必要な場合は、設定に関する公式ドキュメントを参照してください。
skywalking-docker-compose.yamlファイルの内容は次のとおりです。

バージョン: '3'
サービス:
  オップ:
    イメージ: apache/skywalking-oap-server:8.4.0-es6
    コンテナ名: oap
    再起動: 常に
    ポート:
      - 11800:11800 # エージェントがデータを報告するポート。これは gRPC ポートです - 12800:12800 # ui がデータを読み取るポート。これは http ポートです skywaling-ui:
    イメージ: apache/skywalking-ui:8.4.0
    コンテナ名: ui
    依存:
      -オアプ
    リンク:
      -オアプ
    ポート:
      -8088:8080
    環境:
      - SW_OAP_ADDRESS=oap:12800

スカイウォーキングを開始するには、次のコマンドを使用します。

docker-compose -f skywalking-docker-compose.yaml アップ -d

起動ログを表示するには、次のコマンドを使用します。

docker-compose -f skywalking-docker-compose.yaml ログ -f

起動が成功したら、http://localhost:8088 にアクセスすると、次のインターフェースが表示されます。

画像.png

3. スプリングブーツをスカイウォーキングに手動で接続する

1. スカイウォーキングエージェントをダウンロードする

Skywalking 公式サイトのダウンロードアドレス: http://skywalking.apache.org/downloads/
画像.png
画像.png

apache-skywalking-apm-8.4.0.tar.gzをここからダウンロードしました。以下のコマンドを実行して Linux システムでダウンロードして解凍することもできます。

https://archive.apache.org/dist/skywalking/8.4.0/apache-skywalking-apm-8.4.0.tar.gz を取得します。

tar -zxvf apache-skywalking-apm-8.4.0.tar.gz

解凍後のディレクトリ構造は次のようになります。

画像.png

エージェント ディレクトリの説明は次のとおりです。

画像.png

2. Spring Bootプロジェクトはデータを自動的にレポートします

Spring Boot プロジェクトのデータをレポートするには、Skywalking アクセス ポイントとサービス名を構成する必要があります。これは、次の方法で構成できます。

設定ファイルを変更する

先ほどダウンロードしたagent/config/agent.configファイルを開き、次の 2 つの構成を見つけます。

# UI 内のサービス名
agent.service_name=${SW_AGENT_NAME:アプリケーション名}

# バックエンド サービスのアドレス。
コレクター.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}

実際の状況に応じて設定するだけです。設定の変更が完了したら、次のコマンドで Spring Boot プロジェクトを起動できます。

java -javaagent:<skywalking-agent-path> -jar spring-boot-demo

Agent フォルダ内の skywalking-agent.jar の絶対パスに置き換えてください。
-javaagentパラメータは-jarパラメータの前に指定する必要があることに注意してください

コマンドパラメータによる設定

サービス名は、アプリケーションの起動コマンド ラインに-Dskywalking.agent.service_nameパラメータを追加することで追加できます。
Skywalking アクセス ポイントは、アプリケーションの起動コマンド ラインに-Dskywalking.collector.backend_serviceパラメータを追加できます。
完全なコマンドは次のとおりです。

java -javaagent:<skywalking エージェントのパス> -Dskywalking.agent.service_name=<サービス名> -Dskywalking.collector.backend_service=<バックエンド サービスのアドレス> -jar yourApp.jar

アイデアの起動パラメータを設定する

idea スタートアップ構成オプションのVM optionsで以下を構成することもできます。

画像.png

設定が完了したら、プロジェクトを起動して、コンソールに次の情報が表示されます。

画像.png

スカイウォーキング コンソールを確認すると、データがありません。これは、データをコンソールに報告する前に、まずインターフェイスにアクセスする必要があるためです。テスト インターフェイスを継続的に呼び出してコンソールを再度確認すると、次の図に示すように、呼び出しステータスを確認できます。

画像.png

4. dockerを使用してSpring Bootをデプロイし、Skywalkingに接続する

ここで、Spring Boot のベースイメージは、 openjdk11skywalking-agentを含むskywalking-baseです。詳細については、以下の参考ドキュメントを参照してください。

画像.png

Spring Boot のDockerfileの内容は次のとおりです。

apache/skywalking-base:8.4.0-es6 より
ワークディレクトリ /app
コピー target/spring-demo-0.0.1-SNAPSHOT.jar spring-demo-0.0.1-SNAPSHOT.jar
環境変数 SW_AGENT_COLLECTOR_BACKEND_SERVICES="127.0.0.1:11800" \
    SW_AGENT_NAME="my-spring-demo-test-adfasdf"


コマンド java -javaagent:/skywalking/agent/skywalking-agent.jar \
         -jar spring-demo-0.0.1-SNAPSHOT.jar

ここでは、環境変数を使用して、スカイウォーキングのカスタム パラメータを設定します。環境変数のその他の構成については、 agent/config/agent.configファイルを参照してください。

次のコマンドを使用してイメージをビルドします。

次のコマンドを実行して、spring-boot-demo を実行します。

次のコマンドを使用してイメージを起動します。

docker run --rm -p 8080:8080 spring-boot-demo

起動に成功したら、テスト アドレスにアクセスして Skywalking コンソールに移動し、データが報告されているかどうかを確認できます。データが報告されていない場合は、Skywalking エージェントのログを確認する必要があります。エラー情報はagent/logs/skywalking-api.logファイルで確認できます。

参照ドキュメント

スカイウォーキング公式ドキュメント
Apache SkyWalking Docker ファイル
SkyWalkingを通じてJavaアプリケーションデータを報告する

これで、docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法についての記事は終了です。docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法についての関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerイメージをパッケージ化し、リモートサーバーにプッシュしてk8sにデプロイする方法
  • Dockerでk8sをデプロイする方法
  • Dockerコンテナのk8sデプロイメントの実装
  • Docker 学習ノート k8s デプロイ方法
  • Skywalking は Docker イメージをコンテナ化してデプロイし、テストから可用性まで k8s を構築します。

<<:  静的ウェブサイトをRSSに変換するツール

>>:  6つのレイアウトでのFrameLayoutの使用

推薦する

データベースクエリの最適化: サブクエリの最適化

1. 事例会社のトップ以外の従業員全員を年齢別にグループ化します。 t_emp で id が存在しな...

Ubuntu 16.04.4LTS に mininet をインストールする際に発生する問題と解決策

ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...

VueはExcelテーブルをインポートし、インポートに失敗したデータを自動的にダウンロードします。

次のような要件があります: インポート ボタン。ボタンをクリックして Excel テーブルをインポー...

JavaScript関数におけるこのポイントの問題の詳細な説明

このキーワードどのオブジェクトが関数を呼び出しますか? また、関数内の this はどのオブジェクト...

Reactコンポーネント通信の詳細な説明

目次コンポーネント通信の概要コンテンツ3つの方法まとめコンポーネントコミュニケーション - 父から息...

Ubuntu 20.04 に Xrdp サーバー (リモート デスクトップ) をインストールする方法

Xrdp は、グラフィカル インターフェイスを通じてリモート システムを制御できる Microsof...

Docker ロード後にイメージ名が none になる問題の解決方法

最近、docker load -i コマンドを使用してイメージ パッケージを圧縮した後、イメージ名と...

Vue のライフサイクルとフック関数の詳細な説明と典型的な面接の質問

目次1. Vue ライフサイクル2. フック機能2.1 4つの段階と8つの方法に分かれています。 2...

Vue ルーティング遅延読み込みの詳細

目次1. ルートの遅延読み込みとは何ですか? 2. ルートの遅延読み込みの使用1. ルートの遅延読み...

JavaScript オブジェクトの組み込みオブジェクト、値型、参照型の説明

目次物体オブジェクト定義オブジェクトのメンバーを反復処理するJS組み込みオブジェクト数学オブジェクト...

MySQL の最初のインストールが成功した後にパスワードを初期化する手順

ファイルをディレクトリに解凍しますこれは解凍後のディレクトリですmy.iniファイルを入力しますダブ...

Linux でテキストを表示するためのヒント (非常に実用的!)

序文日常の開発では、サーバー上でさまざまなテキストやログの表示操作を実行する必要があることがよくあり...

クラウド決済を実装するWeChatミニプログラムについて

目次1. はじめに2. 思考分析3. クラウド決済のケーススタディ1. クラウド機能1-1. 認証不...

IE6では画像要素imgに余分な空白スペースがある

ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...

シームレスなカルーセル効果を実現するネイティブ js

参考までに、ネイティブjsでカルーセル効果(シームレススクロール)を実現しています。具体的な内容は以...