No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Latest commit 7f5cb34 May 1, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd/prometheus-jmx-exporter-operator Update dependecies May 1, 2018
config Initial commit Apr 20, 2018
deploy Pass current namespace into OPERATOR_NAMESPACE env var Apr 24, 2018
lib Initial commit Apr 20, 2018
pkg Update dependecies May 1, 2018
tmp Initial commit Apr 20, 2018
vendor Update dependecies May 1, 2018
.gitignore Initial commit Apr 20, 2018
Gopkg.lock Update dependecies May 1, 2018
Gopkg.toml Update dependecies May 1, 2018
LICENSE Initial commit Apr 20, 2018 Updated README Apr 22, 2018

Prometheus Jmx Exporter Operator

This operator using Jmx Exporter enables Java processes running ok Kubernetes Pods to expose metrics collected form mBeans via JMX to Prometheus.


Prometheus JMX Exporter Configuration

Create a configuration file for the JMX Exporter.

Note that in our case hostPort and jmxUrl should not be set as the Jmx Exporter agent will be loaded into the Java process and we want it to talk to the local JVM. More configuration examples of Prometheus JMX Exporter can be found here

Add to configuration to a Kubernetes config map

kubectl create cm <your-prometheus-jmx-exporter-configmap-name> --from-file=<path-to-the-config-file>


kubectl create cm prometheus-jmx-exporter-config --from-file=javadummy/config.yaml

kubectl describe cm prometheus-jmx-exporter-config


If RBAC is enabled in your Kubernetes cluster than a service account is needed to be created with the approprite role binding for the operator. Download the rbac.yaml file then execute:

kubectl create -f <path-to-rbac-yaml-file>

Deploy the operator to Kubernetes

Download the operator.yaml deployment file. If you don't have RBAC enabled than remove

serviceAccountName: prometheus-jmx-exporter-operator
kubectl create -f <path-to-your-operator-yaml-file>

Create prometheus-jmx-exporter resources

Download cr.yaml and customize it for your needs.

    app: dummyapp

The label selector specifies what pods the operator to watch. The operator will investigate the pods that have labels which matches what is specified in labelSelector. It checks the containers of the pod and the Java applications running in these containers.

It will load the Prometheus JMX Exporter into the Java applications and passes to it the configuration from the config map.

    configMapName: prometheus-jmx-exporter-config
    configMapKey: config.yaml

Note: see Prometheus JMX Exporter Configuration above

port: 9400

This is the port number at which Prometheus server can scrape the metrics exported by Prometheus JMX exporter. Chose a port that is not conflicting with any of the container ports already used by the applications running in the containers.

List the JMX Exporter endpoints managed by the operator

kubectl get prometheusjmxexporter
kubectl get prometheusjmxexporter <name-of-the-prometheus-jmx-exporter> -o yaml

The status section lists the endpoints.


Currently only one Java process per pod is being supported. In case a pod has multiple containers than the operator will select the first container from the list of containers returned by Kubernetes API. Also if a container has multiple java processes running than the operator works on the first process.

Future work

  • Currently the user is required to provide a port for the Prometheus JMX Exporter that doesn't conflict with ports already being used by processes running on the pod. The operator should take care of this by choosing a free port available in the container.

  • Investigate the possibility of supporting pods with multiple containers and multiple Java processes per container. This operator best works with microservices where there is one process per container.