Javaアプリケーションの性能管理pinpointの環境構築

IT系

作成中

Pinpoint は、NAVERが開発・オープンソース化(Apache License 2.0)している大規模分散システム向けの APM(Application Performance Management:アプリケーション性能管理) および分散トレーシングツールです。Googleの「Dapper」論文にインスピレーションを受けて設計されています。

主な特徴

コードレベルの可視性: CallStack(コールスタック)機能により、分散システムをまたぐトランザクションの処理やメソッド単位の遅延時間を詳細に把握できます。

トポロジーの自動検出: ServerMap を通じて、サーバー間の接続関係や通信フローをリアルタイムに視覚化します。

ゼロコード・エージェント・インストール: アプリケーションのコードを変更することなく、Java、PHP、Pythonなどのエージェントを組み込んで監視が可能です。

低オーバーヘッド: システムへの負荷が少なく、リソース消費を約3%程度に抑えます。

主要コンポーネント: Collector、Web、Agent の3つの主要コンポーネントで構成され、データストレージには Apache HBase(または関連ストレージ)を使用します。

詳細なドキュメントやソースコードは Pinpoint 公式サイト または Pinpoint GitHubリポジトリ から確認できます。

ここでは、dockerを使って環境を構築します。コードは以下の物を使わせて頂きますhttps://github.com/pinpoint-apm/pinpoint-docker。

dockerのバージョンは上記サイトにある様に、18.02.0以上である必要があります。

サーバ側の設定

dockerを使ったアプリの構築

バージョン 4.0.0での変更の反映漏れの為docker-compose.ymlを修正します。

% git clone https://github.com/pinpoint-apm/pinpoint-docker.git
% cd pinpoint-docker
% cp -p docker-compose.yml docker-compose.yml.org
% vi docker-compose.yml
% diff docker-compose.yml docker-compose.yml.org
24,25c24,25
<       - ./hbase_data:/home/pinpoint/hbase:Z
<       - ./zookeeeper_data:/home/pinpoint/zookeeper:Z
---
>       - hbase_data:/home/pinpoint/hbase
>       - /home/pinpoint/zookeeper
53d52
<             curl -SL "https://raw.githubusercontent.com/pinpoint-apm/pinpoint/${PINPOINT_VERSION}/service-module/src/main/resources/sql/Service-Schema.sql" -o /docker-entrypoint-initdb.d/Service-Schema.sql &&
56d54
<       sed -i '/^--/d' /docker-entrypoint-initdb.d/Service-Schema.sql &&
69c67
<       - ./mysql_data:/var/lib/mysql:Z
---
>       - mysql_data:/var/lib/mysql
171c169
<       - ./data-volume:/pinpoint-agent:Z
---
>       - data-volume:/pinpoint-agent
230c228
<       - ./data-volume:/pinpoint-agent:Z
---
>       - data-volume:/pinpoint-agent

※上記設定で、mysqlに以下のようなserviceというテーブルが作成されます。

※あと、永続化ボリュームをdocker-compose.ymlと同じパス如何に作成するように変更しています。これは実施しなくても大丈夫です。動作には影響しません

# crulで追加した行で実行されるSQL
CREATE TABLE IF NOT EXISTS `service` (
  `uid` VARCHAR(32) NOT NULL,
  `name` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`uid`),
  UNIQUE KEY `ux_service_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

docker-composeを用いて起動しますdocker-composeのバージョンは

% docker-compose up -d

起動後、以下の通りWEBアクセスが可能です。(以下は別PC(192.168.1.203)で起動した例です。おなじPCの場合は http://localhost:8080/ で大丈夫です。)

Serviceの作成

Agentのダウンロード

アプリ側の設定

ここでは既に構築済のSpring Bootなアプリ上に設定します。

Agentの設定

プロジェクトホルダ以下にある .vscode/launch.json に agentファイルを設定します。

今回私の環境では、D:\work\springTest\demo\.vscode\launch.json にありましてそのファイルに、"vmArgs"を追加します。で、どうもサーバ側のcollectorがv4に対応していないようなので、pinpoint-agent-4.0.0.jar ではなくpinpoint-agent.jarを使います。

{
    "configurations": [
        {
            "type": "java",
            "name": "Spring Boot-SpringStart12Application<demo>",
            "request": "launch",
            "cwd": "${workspaceFolder}",
            "mainClass": "com.example.demo.SpringStart12Application",
            "projectName": "demo",
            "args": "",
            "vmArgs": "-javaagent:D:/work/springTest/pinpoint-agent-4.0.0/pinpoint-bootstrap.jar -Dpinpoint.applicationName=my-app -Dpinpoint.serviceName=my-app -Dpinpoint.agentId=my-app-01",
            "envFile": "${workspaceFolder}/.env"
        }
    ]
}

Agentのコンフィグの設定

利用するAgentが何処に情報を送るのかを以下の設定ファイルで設定

設定ファイルはAgentの pinpoint-bootstrap-4.0.0.jar と同じホルダ内にあるファイル D:\download\pinpoint-agent-4.0.0\pinpoint-agent-4.0.0\pinpoint-root.config の 以下の箇所を変更する。versionはv4からv1に変更しています。後、ipは、pinpointのcollectorが起動しているサーバのIPアドレスを設定します。

pinpoint.modules.uid.version=v1
profiler.transport.grpc.collector.ip=192.168.1.203
profiler.transport.grpc.agent.collector.ip=192.168.1.203
  • profiler.transport.grpc.collector.ip
    • 主に「トレースデータ(ユーザーのリクエストがどう処理されたか)」や「システムメトリクス(CPUやメモリの状況)」を送信するための接続先です。
  • profiler.transport.grpc.agent.collector.ip
    • 主に「エージェント自身の起動・停止ステータス」や「アプリケーションのメタデータ(クラスやメソッドの情報)」を管理するための接続先です。

Springアプリの起動

動作確認

Pinpointの画面

私の環境ではpinpointを立ち上げているサーバは192.168.1.203なので、 http://192.168.1.203:8080/ にアクセスするとWEBの画面を確認することが出来ます。

タイトルとURLをコピーしました