2023年11月13日
JENNIFER5バッチ処理モニタリング
1. バッチ処理とJENNIFER
1.1 バッチ処理の特長
バッチ処理とは、指定されたロジックの実行後、終了されるプログラムである。
バッチ処理プログラムは次のような特長がある。
- 実行中にユーザからリクエストを受け入れない。
- 指定した時点から開始されロジックをすべて実行すると終了する。一つのシステムでは複数のバッチ処理が前後関係を持って実行可能。
- プロセス内部で並列処理ロジックが可能。
バッチ処理モニタリングは、この様な特長を持つプログラムの性能をモニタリングすることを意味する。
1.2 なぜ、この時点でJENNIFERのバッチ処理モニタリングをする必要があるのか?
一般的にバッチ処理は短い時間に大容量のデータを処理する。また、一晩に数千個のプロセスが実行されるため、C/C++でプログラミングするのが一般的である。しかし、H/W性能が高くなりJAVA/.NETのプログラム開発とメンテナンスの優秀性により、少しずつJAVA/.NETでバッチ処理をプログラミングする傾向が多くなっている。
特に、トランザクション量の増加スピードは、今後ますます加速する可能性がある。
2000年前後、Webアプリケーションの爆発的な増加に伴い、トランザクション量が急激に増加し、ビジネス環境及びシステムに変化をもたらした。このようなモバイル環境の変化は、今後も起こる可能性があると考えられる。
従って、これらの変化に適応するために、これからはプログラム生産性がより重要になる。また、バッチ処理も例外ではない。従って、今後バッチ処理もますますJAVA/.NETでプログラムミングすることが増えると考えられるのである。
一晩で大量のバッチ処理が実行されるエンタープライズ環境が性能管理の死角部分であることは、運用担当者にとって大きな負担になる。
バッチ処理は一般的にコントローラプログラムにより実行されるが、このコントローラはプロファイリング、モニタリング機能が弱く、チューニング目的のデータの確保が困難なため、別途のモニタリング専門ソリューションが必要である。
1.3 バッチ処理モニタリング観点から見た、JENNIFERの限界
JENNIFERはJAVA/.NET、PHP、Pythonで開発されたアプリケーションの性能をモニタリングする。JENNIFERは、その中でも特に、サービス中心的なアプリケーション性能モニタリングに最適化されたアーキテクチャである。そのため、JENNIFERはクライアントのリクエストをサービスする形態のプログラムではないStandaloneプログラム、バックグラウンドで実行されるプログラムをモニタリングすることは困難である。従って、JENNIFERがバッチ処理から性能情報を収集するためには次の事項を修正する必要がある。
JENNIFERがバッチ処理から性能情報を収集するためには次の事項を修正する必要がある。
- ドメイン:オンラインサービスで使用する「ドメインーインスタンス」の概念では有効なモニタリングができないため、バッチ処理モニタリング用「ドメインーインスタンス」の概念を定義する必要がある。
- サービスの開始点:サービスの開始点の設定がクライアント画面からは不可能であるため、エージェントの設定ファイルに設定する方法を提供する必要がある。
1.4 JENNIFERのバッチ処理モニタリング基本概念
バッチ処理モニタリング専用のドメイン
バッチ処理は処理が終わるとプロセスも終了するため、オンラインサービスのようなインスタンス(プロセス)単位をモニタリングする必要はない。普通のドメインではインスタンス単位でデータを収集及び保存するため、バッチ処理のモニタリングには適していない。
そのため、バッチ処理モニタリング専用のドメインを提供し、そのドメインをオンラインサービスのインスタンスとして使用する。バッチ処理モニタリング専用のドメインは、バッチ処理1つ(プロセス)とオンラインサービスの1つを、トランザクション形態でモニタリングする。
バッチ処理モニタリング用の開始点設定
オンラインサービスの場合は、別途の設定がなくてもエージェントの初期化ができるため、モニタリングする対象の開始点の設定が不要、もしくはクライアント画面から設定することが可能である。しかし、バッチ処理の場合はデフォルトでエージェントを初期化することができないため、バッチ処理を実行する前にモニタリング対象の開始点を設定する必要がある。
TCPを利用した情報収集
収集したデータはデータサーバと組んでいるTCPセッションを利用してリアルタイムで転送する。バッチ処理(プロセス)が開始したらTCPセッションを組んで、処理が終わったら収集したデータを全て転送した後にTCPセッションを切る。そのため、いくらデータがあってもデータがネットワーク上で無くなることがない。
2. JENNIFERインストール
2.1 バッチ処理モニタリング専用のドメイン生成
バッチ処理をモニタリングするための専用ドメインを生成する。
※バッチ処理モニタリングのためのJENNIFERサーバ側の操作手順は、すでにJENNIFERサーバ(データ、ビュー)がインストールされていることを前提にする。JENNIFERサーバのインストール方法は、別途提供される「JENNIFER5 インストールガイド」を参照する。
① ドメイン管理画面へ移動
②新しいドメインを生成
ドメインID、データサーバIP、ドメイン名、データサーバポート、説明を適切に入力する。入力が終わったら「保存」ボタンをクリックしてドメインを登録する。
③生成したドメインを選択してバッチ処理専用のドメインに変更
最初生成されたドメインは一般的なWebアプリケーションをモニタリングするためのドメインである。バッチ処理用ドメインにするため、ドメインのオプションを変更する。
④「バッチ処理」ダッシュボードへアクセス権限追加
[管理 > グループ]画面へ移動する。
アクセス権限を与えるグループを選択し、「メニュー別権限」タブを開く。ダッシュボードメニューから「バッチ処理」メニューにチェックを入れて「保存」ボタンをクリックする。
⑤「バッチ処理」ダッシュボード画面へ移動
権限の設定が正常に反映されると「ダッシュボード」選択画面で「バッチ処理」ダッシュボードが表示される。
「バッチ処理」を選択すると、バッチ処理専用のダッシュボード画面が表示される。
2.2 エージェントのインストール
バッチ処理へエージェントをインストールする方法は、基本的にWebアプリケーションサーバへインストールする方法と同じである。異なるのは、バッチ処理の特性によるインスタンスIDの指定できるオプションの提供の有無である。
- モニタリング対象のバッチ処理のJAVA起動オプションにJENNIFERエージェントのオプションを追加する。
-Djennifer.config=${JENNIFER_AGENT_DIR}/conf/jennifer.conf
-javaagent:${JENNIFER_AGENT_DIR}/jennifer.jar
- jennifer.confにはデータサーバの情報及びドメイン情報を設定する。
server_address = <JENNIFER_DATA_SERVER_IP_ADDR>
server_port = <JENNIFER_DATA_SERVER_PORT_NUM>
...
domain_id = <DOMAIN_ID_FOR_BATCHJOB>
application_start_point= <MAIN_CLASS_NAME_OF_BATCH>
次はデータサーバのIPアドレスが“192.168.1.123”、ポート番号が“5000”、バッチ処理用のドメインIDを2000、バッチ のメインクラス名を“test.batch.SampleBatch”にした場合の例である。
server_address = 192.168.1.123
server_port = 5000
...
domain_id = 2000
application_start_point = test.batch.SampleBatch
2.3 データ収集関連設定
バッチ処理の場合、数多くのSQLが実行されるケースがほとんどである。もし、SQL実行件数が多くてプロファイルデータ が非常に多い場合は、閾値未満のSQLを収集しないようにするオプションにより、収集するデータ量を減らすことが可能で ある。また、Fetch情報やDBメッセージ(DBオープン、DBクローズ)を収集しないオプションも提供する。
- 「フェッチ収集」を“Off”にするとFETCH情報がプロファイルから除外される。
- 「DBメッセージ収集」を“Off”にすると、DBコネクションのopenとcloseがプロファイルから除外される。
- 最小SQL応答時間を500に設定すると、実行時間が 500ms未満のSQLクエリがプロファイルから除外される。