From 7c619bdc9a9e4185285857fa63df8c3f4a6a532f Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 23 Apr 2025 09:30:04 +0200 Subject: [PATCH] Improve usability of Prometheus metrics backend (#16060) --- builtin/settingtypes.txt | 7 ++++--- src/server.cpp | 10 +++++----- src/util/metricsbackend.cpp | 12 +++++++++++- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 9462f616d1..80aeef2097 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -2241,9 +2241,10 @@ lighting_boost_spread (Light curve boost spread) float 0.2 0.0 0.4 enable_ipv6 (IPv6) [common] bool true # Prometheus listener address. -# If Luanti is compiled with ENABLE_PROMETHEUS option enabled, -# enable metrics listener for Prometheus on that address. -# Metrics can be fetched on http://127.0.0.1:30000/metrics +# If Luanti is compiled with Prometheus support, this setting +# enables the metrics listener for Prometheus on that address. +# By default you can fetch metrics from http://127.0.0.1:30000/metrics. +# An empty value disables the metrics listener. prometheus_listener_address (Prometheus listener address) [server] string 127.0.0.1:30000 # Maximum size of the client's outgoing chat queue. diff --git a/src/server.cpp b/src/server.cpp index bc3ee6c6e4..008b91022b 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -284,12 +284,12 @@ Server::Server( throw ServerError("Supplied invalid gamespec"); #if USE_PROMETHEUS - if (!simple_singleplayer_mode) - m_metrics_backend = std::unique_ptr(createPrometheusMetricsBackend()); - else -#else - if (true) + if (!simple_singleplayer_mode) { + // Note: may return null + m_metrics_backend.reset(createPrometheusMetricsBackend()); + } #endif + if (!m_metrics_backend) m_metrics_backend = std::make_unique(); m_uptime_counter = m_metrics_backend->addCounter("minetest_core_server_uptime", "Server uptime (in seconds)"); diff --git a/src/util/metricsbackend.cpp b/src/util/metricsbackend.cpp index 1bd485cde4..55b914bd0e 100644 --- a/src/util/metricsbackend.cpp +++ b/src/util/metricsbackend.cpp @@ -11,6 +11,7 @@ #include #include "log.h" #include "settings.h" +#include "exceptions.h" #endif /* Plain implementation */ @@ -183,7 +184,16 @@ MetricsBackend *createPrometheusMetricsBackend() { std::string addr; g_settings->getNoEx("prometheus_listener_address", addr); - return new PrometheusMetricsBackend(addr); + if (addr.empty()) + return nullptr; + infostream << "Starting Prometheus metrics on " << addr << std::endl; + try { + return new PrometheusMetricsBackend(addr); + } catch (std::exception &e) { + errorstream << "Error while starting Prometheus metrics on " << addr + << ":\n" << e.what() << std::endl; + throw e; + } } #endif