2.2. 部署 Camel Spring Boot 应用程序
为项目启用监控后,您可以部署并监控 Camel Spring Boot 应用程序。本节使用 Camel Spring Boot 示例中列出的 monitoring-micrometrics-grafana-prometheus
示例。
流程
将 openshift-maven-plugin 添加到
monitoring-micrometrics-grafana-prometheus
示例中的pom.xml
文件中。在pom.xml
中,添加一个 openshift 配置集,以允许通过 openshift-maven-plugin 部署到 openshift。<profiles> <profile> <id>openshift</id> <build> <plugins> <plugin> <groupId>org.eclipse.jkube</groupId> <artifactId>openshift-maven-plugin</artifactId> <version>1.13.1</version> <executions> <execution> <goals> <goal>resource</goal> <goal>build</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>
添加 Prometheus 支持。要将 Prometheus 支持添加到 Camel Spring Boot 应用程序,请在 actuator 端点上公开 Prometheus 统计。
编辑
src/main/resources/application.properties
文件。如果您有management.endpoints.web.exposure.include
条目,请添加 prometheus、metrics 和 health。如果您没有management.endpoints.web.exposure.include
条目,请添加一个。# expose actuator endpoint via HTTP management.endpoints.web.exposure.include=mappings,metrics,health,shutdown,jolokia,prometheus
将以下内容添加到 pom.xml 的
<dependencies
/> 部分,为您的应用程序添加一些入门支持。<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId> <version>${jolokia-version}</version> </dependency> <dependency> <groupId>io.prometheus.jmx</groupId> <artifactId>collector</artifactId> <version>${prometheus-version}</version> </dependency>
将以下内容添加到 Camel Spring Boot 应用程序的
Application.java
中。import org.springframework.context.annonation.Bean; import org.apache.camel.component.micrometer.MicrometerConstants; import org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier; import org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifier; import org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryFactory; import org.apache.camel.component.micrometer.routepolicy.MicrometerRoutePolicyFactory;
更新的
Application.java
如下所示。@SpringBootApplication public class SampleCamelApplication { @Bean(name = {MicrometerConstants.METRICS_REGISTRY_NAME, "prometheusMeterRegistry"}) public PrometheusMeterRegistry prometheusMeterRegistry( PrometheusConfig prometheusConfig, CollectorRegistry collectorRegistry, Clock clock) throws MalformedObjectNameException, IOException { InputStream resource = new ClassPathResource("config/prometheus_exporter_config.yml").getInputStream(); new JmxCollector(resource).register(collectorRegistry); new BuildInfoCollector().register(collectorRegistry); return new PrometheusMeterRegistry(prometheusConfig, collectorRegistry, clock); } @Bean public CamelContextConfiguration camelContextConfiguration(@Autowired PrometheusMeterRegistry registry) { return new CamelContextConfiguration() { @Override public void beforeApplicationStart(CamelContext camelContext) { MicrometerRoutePolicyFactory micrometerRoutePolicyFactory = new MicrometerRoutePolicyFactory(); micrometerRoutePolicyFactory.setMeterRegistry(registry); camelContext.addRoutePolicyFactory(micrometerRoutePolicyFactory); MicrometerMessageHistoryFactory micrometerMessageHistoryFactory = new MicrometerMessageHistoryFactory(); micrometerMessageHistoryFactory.setMeterRegistry(registry); camelContext.setMessageHistoryFactory(micrometerMessageHistoryFactory); MicrometerExchangeEventNotifier micrometerExchangeEventNotifier = new MicrometerExchangeEventNotifier(); micrometerExchangeEventNotifier.setMeterRegistry(registry); camelContext.getManagementStrategy().addEventNotifier(micrometerExchangeEventNotifier); MicrometerRouteEventNotifier micrometerRouteEventNotifier = new MicrometerRouteEventNotifier(); micrometerRouteEventNotifier.setMeterRegistry(registry); camelContext.getManagementStrategy().addEventNotifier(micrometerRouteEventNotifier); } @Override public void afterApplicationStart(CamelContext camelContext) { } }; }
将应用部署到 OpenShift。
mvn -Popenshift oc:deploy
验证您的应用程序是否已部署。
oc get pods -n myapp NAME READY STATUS RESTARTS AGE camel-example-spring-boot-xml-2-deploy 0/1 Completed 0 13m camel-example-spring-boot-xml-2-x78rk 1/1 Running 0 13m camel-example-spring-boot-xml-s2i-2-build 0/1 Completed 0 14m
添加此应用程序的 Service Monitor,以便 Openshift 的 prometheus 实例可以从 / actuator/prometheus 端点开始提取。
为 Service monitor 创建以下 YAML 清单。在本例中,该文件被命名为
servicemonitor.yaml
。apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: csb-demo-monitor name: csb-demo-monitor spec: endpoints: - interval: 30s port: http scheme: http path: /actuator/prometheus selector: matchLabels: app: camel-example-spring-boot-xml
为此应用程序添加 Service Monitor。
oc apply -f servicemonitor.yml servicemonitor.monitoring.coreos.com/csb-demo-monitor "myapp" created
验证服务监控器是否已成功部署。
oc get servicemonitor NAME AGE csb-demo-monitor 9m17s
-
验证您可以在提取目标列表中看到服务监控器。在 Administrator 视图中,进入到 Observe
Targets。您可以在提取目标列表中找到 csb-demo-monitor
。 -
在部署 servicemonitor 后等待大约十分钟。然后进入到 Developer 视图中的 Observe
Metrics。在下拉菜单中选择 Custom query 并键入 camel
来查看通过 /actuator/prometheus 端点公开的 Camel 指标。
红帽不支持在非 OCP 环境中安装和配置 Prometheus 和 Grafana。