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 開発者会議セキュリティフォーラムで最先端のセキュリティ技術を探りましょう。

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

推薦する

百度が検索結果のジャンプを「許可」する方法

百度のアルゴリズムは今日大きく変化したが、依然として検索結果の公平性を損なう不正手段がいくつか存在し...

世界のクラウドコンピューティング市場の価値は2025年に8,321億ドルに達する

最近、世界はCOVID-19による大規模な危機に見舞われています。健康への影響にもかかわらず、パンデ...

インターネットマーケティングは情報技術を利用して顧客価値を創造し、提供する

これは、企業がオンライン マーケティングを実行する方法をガイドする一連の記事です。Xinlong I...

スタートアップ企業のロゴデザインは妥協できません! LOGOデザインネットワークはブランドをより際立たせます

月給5,000~50,000のこれらのプロジェクトはあなたの将来です最近では、自分でビジネスを始める...

Kubernetes: 仮想クラスターでコストを節約

[[426435]] [51CTO.com クイック翻訳] Kubernetes を複数のクラスター...

最適化には「幅広く網を張る」ための「高貴で高貴な」ロングテールキーワードは必要ない

最適化を行う際、多くの人は人気キーワードの競争を追求することを好みますが、これらのキーワードは「高、...

クラウド コンピューティング アーキテクチャ設計の 6 つの原則に従っていますか?

クラウドコンピューティングは、私たちの日常生活や仕事、勉強に直接的な影響を感じることはないかもしれま...

企業の製品写真をBaiduにアップロードする手順と方法について簡単に説明します。

会社の製品写真を Baidu に表示させるにはどうすればよいでしょうか。これは多くの SEO 担当者...

Baidu Spiderの現在のクローリングの頻度と対象について簡単に説明します

今日、朝起きてウェブサイトを開くと、ある現象が見つかりました。それは、一晩に百度スパイダーが何度も来...

ブランドマーケティング戦略分析事例!

健康ブームの影響を受けて、植物由来のトラックは業界の新たな寵児となり、特に植物性タンパク質飲料の分野...

百度、小規模なテストでソーシャル検索を開始か

Phoenix Technology Beijing time 1月10日午前、Weiboユーザー@...

KubernetesベースのJenkinsサービスもDockerに移行可能

[[383773]]この記事はWeChatの公開アカウント「Ask Qi」から転載したもので、著者は...

効果的なWeiboマーケティング手法とは?共感と視点

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス2009年から2019年...

仮想化と分散:クラウドストレージの方法と将来の動向

ストレージ リソースを仮想化するという概念は古いものです。当初、クラウド ストレージは、ストレージの...

World of Warcraft 1 日目: Microsoft のクラウド データ センターの変更

2012 年 10 月 25 日から 26 日まで、51CTO は北京工人体育館で 2012 クラウ...