7.6. ソルバーの監視
OptaPlanner は、Java アプリケーション用のメトリック計測ライブラリーである Micrometer を介してメトリックを公開します。一般的な監視システムで Micrometer を使用して、OptaPlanner ソルバーを監視できます。
7.6.1. Micrometer 用の Quarkus OptaPlanner アプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
OptaPlanner Quarkus アプリケーションを Micrometer および指定された監視システムを使用するように設定するには、Micrometer 依存関係を pom.xml ファイルに追加します。
前提条件
- Quarkus OptaPlanner アプリケーションがあります。
手順
次の依存関係をアプリケーションの
pom.xmlファイルに追加します。ここで<MONITORING_SYSTEM>は Micrometer と Quarkus でサポートされている監視システムです。注記Prometheus は現在、Quarkus でサポートされている唯一の監視システムです。
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-micrometer-registry-<MONITORING_SYSTEM></artifactId> </dependency>
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-micrometer-registry-<MONITORING_SYSTEM></artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションを開発モードで実行するには、次のコマンドを入力します。
mvn compile quarkus:dev
mvn compile quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションのメトリックを表示するには、ブラウザーに次の URL を入力します。
http://localhost:8080/q/metrics
http://localhost:8080/q/metricsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6.2. Micrometer 用の Spring Boot OptaPlanner アプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
Micrometer と指定された監視システムを使用するように Spring Boot OptaPlanner アプリケーションを設定するには、Pom.xml ファイルに Micrometer 依存関係を追加します。
前提条件
- Spring Boot OptaPlanner アプリケーションがあります。
手順
次の依存関係をアプリケーションの
pom.xmlファイルに追加します。ここで<MONITORING_SYSTEM>は Micrometer と Spring Boot でサポートされている監視システムです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
アプリケーションの
application.propertiesファイルに設定情報を追加します。詳細は、Micrometer Web サイトを参照してください。 アプリケーションを実行するには、以下のコマンドを入力します。
mvn spring-boot:run
mvn spring-boot:runCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションのメトリックを表示するには、ブラウザーに次の URL を入力します。
http://localhost:8080/actuator/metrics
注記次の URL を Prometheus スクレイパーパスとして使用します:
http://localhost:8080/actuator/prometheus
7.6.3. Micrometer 用のプレーンな Java OptaPlanner アプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
Micrometer を使用するようにプレーンな Java OptaPlanner アプリケーションを設定するには、Micrometer の依存関係と、選択した監視システムの設定情報をプロジェクトの POM.XML ファイルに追加する必要があります。
前提条件
- プレーンな Java OptaPlanner アプリケーションがあります。
手順
次の依存関係をアプリケーションの
pom.xmlファイルに追加します。ここで、<MONITORING_SYSTEM>は Micrometer で設定された監視システムであり、<VERSION>は使用している Micrometer のバージョンです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
プロジェクトの
pom.xmlファイルの先頭に、監視システムの Micrometer 設定情報を追加します。詳細は、Micrometer Web サイトを参照してください。 設定情報の下に次の行を追加します。ここで、
<MONITORING_SYSTEM>は追加した監視システムです。Metrics.addRegistry(<MONITORING_SYSTEM>);
Metrics.addRegistry(<MONITORING_SYSTEM>);Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例は、Prometheus 監視システムを追加する方法を示しています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 監視システムを開いて、OptaPlanner プロジェクトのメトリックを表示します。次のメトリックが公開されます。
注記メトリックの名前と形式は、レジストリーによって異なります。
-
optaplanner.solver.errors.total: 測定開始以降に解決中に発生したエラーの総数。 -
optaplanner.solver.solve-length.active-count: 現在解いているソルバーの数。 -
optaplanner.solver.solve-length.seconds-max: 現在アクティブなソルバーの実行時間が最も長い実行時間。 -
optaplanner.solver.solve-length.seconds-duration-sum: アクティブな各ソルバーの解決時間の合計。たとえば、アクティブなソルバーが 2 つあり、一方が 3 分間実行され、もう一方が 1 分間実行されている場合、合計計算時間は 4 分です。
-
7.6.4. 追加メトリクス リンクのコピーリンクがクリップボードにコピーされました!
より詳細な監視を行うには、ソルバー設定で OptaPlanner を設定して、パフォーマンスコストで追加のメトリックを監視できます。次の例では、BEST_SCORE および SCORE_CALCULATION_COUNT メトリクスを使用しています。
この設定では、次のメトリックを有効にできます。
-
SOLVE_DURATION(デフォルトで有効、マイクロメータメーター ID:optaplanner.solver.solve.duration): 最長のアクティブソルバーの解決時間、アクティブソルバーの数、アクティブなすべてのソルバーの累積時間を測定します。 -
ERROR_COUNT(デフォルトで有効、マイクロメーターメーター ID:optaplanner.solver.errors): 解決中に発生したエラーの数を測定します。 -
SCORE_CALCULATION_COUNT(デフォルトで有効、マイクロメーターメーター ID:optaplanner.solver.score.calculation.count): OptaPlanner が実行したスコア計算の数を測定します。 -
BEST_SCORE(マイクロメーターメーター ID:optaplanner.solver.best.score.*): OptaPlanner がこれまでに見つけた最適解のスコアを測定します。スコアのレベルごとに個別のメーターがあります。たとえば、HardSoftScoreの場合、optaplanner.solver.best.score.hard.scoreおよびoptaplanner.solver.best.score.soft.scoreメーターがあります。 -
STEP_SCORE(マイクロメーターメーター ID:optaplanner.solver.step.score.*): OptaPlanner が実行する各ステップのスコアを測定します。スコアのレベルごとに個別のメーターがあります。たとえば、HardSoftScoreの場合、optaplanner.solver.step.score.hard.scoreおよびoptaplanner.solver.step.score.soft.scoreメーターがあります。 -
BEST_SOLUTION_MUTATION(マイクロメーターメーター ID:optaplanner.solver.best.solution.mutation): 連続する最適解の間で変更された計画変数の数を測定します。 -
MOVE_COUNT_PER_STEP(マイクロメータメーター ID:optaplanner.solver.step.move.count): ステップで評価された移動の数を測定します。 -
MEMORY_USE(マイクロメーターメーター ID:jvm.memory.used): JVM 全体で使用されるメモリーの量を測定します。このメトリクスは、ソルバーが使用するメモリーの量を測定するものではありません。同じ JVM 上の 2 つのソルバーは、このメトリックに対して同じ値を報告します。 -
CONSTRAINT_MATCH_TOTAL_BEST_SCORE(マイクロメーターメーター ID:optaplanner.solver.constraint.match.best.score.*): OptaPlanner がこれまでに見つけた最適解に対する各制約のスコアの影響を測定します。スコアのレベルごとに個別のメーターがあり、各制約のタグが付いています。たとえば、パッケージ com.example の制約 Minimize Cost のHardSoftScoreには、optaplanner.solver.constraint.match.best.score.hard.scoreとoptaplanner.solver.constraint.match.best.score.soft.scoreがあります。これらは、タグ "constraint.package=com.example" と "constraint.name=Minimize Cost" を持ちます。 -
CONSTRAINT_MATCH_TOTAL_STEP_SCORE(マイクロメーターメーター ID:optaplanner.solver.constraint.match.step.score.*): 現在のステップに対する各制約のスコアの影響を測定します。スコアのレベルごとに個別のメーターがあり、各制約のタグが付いています。たとえば、パッケージ com.example の制約 Minimize Cost のHardSoftScoreには、optaplanner.solver.constraint.match.step.score.hard.scoreとoptaplanner.solver.constraint.match.step.score.soft.scoreがあります。これらには、タグ "constraint.package=com.example" と "constraint.name=Minimize Cost" があります。 -
PICKED_MOVE_TYPE_BEST_SCORE_DIFF(マイクロメーターメーター ID:optaplanner.solver.move.type.best.score.diff.*): 特定の移動タイプが最適解をどの程度改善するかを測定します。スコアのレベルごとに個別のメーターがあり、移動タイプのタグが付いています。たとえば、プロセスのコンピューターのHardSoftScoreとChangeMoveには、optaplanner.solver.move.type.best.score.diff.hard.scoreとoptaplanner.solver.move.type.best.score.diff.soft.scoreメーターがあります。これには、move.type=ChangeMove(Process.computer)タグがあります。 -
PICKED_MOVE_TYPE_STEP_SCORE_DIFF(マイクロメーターメーター ID:optaplanner.solver.move.type.step.score.diff.*): 特定の移動タイプが最適解をどの程度改善するかを測定します。スコアのレベルごとに個別のメーターがあり、移動タイプのタグが付いています。たとえば、プロセスのコンピューターのHardSoftScoreとChangeMoveには、optaplanner.solver.move.type.step.score.diff.hard.scoreとoptaplanner.solver.move.type.step.score.diff.soft.scoreメーターがあります。これには、タグmove.type=ChangeMove(Process.computer)が含まれます。