Skywalking 分散リンク トレーシングの概要

Skywalking 分散リンク トレーシングの概要

今日は、分散リンクトラッキングソフトウェアを紹介します。リンクトラッキングを導入する必要があるのはなぜですか?

現在、インターネット業界は活況を呈しており、ビジネスはますます複雑かつ大規模になっています。スタンドアロン アプリケーションでは日常のニーズを満たすことができなくなり、分散型およびマイクロサービス アーキテクチャが登場しました。マイクロサービス環境では、さまざまなサービスで日常的なシステムへの呼び出しがレイヤーごとに継続的に行われます。呼び出しチェーンの完全な記録がない場合、問題のトラブルシューティングは非常に困難になります。

[[357992]]

APM (アプリケーション パフォーマンス管理)

上記の状況に対応して、apm は解決策を提示しました。業界で一般的な APM ツールとしては、Cat、Zipkin、Pinpoint、SkyWalking などがあります。

本記事では、国産の優れたAPMツールであり、Apache FoundationのトッププロジェクトにもなっているSkyWalkingを中心に紹介します。これには、分散トレース、パフォーマンス指標分析、アプリケーションおよびサービスの依存関係分析などが含まれます。

スカイウォーキングを始める

ソフトウェアのインストールについては説明されていませんが、情報はご自身で確認できます。

公式アドレス: https://skywalking.apache.org/

まず、以下に示すように、ソフトウェアの操作インターフェースを見てみましょう。


スカイウォーキングの3つの重要な概念を紹介する

  • サービス: サービス クラスターを参照します
  • エンドポイント: 外部インターフェース
  • インスタンス: クラスター内のインスタンスを指します

スカイウォーキングアーキテクチャ図


スカイウォーキングは、3 つの主要な部分から構成されています。最初の部分はデータ収集、2 番目の部分はスカイウォーキング サービス、3 番目の部分はデータ ストレージです。

プロジェクトをスカイウォーキングにどうつなげるか?

スカイウォーキングへのアクセスは非常に簡単です。以下に示すように、Javaの起動パラメータを指定するだけです。


  1. //実行するJavaエージェントを指定する
  2. -javaagent:D:\soft\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
  3. // スカイウォーキングのプログラム名を設定する
  4. -Dskywalking.agent.service_name=ストレステスト
  5. // スカイウォーキング管理ポート
  6. -Dskywalking.collector.backend_service=localhost:11800

スカイウォーキングの原理

上記のアプリケーションケースを見るとわかるように、次のコードがあります。

  1. -javaagent:/path//skywalking-agent.jar

Java エージェントについて知っている場合は、Skywalking の原理は Java エージェント (Java プローブ) を使用することだとわかります。 Java エージェントは、java コマンドのパラメーターです。パラメータ javaagent を使用して jar パッケージを指定できます。

  • この jar パッケージの MANIFEST.MF ファイルでは、Premain-Class 項目を指定する必要があります。
  • Premain-Class で指定されたクラスは、premain() メソッドを実装する必要があります。

Java 仮想マシンが起動すると、main 関数を実行する前に、JVM はまず -javaagent で指定された jar パッケージ内の Premain Class クラスの premain メソッドを実行します。

独自のJavaエージェントの実装

簡単なJavaエージェントを書いてみよう

エージェントコード

  1. パブリッククラスMyAgent {
  2. /**
  3. * agentArgs は、premain 関数によって取得されるプログラム パラメーターであり、「-javaagent」とともに渡されます。
  4. * Inst は java.lang.instrument.Instrumentation のインスタンスであり、JVM によって自動的に渡されます。
  5. */
  6. 公共 静的void premain(文字列agentArgs、インストルメンテーションinst) {
  7. システム。 out .println( "=========premainメソッド実行1=========" );
  8. システム。 .println(agentArgs)を出力します}
  9. /**
  10. * 存在しない場合はpremain(String agentArgs, Instrumentation inst)
  11. * premain(String agentArgs)を実行します
  12. */
  13. 公共 静的void premain(String agentArgs) {
  14. システム。 out .println( "=========premainメソッド実行2=========" );
  15. システム。 .println(agentArgs)を出力します
  16. }
  17. }

MANIFREST.MFファイルを手動で記述することを避けるために、Mavenプラグインを導入します。

  1. <プラグイン>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-jar-plugin</artifactId>
  4. <バージョン>3.1.0</バージョン>
  5. <構成>
  6. <アーカイブ>
  7. <! --META-INF/MANIFEST.MF を自動的に追加 -->  
  8. <マニフェスト>
  9. <addClasspath>は true </addClasspath>
  10. </マニフェスト>
  11. <マニフェストエントリ>
  12. <Premain クラス>com.example.agent.PreMainAgent</Premain クラス>
  13. </マニフェストエントリ>
  14. </アーカイブ>
  15. </構成>
  16. </プラグイン>

mvn clean package パッケージ プログラムを実行すると、以下に示すように myAgent.jar が取得されます。


メインプログラムを書く

  1. パブリッククラステスト{
  2. 公共 静的void main(String[] args) {
  3. System.out.println ( "メインプログラム..." ) ;
  4. }
  5. }

以下のように、アイデアが開始されたときにエージェントを指定します。


メインプログラムを実行した結果は次のようになります。

  1. =========premain メソッド実行 1========
  2. ヌル 
  3. メインプログラム...

メインプログラム...

premain メソッドが実行され、パラメータが渡されていないことがわかります。パラメータを渡す必要がある場合は、javagent プロパティを次のように設定します。

  1. -javaagent:/Users/ganhuojun/code/myagent/target/myAgent.jar=abc

<<:  2020 TECHO PARK 開発者会議セキュリティフォーラムで最先端のセキュリティ技術を探りましょう。

>>:  モノリシックからサーバーレスに移行する際の落とし穴を避けるためのガイド

推薦する

エンタープライズ プライベート クラウド導入ガイド

プライベートクラウドとは何ですか?まず、プライベート クラウドとは何かを簡単に見てみましょう。プライ...

クラウド コンピューティング ベンダーのセキュリティ ガイド: 時間をかける価値はありますか?

この記事では、AWS、Azure、Google Cloud が提供するクラウド セキュリティ ガイド...

Red Hat Open Hybrid Cloudは企業のデジタルネイティブ化を支援します

[51CTO.comからのオリジナル記事] 2020年のコロナウイルスのパンデミックにより、企業のデ...

Baiduライブラリ外部リンク愛してると言うのは簡単じゃない

Baidu の最適化を行う国内 SEO 担当者の間では、Baidu は常に自社の製品をより大切に扱う...

「恐れるべき唯一のものは、教育を受けたフーリガンだ」マイクロポルノマーケティングについての短い議論

良い製品を宣伝しなければ、ビジネスは生まれません。大手企業や大手ウェブサイトでは、いたるところでプロ...

SEOはSEMと切り離せない

はじめに: SEM は検索エンジン マーケティングであり、SEO は検索エンジン最適化です。前者では...

PolarDB-X 2.0: 透過的な分散データベースの使用感

透過的な分散は、PolarDB-X がまもなくリリースする機能です。これにより、アプリケーションはス...

P2P業界は急速に拡大し、新しいプラットフォームは高金利で資金を引き付けるが、リスクは隠れている

プラットフォームの数と取引量は倍増し、機関投資家や個人投資家が参入しています...P2Pプラットフォ...

オムニチャネル環境でユーザー操作を実行するにはどうすればよいでしょうか?

オムニチャネル環境でユーザー操作を適切に行うことは簡単ではありません。これを実現するには、消費者向け...

第 1 四半期のモバイル広告トレンドに関する洞察

第 1 四半期のモバイル広告市場を包括的に分析した結果、次のことがわかりました。 1. 総合電子商取...

梅城インターネットKステーション事件から - DNSと国内IDCについて語る

最近、QQグループやWeiboで「Mecheng Internetの仮想ホストを使用しているウェブサ...

Kubernetesの適用シナリオとそれに適した企業

人々は、Kubernetes とは何か、それが本当に良い選択であるかどうか、そしてその使用の詳細を理...

キャプテンサーバー - 3.75ドル/Kvm/1gメモリ/100M無制限

まったく新しい VPS マーチャントである captainserver は、仮想ホスティング、x、V...

ウェブサイト運営にあたっての準備はどのようなものがありますか?

ますます多くのウェブマスターの友人が、現在、ウェブサイト、特に一部の企業ウェブサイトや個人の草の根ウ...

iniz-1gメモリ/512mVswap/50gハードディスク/Gポート/年額31ドル

INIZ は英国で正式に登録された会社です。同社の VPS はエンタープライズ レベルのアプリケーシ...