8.6. 监控解决器
OptaPlanner 通过 Micrometer 公开指标数据,这是 Java 应用程序的指标检测库。您可以将 Micrometer 与流行监控系统一起使用来监控 OptaPlanner solver。
8.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>要在 development 模式下运行应用程序,请输入以下命令:
mvn compile quarkus:dev要查看应用程序的指标,请在浏览器中输入以下 URL:
http://localhost:8080/q/metrics
8.6.2. 为 Micrometer 配置 Spring Boot OptaPlanner 应用程序 复制链接链接已复制到粘贴板!
要将 Spring Boot OptaPlanner 应用程序配置为使用 Micrometer 和指定的监控系统,请将 Micrometer 依赖项添加到 pom.xml 文件中。
先决条件
- 您有一个 Spring Boot OptaPlanner 应用程序。
流程
将以下依赖项添加到应用程序的
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>-
在应用程序的
application.properties文件中添加配置信息。如需更多信息,请参阅 Micrometer 网站。 运行以下命令,请运行以下命令:
mvn spring-boot:run要查看应用程序的指标,请在浏览器中输入以下 URL:
http://localhost:8080/actuator/metrics
注意使用以下 URL 作为 Prometheus scraper 路径:
http://localhost:8080/actuator/prometheus
8.6.3. 为 Micrometer 配置一个普通 Java OptaPlanner 应用程序 复制链接链接已复制到粘贴板!
要将普通 Java OptaPlanner 应用程序配置为使用 Micrometer,您必须将您选择的监控系统的 Micrometer 依赖项和配置信息添加到项目的 POM.XML 文件中。
先决条件
- 您有一个普通 Java OptaPlanner 应用程序。
流程
将以下依赖项添加到应用程序的
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>-
将监控系统的 Micrometer 配置信息添加到项目
pom.xml文件的开头。如需更多信息,请参阅 Micrometer 网站。 在配置信息下方添加以下行,其中 <
;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);打开监控系统,查看您的 OptaPlanner 项目的指标。公开以下指标:
注意指标的名称和格式因 registry 而异。
-
OptaPlanner.solver.errors:从测量开始解决过程中发生的错误总数。 -
OptaPlanner.solver.solve-length.active-count:当前解决的解决方法数量。 -
OptaPlanner.solver.solve-length.seconds-max: run time of longest-running currently active solver. -
OptaPlanner.solver.solve-length.seconds-sum:每个活跃解决问题持续时间的总和。例如,如果存在两个活跃的 solvers,一个只运行三分钟,另一个为一分钟,总计解决时间为 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(默认是 Micrometer 计量 ID:optaplanner.solver.solve.duration):衡量解决最长活动解决时间、活动解决者数量以及所有活跃解决者的累计持续时间。 -
ERROR_COUNT(默认为启用 Micrometer 量表 ID:optaplanner.solver.errors):衡量在解决问题时发生的错误数量。 -
SCORE_CALCULATION_COUNT(默认为 Micrometer 量表 ID:optaplanner.solver.score.calculation.count):测量执行 OptaPlanner 的分数计算次数。 -
BEST_SCORE(Micrometer 计量 ID:optaplanner.solver.best.score.*):衡量 OptaPlanner 最佳解决方案的性能。分数的每个级别都有单独的计量。例如,对于HardSoftScore,有optaplanner.solver.best.score.score 和 optaplanner.best.score量表。 -
STEP_SCORE(Micrometer 计量 ID:optaplanner.solver.step.score.*):衡量 OptaPlanner 采用每个步骤的分数。分数的每个级别都有单独的计量。例如,对于HardSoftScore,有optaplanner.solver.step.score和optaplanner.solver.step.score.soft.score计量。 -
BEST_SOLUTION_MUTATION(Micrometer meter ID:optaplanner.solver.butation):测量连续最佳解决方案之间更改的规划变量数量。 -
MOVE_COUNT_PER_STEP(Micrometer 计量 ID:optaplanner.solver.step.move.count):测量步骤中评估的移动数量。 -
MEMORY_USE(Micrometer 计量 ID:jvm.memory.used):测量 JVM 中使用的内存量。此指标不衡量被解析器使用的内存量;同一 JVM 上的两个解决者将报告此指标的相同值。 -
CONSTRAINT_MATCH_TOTAL_BEST_SCORE(Micrometer 量表 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(Micrometer 计量 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 带有标签 "constraint.com.example" 和 "constraint.name=Minimize Cost" 的 .score.soft.score 量表。 -
PICKED_MOVE_TYPE_BEST_SCORE_DIFF(Micrometer meter 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.scoremeters with tagmove.type=ChangeMveoProcess.compute. -
PICKED_MOVE_TYPE_STEP_SCORE_DIFF(Micrometer 计量 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.scoremeters with tagmove.type=Move(compute.compute.Process).