Skip to main content

Prometheus metrics collector and exporter for RLM (Reprise License Manager)

Project description

📊 RLM-Prometheus 📊

Prometheus exporter providing metrics from a Reprise License Manager (RLM) instance.

Currently tested on Debian Linux only, but as it is based on pure CPython it should potentially also work on Windows - YMMV.

⚙🔧 Installation ⚙🔧

Example installation on Debian / Ubuntu:

# required for creating Python virtualenvs:
apt update
apt install -y python3-venv

# create a virtualenv in /opt:
python3 -m venv /opt/rlm-prometheus

# update 'pip' and install the 'rlm-prometheus' package:
/opt/rlm-prometheus/bin/pip install --upgrade pip
/opt/rlm-prometheus/bin/pip install rlm-prometheus

🏃 Running in foreground mode 🏃

This is mostly relevant for testing configuration settings and checking if the exporter works as expected - to do this either activate the previously created Python environment or call the rlm_exporter script using the full path to that environment.

For convenience it is reasonable to use a configuration file in such a situation instead of setting all the environment variables manually. Simply copy the config-example.yaml file to e.g. config.yaml and adjust the settings there. Then run the exporter like this:

rlm_exporter -vvv --config config.yaml

The exporter running in foreground can be terminated as usual via Ctrl+C.

👟 Running as a service 👟

adduser --system rlmexporter
cp -v /opt/rlm-prometheus/lib/python*/site-packages/resources/systemd/rlm-prometheus.service  /etc/systemd/system/
systemctl daemon-reload
systemctl edit rlm-prometheus.service

The last command will open an editor with the override configuration of the service's unit file. Add a section like this at the top of the override file, with the bare minimum of setting RLM_ISV and most likely also RLM_URI. For other options available check for the commented-out lines further down in the unit file setting environment variables starting with RLM_. Please note that on Ubuntu 20.04 the systemct edit command will present you with an empty file, so you will have to copy the respective lines from below or the provided central unit file.

[Service]
### specific configuration for the RLM exporter service:
Environment=RLM_ISV=example_isv
Environment=RLM_URI=http://license-server.example.xy:5054

Finally enable the service and start it right away. The second line will show the log messages on the console until Ctrl+C is pressed. This way you should be able to tell if the service has started up properly and is providing metrics on the configured port:

systemctl enable --now rlm-prometheus.service
journalctl --follow --unit rlm-prometheus

Open ports for the rlm-prometheus exporter:

SOURCE="any"  # <-- put an IP address here to restrict access more
ufw allow from $SOURCE to any port 8909

🔥🧱 Firewall settings for RLM on Windows 🔥🧱

For the metrics collection it is obviously necessary the exporter can gather data from your RLM instance. The standard approach is to send requests to RLM's built-in web server. By default access to it is blocked and those restrictions should not be lifted more than necessary.

There is an example snippet in Open-RlmFirewallPort.ps1 that demonstrates how to adjust the Windows firewall so the collector's host IP address is allowed to connect to RLM.

👾 CAUTION: memory leak in RLM 👾

Repeatedly requesting data (e.g. every 5 minutes) from RLM's built-in web server has shown to increase its memory consumption in a linear fashion over time on our side. This indicates a memory leak in RLM, which eventually made the license service fail silently.

To avoid (or rather work around) this, we did set up a scheduled task on the server hosting the RLM service that is restarting the service once a night while also rotating its corresponding log files at the same time.

Example code on how to achieve this via PowerShell is provided in Restart-RlmService.ps1.

🆙 Upgrading 🆙

Assuming the exporter has been installed as described above, an upgrade to a newer version could be done like this:

/opt/rlm-prometheus/bin/pip install --upgrade rlm-prometheus
# check the changelog for potentially new configuration settings, integrate them
# by calling `systemctl edit rlm-prometheus.service` if necessary and finally
# restart the service:
systemctl restart rlm-prometheus.service

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rlm_prometheus-0.4.0.tar.gz (23.2 kB view details)

Uploaded Source

Built Distribution

rlm_prometheus-0.4.0-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file rlm_prometheus-0.4.0.tar.gz.

File metadata

  • Download URL: rlm_prometheus-0.4.0.tar.gz
  • Upload date:
  • Size: 23.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/5.15.0-116-generic

File hashes

Hashes for rlm_prometheus-0.4.0.tar.gz
Algorithm Hash digest
SHA256 7f153c6b40a22a8dd278c5200ac72274f20531831a0ecfb5cc244e99a90314f8
MD5 e2911d95ec9cbf059f412e3b1530c3e1
BLAKE2b-256 59eee074685811de043642a1e9874964a7a9c345a4be9f270f6374987aec4361

See more details on using hashes here.

File details

Details for the file rlm_prometheus-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: rlm_prometheus-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 24.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/5.15.0-116-generic

File hashes

Hashes for rlm_prometheus-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 097f361232089b4142a974a0166c861da7d1df04967779f814bdd7238aa2a734
MD5 46022c21f9702e1247ba2baa46d9b98e
BLAKE2b-256 b4e1583676ae32eb6b6606448ec6585bb20f0b1a8d85fa7fc97fa089ff85fcd6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page