SpringCloud Alibaba 実戦とソースコード (7) Skywalking

スカイウォーキングとは

  Skywalking は、国内のオープンソース愛好家である Wu Sheng 氏が Apache インキュベーターに提出したオープンソース製品であり、Zipkin/Pinpoint/CAT の設計思想も吸収しています。特徴は、さまざまなプラグインのサポート、強力な UI 機能、非侵入的な埋め込みポイントのサポートです。現在ではほとんどのメーカーが使用しており、バージョンアップも早いです。

  データ ストレージのサポート: Elasticsearch、MySQL、H2、TiDB。デフォルトは H2 で、メモリに保存されます。実際、通常はESに保存します。

ホームページ: http://skywalking.apache.org/
ダウンロード: https://skywalking.apache.org/downloads/
github: https://github.com/apache/skywalking
ドキュメント: https://github.com/ Apache /skywalking/tree/master/docs
設定: https://github.com/apache/skywalking/tree/master/docs/en/setup/backend

APM

emsp; APM (Application Performance Management の正式名) は、さまざまなプローブを通じてデータを収集し、主要な指標を収集し、それらのデータをまとめて提示して、アプリケーション パフォーマンス管理と障害管理に対する体系的なソリューションを実現することを目的としています。

  Zabbix、Premetheus、open-falcon などの監視システムは主にサーバー ハードウェアのインジケーターとシステム サービスの実行ステータスに焦点を当てていますが、APM システムはプログラムの内部実行プロセスのインジケーターとサービス間のリンク呼び出しの監視により注意を払っます。詳細なコード リクエスト応答の「遅い」という根本的な問題を発見し、Zabbix などの監視システムを補完します。現在、市場に出回っているオープンソース APM システムには、主に CAT、Zipkin、Pinpoint、SkyWalking が含まれます。 Google の実装を参照してくださいDapper

リンクトレースツールの比較

リンク追跡ツールには通常、次の機能があります。

  • ハートビート検出 (アプリケーションがまだ実行中かどうかを判断するため)
  • リクエストの実行プロセスと実行時間を記録します。
  • リソース監視(CPU、メモリ、帯域幅、ディスク)
  • アラーム機能(実行時間、成功率などを監視し、メール、DingTalk、SMS、WeChatなどで通知)
  • ビジュアライゼーションページ

一般的に使用されるツールには次のものがあります。

Zipkin
  Twitter のオープンソース コール チェーン分析ツールは、springcloud sleuth をベースとして現在広く使用されており、軽量で使用とデプロイが簡単であることが特徴です。   バイトコードインジェクションに基づく韓国のオープンソースコールチェーン分析とアプリケーション監視分析ツールを
ピンポイントで提供します。
さまざまなプラグインをサポートし、強力な UI 機能を備え、アクセス側でコードの侵入がないことが特徴です。
SkyWalking は、
  バイトコード インジェクションに基づくローカル オープン ソース コール チェーン分析、およびアプリケーションの監視および分析ツールです。さまざまなプラグインをサポートし、強力な UI 機能、アクセス側でのコード侵入がないことが特徴です。現在、Apache インキュベーターに参加しています。
CAT
  Dianping のオープンソース監視プラットフォーム ツールには、コール チェーン分析、アプリケーション監視分析、ログ収集、コーディングと構成に基づく監視と警報が含まれます。

各種寸法の比較

比較品 ジップキン ピンポイント スカイウォーキング
実現方法 リクエストをインターセプトし、(Http、MQ) データを Zipkin サービスに送信します Java プローブ、バイトコード拡張 Java プローブ、バイトコード拡張 コード埋め込みポイント (インターセプター、アノテーション、フィルターなど)
アクセス方法 linkerd または sleuth メソッドに基づく Javaエージェントのバイトコード Javaエージェントのバイトコード コード侵入
エージェントからコレクターへのプロトコル http、MQ 倹約 gRPC http/tcp
オープントレーシング サポート サポートしません サポート サポートしません
粒状性 インターフェースレベル メソッドレベル メソッドレベル コードレベル
グローバルな通話統計 サポートしません サポート サポート サポート
トレースIDクエリ サポート サポートしません サポート サポートしません
警察を呼んで下さい サポートしません サポート サポート サポート
JVM監視 サポートしません サポートしません サポート サポート
UI機能 サポート サポート サポート サポート
データストレージ ES、MySQLなど HBase ES/H2/MySQL MySQL/HDFS

性能比較表
ここに画像の説明を挿入します

スカイウォーキングの特徴

  1. 言語プローブとサービスメッシュを通じて監視データを取得する、さまざまな監視方法
  2. Java、.NET Core、Node.js を含む複数の言語での自動プローブをサポート
  3. 軽量かつ効率的で、ビッグデータ プラットフォームや大量のサーバー リソースは必要ありません。
  4. モジュール化、UI、ストレージ、クラスター管理に使用できるメカニズムが複数あります。
  5. サポートアラーム、アラーム
  6. 優れた視覚化ソリューション

スカイウォーク構造

ここに画像の説明を挿入します
ここに画像の説明を挿入します

例証します:

  • Skywalking エージェントはビジネス システムにバインドされており、さまざまな監視データの収集を担当します。
  • Skywalking oapservice は、Skywalking エージェントから監視データを受信して​​データベースに保存する、Skywalking Web アプリ フロントエンドからのリクエストを受け入れる、データベースからデータをクエリしてフロントエンドに返すなど、監視データの処理を担当します。 oapservice は通常、クラスター内に構築されます。
  • データを視覚的に表示するために使用される Skywalking Web アプリ、UI サービス
  • ユーザーが監視データを永続化するためのデータベースは、ElasticSearch、MySQL などを選択できます。

インストールと展開

公式ウェブサイト

http://skywalking.apache.org/

ダウンロード

http://skywalking.apache.org/downloads/
ここに画像の説明を挿入します

起動する

ここに画像の説明を挿入します

サービスアクセスプローブ

脚本

# 生产环境
#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=boot-micrometer #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=-javaagent:/root/apache-skywalking-apm-bin/agent/skywalking-agent.jar
java $JAVA_AGENT -jar springcloudalibaba-0.0.1-SNAPSHOT.jar #jar启动
統合されたIDE
# java应用启动时
-Xmx512m
-javaagent:E:/environment/SpringCloudAlibaba/skywalking/skywalking-agent/skywalking-agent.jar 
-Dskywalking.agent.service_name=provider 
-Dskywalking.collector.backend_service=127.0.0.1:11800

スカイウォーキングは複数のマイクロサービスにわたるゲートウェイを追跡します (バグ)

ここに画像の説明を挿入します

SkyWalkingの3つのコンセプト

  • サービス: リクエストに対して同じ動作を提供する一連のワークロードまたはグループを表します。エージェントを使用する場合は、サービスの名前を定義できます。
  • サービス インスタンス: 上記の一連のワークロードの各ワークロードはインスタンスと呼ばれます。サービス インスタンスは、実際にはオペレーティング システム上の実際のプロセスです。
  • エンドポイント: HTTP の URI パスや gRPC サービスのクラス名 + メソッド署名など、特定のサービスによって受信されたリクエスト パス。

モニターダッシュボード ダッシュボード

ダッシュボード:http://127.0.0.1:8080/

データ収集ポート:

  • HTTP デフォルトポート 12800

  • gRPC のデフォルト ポート 11800

ここに画像の説明を挿入します
ここに画像の説明を挿入します

カスタム SkyWalking リンク

  デフォルトでは、Skywalking はビジネス メソッドを記録しません。ビジネス メソッドのリンク監視を追加する必要がある場合は、次の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>8.8.0</version>
</dependency>

次に、ビジネスメソッドに @Trace アノテーションを追加します。その後、メソッドが監視されます
ここに画像の説明を挿入します

ここに画像の説明を挿入します
このメソッドの詳細を確認してください。戻り情報やパラメーターがありません。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
この問題は @Tags と @Tag を使用して解決できます。

@Trace  //表示当前方法会被skywalking追踪
    @Tags({
    
    //显示指定的返回结果和参数
            @Tag(key = "process",value = "returnedObj"),//key:方法名  value = returnedObj:是指定返回值
            @Tag(key = "param",value = "arg[0]")//返回第一个参数
    })

key:メソッド名 value=returnedObj:yes(指定) 戻り値
arg[0]:パラメータ

統合されたロギングフレームワーク

  マイクロサービスのログ フレームワークを SkyWalking と統合し、現在の呼び出しリンクの ID がマイクロサービスのログに記録されることを期待します。その後、この ID に基づいて SkyWalking のフロントエンド インターフェイスを検索して、対応する呼び出しリンクを見つけることができます。記録。

  springboot によって実装されるデフォルトのロギング フレームワークは logback であるため、ここでは例として logback を取り上げます。

マイクロサービスに Maven 座標をインポートする

<!-- skywalking 日志记录  -->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.5.0</version>
</dependency>

プロジェクトディレクトリにファイルをresources作成しますlogback-spring.xml
ここに画像の説明を挿入します

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    	<!-- 日志的格式化 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%n</pattern>
            </layout>
        </encoder>
    </appender>

	<!-- 设置 Appender -->
    <root level="INFO">
        <appender-ref ref="console" />
    </root>

</configuration>

Skywalking UIのログメニューにログ情報を表示(共通使用)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!--  控制台日志输出的格式中添加tid  -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志的格式化 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%n</pattern>
            </layout>
        </encoder>
    </appender>

    <!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->
    <!-- https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/  -->
    <!-- 通过grpc上报日志到skywalking oap-->
    <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
    
    <!-- 设置 Appender -->
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="grpc-log" />
    </root>

</configuration>

アラームサービス

ここに画像の説明を挿入します
ここに画像の説明を挿入します
アラームログ
ここに画像の説明を挿入します

グローバルなグローバル次元

サービス負荷: 1 分あたりのサービス リクエストの数

遅いサービス: 応答が遅いサービス、単位はミリ秒

Un-Health サービス (Apdex) : Apdex パフォーマンス インデックス、1 は完璧なスコアです。

  • Apdex は、多くのネットワーク分析技術企業と計測業界で構成されるアライアンスであり、「アプリケーション パフォーマンス インデックス」(Application Performance Index) を共同開発しました。Apdex を一言で言えば、アプリケーションのパフォーマンスに対するユーザーの満足度を数値化したものです。
  • http://www.apdex.org/

遅いエンドポイント: 遅い応答エンドポイント、単位はミリ秒

グローバル応答遅延: 応答遅延の割合、さまざまな割合の遅延時間、単位はミリ秒

グローバル ヒートマップ: サービス応答時間の熱分布マップ。一定期間内の異なる応答時間の数に応じて色の濃さを表示します。

サービスサービスの次元

Service Apdex (数値): 現在のサービスの評価

サービスの平均応答時間: 平均応答遅延、単位はミリ秒

成功率 (数値) : リクエストの成功率

サービス負荷 (数値) : 1 分あたりのリクエストの数

Service Apdex (折れ線グラフ) : さまざまな時点での Apdex スコア

サービス応答時間のパーセンタイル: 応答遅延の割合

成功率 (折れ線グラフ) : さまざまな時点でのリクエストの成功率

サービス負荷 (折れ線グラフ) : さまざまな時間における 1 分あたりのリクエストの数

サービス インスタンスの負荷: サービス インスタンスごとの 1 分あたりのリクエスト数

遅いサービス インスタンス: 各サービス インスタンスの最大遅延

Service Instance Successful Rate : 各サービス インスタンスのリクエスト成功率

実例

サービス インスタンスの負荷: 現在のインスタンスの 1 分あたりのリクエスト数

Service Instance Successful Rate : 現在のインスタンスのリクエスト成功率

Service Instance Latency : 現在のインスタンスの応答遅延

JVM CPU : jvm が占有する CPU の割合

JVM メモリ: JVM メモリ サイズ、単位 m

JVM GC Time : JVM ガベージ コレクション時間 (YGC と OGC を含む)

JVM GC Count : JVM ガベージ コレクション時間 (YGC と OGC を含む)

終点

現在のサービスのエンドポイント負荷: エンドポイントごとの 1 分あたりのリクエスト数

現在のサービスの遅いエンドポイント: 各エンドポイントの最も遅いリクエスト時間 (ミリ秒)

現在のサービスの成功率: 各エンドポイントのリクエスト成功率

Endpoint Load : 現在のエンドポイントの各期間のデータをリクエストします

エンドポイントの平均応答時間: 現在のエンドポイントの各期間のリクエスト ラインの応答時間

エンドポイント応答時間パーセンタイル: 現在のエンドポイントの各期間の応答時間の割合

エンドポイント成功率: 各期間における現在のエンドポイントのリクエスト成功率

おすすめ

転載: blog.csdn.net/Forbidden_City/article/details/132405831