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 分です。