이 콘텐츠는 선택한 언어로 제공되지 않습니다.
Chapter 2. Monitoring Camel Spring Boot integrations
This chapter explains how to monitor integrations on Red Hat build of Camel Spring Boot at runtime. You can use the Prometheus Operator that is already deployed as part of OpenShift Monitoring to monitor your own applications.
2.1. Enabling user workload monitoring in OpenShift
You can enable the monitoring for user-defined projects by setting the enableUserWorkload: true
field in the cluster monitoring ConfigMap object.
In OpenShift Container Platform 4.13 you must remove any custom Prometheus instances before enabling monitoring for user-defined projects.
Prerequisites
You must have access to the cluster as a user with the cluster-admin cluster role access to enable monitoring for user-defined projects in OpenShift Container Platform. Cluster administrators can then optionally grant users permission to configure the components that are responsible for monitoring user-defined projects.
- You have cluster admin access to the OpenShift cluster.
- You have installed the OpenShift CLI (oc).
-
You have created the
cluster-monitoring-config
ConfigMap object. -
Optional: You have created and configured the
user-workload-monitoring-config
ConfigMap object in theopenshift-user-workload-monitoring
project. You can add configuration options to this ConfigMap object for the components that monitor user-defined projects.
Every time you save configuration changes to the user-workload-monitoring-config ConfigMap object, the pods in the openshift-user-workload-monitoring project are redeployed. It can sometimes take a while for these components to redeploy. You can create and configure the ConfigMap object before you first enable monitoring for user-defined projects, to prevent having to redeploy the pods often.
Procedure
Login to OpenShift with administrator permissions.
oc login --user system:admin --token=my-token --server=https://my-cluster.example.com:6443
Edit the
cluster-monitoring-config
ConfigMap object.$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
Add
enableUserWorkload: true
in the data/config.yaml section.apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: true
When it is set to true, the
enableUserWorkload
parameter enables monitoring for user-defined projects in a cluster.Save the file to apply the changes. The monitoring for the user-defined projects is then enabled automatically.
NoteWhen the changes are saved to the
cluster-monitoring-config
ConfigMap object, the pods and other resources in theopenshift-monitoring
project might be redeployed. The running monitoring processes in that project might also be restarted.Verify that the
prometheus-operator
,prometheus-user-workload
andthanos-ruler-user-workload
pods are running in theopenshift-user-workload-monitoring
project.$ oc -n openshift-user-workload-monitoring get pod Example output NAME READY STATUS RESTARTS AGE prometheus-operator-6f7b748d5b-t7nbg 2/2 Running 0 3h prometheus-user-workload-0 4/4 Running 1 3h prometheus-user-workload-1 4/4 Running 1 3h thanos-ruler-user-workload-0 3/3 Running 0 3h thanos-ruler-user-workload-1 3/3 Running 0 3h
2.2. Deploying a Camel Spring Boot application
After you enable the monitoring for your project, you can deploy and monitor the Camel Spring Boot application. This section uses the monitoring-micrometrics-grafana-prometheus
example listed in the Camel Spring Boot Examples.
Procedure
Add the openshift-maven-plugin to the
pom.xml
file of themonitoring-micrometrics-grafana-prometheus
example. In thepom.xml
, add an openshift profile to allow deployment to openshift through the openshift-maven-plugin.<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>
Add the Prometheus support. In order to add the Prometheus support to your Camel Spring Boot application, expose the Prometheus statistics on an actuator endpoint.
Edit your
src/main/resources/application.properties
file. If you have amanagement.endpoints.web.exposure.include
entry, add prometheus, metrics, and health. If you do not have amanagement.endpoints.web.exposure.include
entry, please add one.# expose actuator endpoint via HTTP management.endpoints.web.exposure.include=mappings,metrics,health,shutdown,jolokia,prometheus
Add the following to the
<dependencies/>
section of your pom.xml to add some starter support to your application.<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>
Add the following to the
Application.java
of your Camel Spring Boot application.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;
The updated
Application.java
is shown below.@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) { } }; }
Deploy the application to OpenShift.
mvn -Popenshift oc:deploy
Verify if your application is deployed.
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
Add the Service Monitor for this application so that Openshift’s prometheus instance can start scraping from the / actuator/prometheus endpoint.
Create the following YAML manifest for a Service monitor. In this example, the file is named as
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
Add a Service Monitor for this application.
oc apply -f servicemonitor.yml servicemonitor.monitoring.coreos.com/csb-demo-monitor "myapp" created
Verify that the service monitor was successfully deployed.
oc get servicemonitor NAME AGE csb-demo-monitor 9m17s
-
Verify that you can see the service monitor in the list of scrape targets. In the Administrator view, navigate to Observe
Targets. You can find csb-demo-monitor
within the list of scrape targets. -
Wait about ten minutes after deploying the servicemonitor. Then navigate to the Observe
Metrics in the Developer view. Select Custom query in the drop-down menu and type camel
to view the Camel metrics that are exposed through the /actuator/prometheus endpoint.
Red Hat does not offer support for installing and configuring Prometheus and Grafana on non-OCP environments.