8.6. ソルバーの監視


OptaPlanner は、Java アプリケーション用のメトリック計測ライブラリーである Micrometer を介してメトリックを公開します。一般的な監視システムで Micrometer を使用して、OptaPlanner ソルバーを監視できます。

8.6.1. Micrometer 用の Quarkus OptaPlanner アプリケーションの設定

OptaPlanner Quarkus アプリケーションを Micrometer および指定された監視システムを使用するように設定するには、Micrometer 依存関係を pom.xml ファイルに追加します。

前提条件

  • Quarkus OptaPlanner アプリケーションがあります。

手順

  1. 次の依存関係をアプリケーションの pom.xml ファイルに追加します。ここで <MONITORING_SYSTEM> は Micrometer と Quarkus でサポートされている監視システムです。

    注記

    Prometheus は現在、Quarkus でサポートされている唯一の監視システムです。

    <dependency>
     <groupId>io.quarkus</groupId>
     <artifactId>quarkus-micrometer-registry-<MONITORING_SYSTEM></artifactId>
    </dependency>
  2. アプリケーションを開発モードで実行するには、次のコマンドを入力します。

    mvn compile quarkus:dev
  3. アプリケーションのメトリックを表示するには、ブラウザーに次の URL を入力します。

    http://localhost:8080/q/metrics

8.6.2. Micrometer 用の Spring Boot OptaPlanner アプリケーションの設定

Micrometer と指定された監視システムを使用するように Spring Boot OptaPlanner アプリケーションを設定するには、pom.xml ファイルに Micrometer 依存関係を追加します。

前提条件

  • Spring Boot OptaPlanner アプリケーションがあります。

手順

  1. 次の依存関係をアプリケーションの pom.xml ファイルに追加します。ここで <MONITORING_SYSTEM> は Micrometer と Spring Boot でサポートされている監視システムです。

    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
     <groupId>io.micrometer</groupId>
     <artifactId>micrometer-registry-<MONITORING_SYSTEM></artifactId>
    </dependency>
  2. アプリケーションの application.properties ファイルに設定情報を追加します。詳細は、Micrometer Web サイトを参照してください。
  3. アプリケーションを実行するには、以下のコマンドを入力します。

    mvn spring-boot:run
  4. アプリケーションのメトリックを表示するには、ブラウザーに次の URL を入力します。

    http://localhost:8080/actuator/metrics

    注記

    次の URL を Prometheus スクレイパーパスとして使用します: http://localhost:8080/actuator/prometheus

8.6.3. Micrometer 用のプレーンな Java OptaPlanner アプリケーションの設定

Micrometer を使用するようにプレーンな Java OptaPlanner アプリケーションを設定するには、Micrometer の依存関係と、選択した監視システムの設定情報をプロジェクトの POM.XML ファイルに追加する必要があります。

前提条件

  • プレーンな Java OptaPlanner アプリケーションがあります。

手順

  1. 次の依存関係をアプリケーションの pom.xml ファイルに追加します。ここで、<MONITORING_SYSTEM> は Micrometer で設定された監視システムであり、<VERSION> は使用している Micrometer のバージョンです。

    <dependency>
     <groupId>io.micrometer</groupId>
     <artifactId>micrometer-registry-<MONITORING_SYSTEM></artifactId>
     <version><VERSION></version>
    </dependency>
    <dependency>
     <groupId>io.micrometer</groupId>
     <artifactId>micrometer-core</artifactId>
     <version>`<VERSION>`</version>
    </dependency>
  2. プロジェクトの pom.xml ファイルの先頭に、監視システムの Micrometer 設定情報を追加します。詳細は、Micrometer Web サイトを参照してください。
  3. 設定情報の下に次の行を追加します。ここで、<MONITORING_SYSTEM> は追加した監視システムです。

    Metrics.addRegistry(<MONITORING_SYSTEM>);

    次の例は、Prometheus 監視システムを追加する方法を示しています。

    PrometheusMeterRegistry prometheusRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
    try {
        HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
        server.createContext("/prometheus", httpExchange -> {
            String response = prometheusRegistry.scrape();
            httpExchange.sendResponseHeaders(200, response.getBytes().length);
            try (OutputStream os = httpExchange.getResponseBody()) {
                os.write(response.getBytes());
            }
        });
        new Thread(server::start).start();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    Metrics.addRegistry(prometheusRegistry);
  4. 監視システムを開いて、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 分です。

8.6.4. 追加メトリクス

より詳細な監視を行うには、ソルバー設定で OptaPlanner を設定して、パフォーマンスコストで追加のメトリックを監視できます。次の例では、BEST_SCORE および SCORE_CALCULATION_COUNT メトリクスを使用しています。

<solver xmlns="https://www.optaplanner.org/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://www.optaplanner.org/xsd/solver https://www.optaplanner.org/xsd/solver/solver.xsd">
  <monitoring>
    <metric>BEST_SCORE</metric>
    <metric>SCORE_CALCULATION_COUNT</metric>
    ...
  </monitoring>
  ...
</solver>

この設定では、次のメトリックを有効にできます。

  • 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.scoreoptaplanner.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.scoreoptaplanner.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.*): 特定の移動タイプが最適解をどの程度改善するかを測定します。スコアのレベルごとに個別のメーターがあり、移動タイプのタグが付いています。たとえば、プロセスのコンピューターの HardSoftScoreChangeMove には、optaplanner.solver.move.type.best.score.diff.hard.scoreoptaplanner.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.*): 特定の移動タイプが最適解をどの程度改善するかを測定します。スコアのレベルごとに個別のメーターがあり、移動タイプのタグが付いています。たとえば、プロセスのコンピューターの HardSoftScoreChangeMove には、optaplanner.solver.move.type.step.score.diff.hard.scoreoptaplanner.solver.move.type.step.score.diff.soft.scoreメーターがあります。これには、タグ move.type=ChangeMove(Process.computer) が含まれます。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.