mirror of
https://github.com/falcosecurity/falco.git
synced 2025-09-25 20:30:47 +00:00
feat(webserver): implement metrics endpoint
This endpoint currently returns only prometheus metrics. Signed-off-by: Samuel Gaist <samuel.gaist@idiap.ch>
This commit is contained in:
@@ -1003,6 +1003,7 @@ metrics:
|
||||
libbpf_stats_enabled: true
|
||||
convert_memory_to_mb: true
|
||||
include_empty_values: false
|
||||
prometheus_enabled: false
|
||||
|
||||
#######################################
|
||||
# Falco performance tuning (advanced) #
|
||||
|
@@ -44,8 +44,18 @@ falco::app::run_result falco::app::actions::start_webserver(falco::app::state& s
|
||||
+ std::to_string(s.config->m_webserver_listen_port)
|
||||
+ ssl_option + "\n");
|
||||
|
||||
std::vector<libs::metrics::libs_metrics_collector> metrics_collectors;
|
||||
if (s.config->m_metrics_prometheus_enabled && s.config->m_metrics_prometheus_enabled)
|
||||
{
|
||||
for (const auto& source_info: s.source_infos)
|
||||
{
|
||||
metrics_collectors.push_back(libs::metrics::libs_metrics_collector(source_info.inspector.get(), s.config->m_metrics_flags));
|
||||
}
|
||||
}
|
||||
|
||||
s.webserver.start(
|
||||
s.offline_inspector,
|
||||
metrics_collectors,
|
||||
s.config->m_webserver_threadiness,
|
||||
s.config->m_webserver_listen_port,
|
||||
s.config->m_webserver_listen_address,
|
||||
|
@@ -79,7 +79,8 @@ falco_configuration::falco_configuration():
|
||||
m_metrics_output_file(""),
|
||||
m_metrics_flags((METRICS_V2_KERNEL_COUNTERS | METRICS_V2_LIBBPF_STATS | METRICS_V2_RESOURCE_UTILIZATION | METRICS_V2_STATE_COUNTERS)),
|
||||
m_metrics_convert_memory_to_mb(true),
|
||||
m_metrics_include_empty_values(false)
|
||||
m_metrics_include_empty_values(false),
|
||||
m_metrics_prometheus_enabled(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -553,6 +554,7 @@ void falco_configuration::load_yaml(const std::string& config_name)
|
||||
|
||||
m_metrics_convert_memory_to_mb = config.get_scalar<bool>("metrics.convert_memory_to_mb", true);
|
||||
m_metrics_include_empty_values = config.get_scalar<bool>("metrics.include_empty_values", false);
|
||||
m_metrics_prometheus_enabled = config.get_scalar<bool>("metrics.prometheus_enabled", false);
|
||||
|
||||
std::vector<std::string> load_plugins;
|
||||
|
||||
|
@@ -158,6 +158,7 @@ public:
|
||||
uint32_t m_metrics_flags;
|
||||
bool m_metrics_convert_memory_to_mb;
|
||||
bool m_metrics_include_empty_values;
|
||||
bool m_metrics_prometheus_enabled;
|
||||
std::vector<plugin_config> m_plugins;
|
||||
|
||||
// Falco engine
|
||||
|
@@ -27,6 +27,7 @@ falco_webserver::~falco_webserver()
|
||||
|
||||
void falco_webserver::start(
|
||||
const std::shared_ptr<sinsp>& inspector,
|
||||
const std::vector<libs::metrics::libs_metrics_collector>& metrics_collectors,
|
||||
uint32_t threadiness,
|
||||
uint32_t listen_port,
|
||||
std::string& listen_address,
|
||||
@@ -68,6 +69,28 @@ void falco_webserver::start(
|
||||
res.set_content(versions_json_str, "application/json");
|
||||
});
|
||||
|
||||
if (!metrics_collectors.empty())
|
||||
{
|
||||
libs::metrics::prometheus_metrics_converter prometheus_metrics_converter;
|
||||
|
||||
m_server->Get("/metrics",
|
||||
[metrics_collectors, prometheus_metrics_converter](const httplib::Request &, httplib::Response &res) {
|
||||
std::string prometheus_text;
|
||||
|
||||
for (auto metrics_collector: metrics_collectors) {
|
||||
metrics_collector.snapshot();
|
||||
auto metrics_snapshot = metrics_collector.get_metrics();
|
||||
|
||||
for (auto& metric: metrics_snapshot)
|
||||
{
|
||||
prometheus_metrics_converter.convert_metric_to_unit_convention(metric);
|
||||
prometheus_text += prometheus_metrics_converter.convert_metric_to_text_prometheus(metric, "namespace", "falco") + "\n";
|
||||
}
|
||||
}
|
||||
|
||||
res.set_content(prometheus_text, "text/plain; version=0.0.4");
|
||||
});
|
||||
}
|
||||
// run server in a separate thread
|
||||
if (!m_server->is_valid())
|
||||
{
|
||||
@@ -118,10 +141,7 @@ void falco_webserver::stop()
|
||||
{
|
||||
m_server_thread.join();
|
||||
}
|
||||
if (m_server != nullptr)
|
||||
{
|
||||
m_server = nullptr;
|
||||
}
|
||||
m_running = false;
|
||||
}
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ public:
|
||||
falco_webserver& operator = (const falco_webserver&) = delete;
|
||||
virtual void start(
|
||||
const std::shared_ptr<sinsp>& inspector,
|
||||
const std::vector<libs::metrics::libs_metrics_collector>& metrics_collectors,
|
||||
uint32_t threadiness,
|
||||
uint32_t listen_port,
|
||||
std::string& list_address,
|
||||
|
Reference in New Issue
Block a user