Merge remote-tracking branch 'origin/topic/timw/telemetry-bind-address'

* origin/topic/timw/telemetry-bind-address:
  Add Telemetry::metrics_address option
This commit is contained in:
Tim Wojtulewicz 2024-06-07 09:28:52 -07:00
commit 3f6b9ab167
4 changed files with 13 additions and 3 deletions

View file

@ -1,3 +1,7 @@
7.0.0-dev.372 | 2024-06-07 09:28:52 -0700
* Add Telemetry::metrics_address option (Tim Wojtulewicz, Corelight)
7.0.0-dev.368 | 2024-06-06 18:08:29 -0700 7.0.0-dev.368 | 2024-06-06 18:08:29 -0700
* Change prometheus test to check for require jq (Tim Wojtulewicz, Corelight) * Change prometheus test to check for require jq (Tim Wojtulewicz, Corelight)

View file

@ -1 +1 @@
7.0.0-dev.370 7.0.0-dev.372

View file

@ -6,6 +6,10 @@ module Telemetry;
# to see the options without needing the rest. # to see the options without needing the rest.
export { export {
## Address used to make metric data available to Prometheus scrapers via
## HTTP.
const metrics_address = getenv("ZEEK_DEFAULT_LISTEN_ADDRESS") &redef;
## Port used to make metric data available to Prometheus scrapers via ## Port used to make metric data available to Prometheus scrapers via
## HTTP. ## HTTP.
const metrics_port = 0/unknown &redef; const metrics_port = 0/unknown &redef;

View file

@ -35,8 +35,9 @@ void Manager::InitPostScript() {
// Metrics port setting is used to calculate a URL for prometheus scraping // Metrics port setting is used to calculate a URL for prometheus scraping
std::string prometheus_url; std::string prometheus_url;
auto metrics_port = id::find_val("Telemetry::metrics_port")->AsPortVal(); auto metrics_port = id::find_val("Telemetry::metrics_port")->AsPortVal();
auto metrics_address = id::find_val("Telemetry::metrics_address")->AsStringVal()->ToStdString();
if ( metrics_port->Port() != 0 ) if ( metrics_port->Port() != 0 )
prometheus_url = util::fmt("localhost:%u", metrics_port->Port()); prometheus_url = util::fmt("%s:%u", metrics_address.data(), metrics_port->Port());
if ( ! prometheus_url.empty() ) { if ( ! prometheus_url.empty() ) {
CivetCallbacks* callbacks = nullptr; CivetCallbacks* callbacks = nullptr;
@ -77,7 +78,8 @@ void Manager::InitPostScript() {
// CivetWeb stores a copy of the callbacks, so we're safe to delete the pointer here // CivetWeb stores a copy of the callbacks, so we're safe to delete the pointer here
delete callbacks; delete callbacks;
} catch ( const CivetException& exc ) { } catch ( const CivetException& exc ) {
reporter->FatalError("Failed to setup Prometheus endpoint: %s\n", exc.what()); reporter->FatalError("Failed to setup Prometheus endpoint: %s. Attempted to bind to %s.", exc.what(),
prometheus_url.c_str());
} }
prometheus_exposer->RegisterCollectable(prometheus_registry); prometheus_exposer->RegisterCollectable(prometheus_registry);