Background
In previous posts we presented a Prometheus exporter to monitor for monitoring TheThingsNetwork gateways. The exporter can directly be executed in a terminal. However, to use it productively it should run in the background as a service. This article demonstrates how this can be achieved using the system and service manager systemd on Linux systems.
Preparation
The first step is to prepare the environment where the Prometheus exporter is installed. Throughout this article we will use the directory /usr/local/bin/prometheus-ttn-exporter
. However, any other directory in the local file system is also possible.
Executing the exporter as root is possible, but not ideal. To reduce the privileges as much as possible, it is a better idea to create a system user and group. In our example the user and group is called ttn
. We need to ensure that the directory as well as all contained files are owned by the ttn
user and group.
Inside the directory we need to place the files ttn_gateway_exporter.py
and requirements.txt
both as provided in the Github Repository. To isolate the the exporter and its dependencies from the rest of the system, we will use a Python virtual environment (venv). Please note, that with this approach updates are not automatically installed when updating the rest of the system. You must ensure to update the Python venv on your own. The venv can be prepared by executing the following commands as the ttn
user.
virtualenv --python=python3 venv source venv/bin/activate pip install -r requirements.txt deactivate
With this the environment is prepared and the systemd service can be created.
Systemd
Systemd services are defined in text files. A common location for these service files is the directory /etc/systemd/system/
. For our example we will create the service file /etc/systemd/system/ttn.service
. The minimal content of this file is as follows.
[Unit] Description=ttn prometheus exporter Requires=network-online.target After=network-online.target [Service] User=ttn Group=ttn ExecStart=/usr/local/bin/prometheus-ttn-exporter/venv/bin/python /usr/local/bin/prometheus-ttn-exporter/ttn_gateway_exporter.py --listen :9715 --key API_KEY [Install] WantedBy=multi-user.target
The downside of this minimal example is that the TheThingsNetwork API key is directly stored in the system service file. So every user who is allowed to read the service file can access the API key. Depending on your deployment scenario this might be sufficient. If not other options would be to store the API key directly in the exporter directory and restrict the file access appropriately.
The last step is to reload the available systemd service files and start the new ttn service by executing:
systemctl daemon-reload systemctl start ttn.service
You can now verify that the Prometheus exporter is running by opening http://localhost:9715 in a browser.