In this article, we introduce the metrics monitoring add-on for Kogito. This add-on is part of the TrustyAI initiative already introduced in the previous article https://blog.kie.org/2020/06/trusty-ai-introduction.html .
Like Quarkus extensions, the Kogito add-ons are modules that can be imported as dependencies and add capabilities to the application. For example, another add-on is the infinispan-persistence-addon
that enables the Infinispan persistence.
The add-on we introduce in this post was already available but now with version 0.11 of Kogito new features related to decision monitoring have been added:
- Export of domain specific monitoring metrics with Prometheus.
- Generate operational and domain specific grafana dashboards.
In the article cited above, we introduced three personas: the devops engineer, the case worker and the compliance officer. The current version of the add-on exports one or more dashboards for each DMN and DRL resource. In particular, two types of dashboards might be generated depending on the type of the resource: one with operational metrics more oriented for the devops engineer and one with domain specific metrics, oriented to the case worker and the compliance worker needs.
Operational dashboard: this kind of dashboard is generated for each DMN and DRL endpoint and it contains useful information to monitor the status of the applications so as to have a fast reaction in case something goes wrong. The available graphs are about:
- The total number of requests on the endpoint.
- The average number of requests on the endpoint per minute.
- The quantiles on the elapsed time to evaluate the requests.
- Exception details.
Domain specific dashboard: currently this dashboard is exported only for each DMN endpoint. In particular, the domain specific dashboard contains a graph for each type of decision in the DMN model. At the moment, the types number
, boolean
and string
are supported, all the other time-based builtin types will be covered in the next Kogito release. In particular
- if the output of the decision is a number, the graph contains the quantiles for that metric (on a sliding window of 3 minutes).
- If the output is a boolean or a string, the graph contains the number of occurrences for each output (10 minutes average).
- if the output is time-based, a graph containing the quantiles is generated (with different scales and measurement unit depending on the type).
The plan for the next versions of the add-on is to also support complex structures and lists.
The devops engineer can directly use the dashboards that the add-on generates, or create custom ones manually based on the metrics exported by the application.
How To Use It
There are a few steps to follow to start using this add-on:
- In your kogito project, assuming that you have imported the kogito bom to manage properly the versions of the kogito modules, import the
monitoring-prometheus-addon
in yourpom.xml
:
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>monitoring-prometheus-addon</artifactId>
</dependency>
- In case you are interested about the number of requests on the endpoints and the status code of the responses, add the following class to your project
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.ext.Provider;
import org.kie.addons.monitoring.system.interceptor.MetricsInterceptor;
@Provider
public class MyInterceptor extends MetricsInterceptor {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
super.filter(requestContext, responseContext);
}
}
At this point, once the application is packaged
mvn clean package
the dashboards are generated under the path target/generated-resources/kogito/dashboards
and the devops engineer can easily inject them during the deployment of the grafana container.
For the grafana provisioning, we suggest having a look at the official Grafana documentation https://grafana.com/docs/grafana/latest/administration/provisioning/ . The steps to deploy the dashboards will be integrated with Kogito Operator in a future release.
That’s it! The Kogito application is ready to export operational and domain specific metrics on the endpoint /metrics
.
A complete example can be found here https://github.com/kiegroup/kogito-examples/tree/main/kogito-quarkus-examples/dmn-drools-quarkus-metrics.