JMX インターフェイスを使用したライブ モニタリング
この記事は、JMX クライアントでの監視用に Jira 内で JMX MBeans を表示する方法、および製品内診断用に JMX MBeans を使用する方法について説明します。
JMX とは何か
JMX(Java Management Extensions)は、Java アプリを監視/管理するための技術です。JMX は、MBeans(Managed Beans)と呼ばれるオブジェクトを使用して、アプリからデータやリソースを表示します。Jira Data Center の大規模なインスタンスでは、JMX を有効化することで、アプリ リソースの消費量の監視やインデックス関連のパフォーマンスの問題の診断をさらに簡単に実行できます。これによって、マシン リソースの保持/最適化方法について、より優れた判断を行えます。
Jira によって収集されるメトリック
次のテーブルは、Jira が収集するメトリック (MBeans) を示します。これらはすべて、com.atlassian.jira
プロパティにグループ化されます。
メトリック | 説明 | Jira 起動後にリセット |
---|---|---|
dashboard.view.count | すべてのダッシュボードがユーザーによって閲覧された回数 | はい |
entity.attachments.total | 添付ファイルの数 | N/A |
entity.components.total | コンポーネントの数 | N/A |
entity.customfields.total | カスタム フィールドの数 | N/A |
entity.filters.total | フィルターの数 | N/A |
entity.groups.total | ユーザー グループの数 | N/A |
entity.issues.total | 課題の数 | N/A |
entity.users.total | ユーザー数 | N/A |
entity.versions.total | 作成されたバージョンの数 | N/A |
issue.assigned.count | 課題がユーザーに割り当てられた/再割り当てされた回数 (各アクションをカウント) | はい |
issue.created.count | Jira インスタンス起動後に作成した課題の数 | はい |
issue.link.count | Jira インスタンス起動後に作成した課題リンクの数 | はい |
issue.search.count | 課題の検索回数 | はい |
issue.updated.count | 課題の更新回数 (情報の追加または変更後の各更新) | はい |
issue.worklogged.count | 課題に対する作業の記録回数 | はい |
jira.license | 所有しているライセンスのタイプ、アクティブ ユーザーの数、および各ライセンス タイプで利用可能なユーザーの最大数 | N/A |
quicksearch.concurrent.search | リアルタイムで実行されているクイック検索の同時検索数です。これを使用すると、同時検索に設定した制限が十分かどうかを判断できます。 | はい |
web.requests | リクエストの数 (invocation.count)および合計応答時間 (total.elapsed.time) | はい |
次のメトリックは 8.1 以降の Jira に追加されており、com.atlassian.jira/metrics
で公開されています。次のメトリックは、Jira を再起動するとすべてリセットされます。
メトリック パス | 説明 |
---|---|
comment | コメント操作に関するメトリック |
comment/Create | 作成されているコメント |
comment/Delete | 削除されているコメント |
comment/Update | 更新されているコメント |
indexing | 課題、コメント、作業ログ、変更のインデックスに関するメトリック |
indexing/CreateChangeHistoryDocument | 変更履歴のエンティティ用に作成されているインデックス ドキュメント。各課題に対して複数の変更履歴ドキュメントが作成される可能性があることにご注意ください。 |
indexing/CreateCommentDocument | コメント エンティティ用に作成されているインデックス ドキュメント |
indexing/CreateIssueDocument | 課題エンティティ用に作成されているインデックス ドキュメント。 |
indexing/IssueAddFieldIndexers | FieldIndexer モジュールは、インデックス ドキュメント作成の一環として課題ドキュメントを強化します。プラグインはカスタム FieldIndexer モジュールを登録できます。これらのメトリックでは、FieldIndexer で費やされた時間の詳細が提供され、それらによって生じたインデックス パフォーマンスの低下を追跡するのに使用できます。このメトリックは、作成された課題ドキュメントごとに組み合わされたすべての FieldIndexer で費やされた時間について示しています。 |
indexing/LuceneAddDocument | Lucene インデックスへのドキュメントの追加に費やされた時間 |
indexing/LuceneDeleteDocument | Lucene インデックスから語句が一致する 1 つ以上のドキュメントを削除するのに費やされた時間 |
indexing/LuceneOptimize | Lucene インデックスの最適化に関するメトリック (Jira から手動でトリガーされます) |
indeding/LuceneUpdateDocument | Lucene インデックスへの作成済みドキュメントの追加に費やされた時間 |
indexing/ReplicationLatency | レプリケーション遅延は、変更が行われたノードで課題、コメント、または作業ログのインデックス作成が行われてから現在のノードでインデックス作成操作が再生されるまでの時間です。 |
indexing/WaitForLucene | ドキュメントは Lucene インデックスに非同期で書き込まれます。このメトリックでは、Lucene が書き込みを完了するまで Jira のインデックス作成スレッドが待機した時間をキャプチャします。 |
indexing/issueAddSearchExtractors | EntitySearchExtractor は、インデックス ドキュメント作成の一環として課題ドキュメントを強化するものです。プラグインを使用してカスタム EntitySearchExtractor モジュールを登録できます。これらのメトリックを利用すると、EntitySearchExtractor で費やされた時間に関するインサイトを得て、それらによって生じたインデックス パフォーマンスの低下を追跡できます。これらのメトリックは、作成された課題ドキュメントごとに組み合わされたすべての EntitySearchExtractor で費やされた時間について示しています。 |
課題 | 課題操作に関するメトリック |
issue/Create | 作成されている課題 |
issue/Delete | 削除されている課題 |
issue/Index | Lucene インデックスに追加されている課題。これは、課題ドキュメントの作成およびインデックスへのドキュメントの追加を対象としています。 |
issue/DeIndex | Lucene インデックスから削除されている課題 |
issue/ReIndex | 課題更新の結果としてインデックスが再作成されている課題。これは、課題ドキュメントの作成、インデックスからの古いドキュメントの削除、およびインデックスへの新しいドキュメントの追加を対象としています。 |
issue/Update | 更新されている課題 |
Jira Service Management でアセットによって収集されるメトリック
次の表は、Jira Service Management でアセットによって収集されるメトリック (MBean) のリストです。
メトリック | 説明 |
---|---|
assets.objectindeximpl.objects_load_on_add_ms | メッセージを受信してからオブジェクトを読み込むまでの時間。 このメトリックは、データベースからインデックスを取り込むのにかかった時間を示します。 |
assets.objectindeximpl.missing_objects_reload_retry_count_on_add | オブジェクトをデータベースに追加するときにオブジェクトを再読み込みしようとした回数。 このメトリックは、データベースへの書き込みが遅れたためにデータベースからオブジェクトを読み込むのに何回試行したかを示します。 |
assets.objectindeximpl.missing_objects_count_on_add | データベースへの初回追加試行時に欠落していたオブジェクトの数。 このメトリックは、欠落していたオブジェクトの数を示します。 |
assets.objectindeximpl.missing_objects_reload_on_add_ms | オブジェクトが使用できなかったときにデータベースからの再読み込み試行に費やされた時間 (ミリ秒単位)。 このメトリックは、データベースでオブジェクトが使用可能になるまでのループと待機に費やされた時間を示します。 |
assets.objectindeximpl.objects_load_on_update_ms | 初回試行時に更新を読み込むまでの時間 (ミリ秒単位)。
|
assets.objectindeximpl.missing_objects_reload_on_update_ms | 更新がデータベースに反映されるまでの待機に費やされた時間 (ミリ秒単位)。
|
assets.objectindeximpl.missing_objects_reload_retry_count_on_update | 更新時に正しいバージョンが見つかるまでにオブジェクトを再読み込みしようとした回数。 |
assets.objectindeximpl.missing_objects_reload_retry_count_on_update | 更新が開始された時点でデータベースに存在せず、欠落していたオブジェクト更新の数。 |
assets.objectindeximpl.objects_removal_ms | アセットからオブジェクトを削除するのにかかった時間 (ミリ秒単位)。
|
assets.assetsbatchreplicationmessageworkqueuepoller.process_ms | レプリケーション メッセージを処理する時間 (ミリ秒単位)。 |
assets.assetsbatchreplicationmessageworkqueuepoller.number_of_create_failures | オブジェクトが作成されたときのメッセージ バッチのエラー数。 |
assets.assetsbatchreplicationmessageworkqueuepoller.number_of_update_failures | オブジェクトが更新されたときのメッセージ バッチのエラー数。 |
assets.cachemessageworkqueuepoller.process_batch_size | バッチ処理されてクラスタ全体に送信されたオブジェクト変更の数。 |
assets.cachemessageworkqueuepoller.wait_for_clearance_ms | データベースの更新がアプリから取り出されるか、データベースに送信されるまでの待機に費やされた時間 (ミリ秒単位)。 |
assets.cachemessageworkqueuepoller.process_ms | レプリケーション メッセージのバッチ処理と送信の合計所要時間 (ミリ秒単位)。 |
assets.assetsbatchreplicationmessagereceiver.work_queue_size | レプリケーション メッセージ レシーバーの作業キューのサイズ。 |
assets.assetsbatchreplicationmessagereceiver.work_queue_gauge | レプリケーション メッセージ レシーバーの作業キューの現在のサイズ。 |
assets.assetsobjectreplicationbatchmanager.work_queue_size | 個々の変更をバッチに収集してクラスタ全体に送信するためにバッチ マネージャーで使用される作業キューのサイズ。 |
assets.assetsobjectreplicationbatchmanager.work_queue_gauge | 個々の変更をバッチに収集してクラスタ全体に送信するためにバッチ マネージャーで使用される作業キューの現在のサイズ。 |
assets.defaultassetsbatchmessagesender.send_message | メッセージをディスパッチしてから次のメッセージの処理に進むまでの時間。 |
assets.insightcachereplicatorimpl.legacy_object_receiver_queue_size | クラスタ メッセージを使用するレガシー レプリケーション メカニズムのキュー サイズ。 |
assets.insightcachereplicatorimpl.object_replication_dispatch |
|
assets.insightcachereplicatorimpl.legacy_object_send_queue_size | クラスタ メッセージ キャッシュを使用してレガシー インデックス レプリケーションを行うためにメッセージを提供した後のキュー サイズ。
|
assets.assetsreplicationretryqueuepoller.retry_queue_size | 再試行 / エラー キューのサイズ。 |
assets.assetsreplicationretryqueuepoller.create_retry_attempts | メッセージ作成の処理が成功するまでの試行回数。 |
assets.assetsreplicationretryqueuepoller.update_retry_attempts | メッセージ更新の処理が成功するまでの試行回数。 |
assets.assetsreplicationretryqueuepoller.replay_wait_time | 更新を再試行する前に追加された待機時間の長さ。 このメトリックは、処理がキューに追いついているのか、それとも更新が滞っていて即座に処理されているのかを確認するのに役立ちます。待機時間が適用されない場合、キューは十分な速さで処理されません。 |
assets.assetsreplicationretryqueuepoller.dead_letter_queue_size | デッド レター キューにあるアイテムの数。 |
assets.assetsreplicationretryqueuepoller.process_retry_excluding_wait_ms | エラーの処理にかかった時間 (ミリ秒単位) (処理前の待機時間を除く)。 このメトリックは、一連のエラーが処理されるまでにどれくらいの時間がかかっているかを示します。また、 |
assets.assetsreplicationretryqueuepoller.dead_letter_queue_gauge | デッド レター キューにある現在のメッセージ数。 |
assets.assetsreplicationretryqueuepoller.retry_queue_gauge | 再試行キューにある現在のメッセージ数。 |
Jira の監視
Jira を監視する前に、JMX の監視を有効にしてから、JMX クライアントを使用してメトリックを表示する必要があります。
考慮事項
メトリックの閲覧は常に、Jira にパフォーマンス上の影響を与えます。更新は 1 秒に 1 回未満にすることをお勧めします。
Jira で JMX 監視を有効化する
既定ではすべてのメトリックが収集されますが、それらを公開するには JMX 監視を有効にする必要があります。これは Jira で実行できますが、Jira 管理者である必要があります。
- 上部のナビゲーション バーから [管理者 ] > [システム] を選択します。
- JMX モニタリングに移動します。
- JMX 監視の有効化を切り替えます。
JConsole を使って監視する
JMX 監視を有効にした後、任意の JMX クライアントを使用してメトリックを表示できます。これをすばやく簡単に行うために、ここでは、JConsole を使用して表示する方法について説明しています。Jira インスタンスはローカルでもリモートでも監視できます。
特定の課題のトラブルシューティングを行う場合、または Jira を短期間のみ監視する必要がある場合は、Jira のローカル監視が便利です。ローカル監視はサーバーのパフォーマンスに影響を与える可能性があるため、本番システムの長期的な監視にはお勧めしません。
Jira のリモート監視は、Jira でリソースを消費しないため、本番環境システムにお勧めです。
既知のセキュリティ問題
RCE (リモート コード実行) JMX 攻撃によって引き起こされる可能性のある潜在的なセキュリティの脆弱性に対する堅牢な修正を提供しています。この攻撃の最中でも、JMX モニタリング用の有効な認証情報を持つリモート ユーザーは、たとえそのユーザーのアカウントが readOnly
(montiorRole
) であっても、Java 逆シリアル化によって Jira Data Center で任意のコードを実行できます。
捏造されたデータがリクエストによってシステムに侵入するのを防ぐために、 JVM の ObjectInputFilter
に基づくブロックリスト逆シリアル化フィルターを使用しています。
カスタム JDK を使用していて、Java バージョンに基づくクラスパスに適切なクラスがない場合、Jira ノードは起動しません。
atlassian.jira.log
には、「BlocklistDeserializationFilter has not been set up
」というエラーが記録されます。これは、使用している Java 環境にセキュリティ上の問題があることを意味します。
エラーを排除して Jira インスタンスのセキュリティを強化するには、JDK に次のクラスが含まれていることを確認してください。
JDK 8 の場合: クラスパスで
sun.misc.ObjectInputFilter
クラスが有効になっている必要があります。JDK 11 以降の場合: クラスパスで
java.io.ObjectInputFilter
クラスが有効になっている必要があります。
JMX から利用できる製品内診断
Jira 9.3 以降では、製品内診断用の一連のデータベース接続メトリックを JMX から利用できるようになりました。
製品内診断 (IPD) では、実行中のインスタンスの動作についてより深いインサイトが得られます。
IPD には、Jira とそのデータベースの間の相互作用を対象とした追加のメトリックが用意されています。データベース接続メトリックを使用すると、環境やインフラストラクチャでパフォーマンスの問題を発生させる可能性のある要素を効率的に特定できます。
既定では、この機能は無効になっています。実際のメトリックは次の形式で利用できます。
- 新しい JMX MBeans として
- 新しい IPD ログ ファイル (
atlassian-jira-ipd-monitoring.log
) 内の JMX 値のスナップショットの履歴として
このログ ファイルは、すべての既存のログ ファイルが格納されている {jira_home}\log
フォルダにあります。このログ ファイルは、ATST プラグインで作成されるサポート ZIP ファイルにも含まれています。必要に応じて、Atlassian troubleshooting & support tools プラグインでサポート ZIP ファイルを生成し、ファイルをアトラシアン サポートに送信できます (アトラシアン社内にはファイル解釈用のツールがあります)。プラグインの詳細をご確認ください。
コミュニケーション
この機能では通信に次の方法が使用されます。
- JMX: JMX MBean は内部スケジュールに基づいて定期的に更新されます。
- ログ ファイル
atlassian-jira-ipd-monitoring.log
: JMX 値は、設定可能なスケジュールでスナップショットが作成され、ログ ファイルに記録されます。既定では、60 秒ごとに JMX 値がポーリングされ、ログ ファイルに書き込まれます (このパラメータは Jira 9.3 EAP 02 以降に更新されています)。
製品内診断メトリック
次のセクションを展開して、製品内診断で利用できるメトリックの詳細を学習してください。
メトリックを使用するには、必ず JMX を有効にしてください。
製品間指標の詳細は「製品内診断のために製品間指標を解釈する」という記事をご参照ください。
Jira 固有の指標に関する、より詳細な定義を確認するには、「製品内診断のために Jira 固有の指標を解釈する」という記事をご参照ください。
製品内診断モニタリングを有効にする
IPD モニタリングは初期設定で有効になっています。管理する方法は次のとおりです。
- 上部のナビゲーション バーから [管理者 ] > [システム] を選択します。
左側のパネルで、[システム サポート] に移動し、[モニタリング] を選択します。
[製品内診断モニタリング] トグルを使用して、IPD モニタリングを有効または無効にします。
このトグルはバージョン 9.4.3 でも利用できます。アップデートについては、Jira Software のリリース ノートを参照してください。
REST API
Jira 9.5 では、IPD モニタリングを管理するための新しい REST API エンドポイント、具体的にはユーザー インターフェイスの製品内診断モニタリング トグル (/rest/api/2/monitoring/ipd
) が導入されています。
ログ形式
atlassian-jira-ipd-monitoring.log
への書き込みは log4j を使用して行われます。その設定は log4j.properties
で管理します。
#####################################################
# In-product diagnostics monitoring logging
#####################################################
log4j.appender.ipd=com.atlassian.jira.logging.JiraHomeAppender
log4j.appender.ipd.File=atlassian-jira-ipd-monitoring.log
log4j.appender.ipd.MaxFileSize=20480KB
log4j.appender.ipd.MaxBackupIndex=5
log4j.appender.ipd.layout=com.atlassian.logging.log4j.NewLineIndentingFilteringPatternLayout
log4j.appender.ipd.layout.ConversionPattern=%d %m%n
log4j.logger.ipd-monitoring = INFO, filelog
log4j.additivity.ipd-monitoring = false
log4j.logger.ipd-monitoring-data-logger = INFO, ipd
log4j.additivity.ipd-monitoring-data-logger = false
ログの内容
既定では、各ログ エントリには簡潔データ セットが含まれています。拡張データ セットをログに記録するには、com.atlassian.jira.in.product.diagnostics.extended.logging
機能フラグを有効にします。
拡張データを有効にするには、次の手順に従います。
<JIRA_URL>/secure/admin/SiteDarkFeatures!default.jspa
に移動します。ここで、<JIRA_URL>
は Jira インスタンスのベース URL です。- [有効にする開発中機能] テキスト領域で
com.atlassian.jira.in.product.diagnostics.extended.logging.enabled
と入力します。[追加] を選択します。ダーク機能を管理する方法をご確認ください。- 拡張データを無効にするには、[開発中機能 (サイト経由)] パネルで
com.atlassian.jira.in.product.diagnostics.extended.logging.enabled
を探して [無効化] を選択します。
- 拡張データを無効にするには、[開発中機能 (サイト経由)] パネルで
次の各表で、簡潔ログ形式と拡張ログ形式の構造の違いを参照してください。
JMX のメトリックは常に拡張形式です。
簡潔データ
MBean タイプ | Properties | 属性 |
---|---|---|
カウンター | timestamp ラベル 属性 |
|
値 |
| |
統計 |
|
拡張データ
JMX のメトリックは常に拡張形式です。
MBean タイプ | Properties | 属性 |
---|---|---|
カウンター | timestamp ラベル 属性 オブジェクト名 |
|
値 |
| |
統計 |
|
指標属性の定義
指標属性の詳細は、次のセクションを展開してご確認ください。
プロパティを処理する
JMX ログ記録のポーリング間隔は 60 秒に設定されており、変更できません。
ログ ファイルのポーリング間隔は 60 秒に設定されており、システム プロパティ
jira.diagnostics.ipdlog.poll.seconds
を使用して変更できます。既定では、JMX 値はポーリングされて
atlassian-jira-ipd-monitoring.log
に書き込まれます。