Add telemetry Manager to Zeek setup / teardown

This commit is contained in:
Dominik Charousset 2021-03-01 16:47:19 +01:00
parent 83d7d2da4c
commit 443f7f0a18
3 changed files with 39 additions and 0 deletions

View file

@ -10,6 +10,7 @@
#include "zeek/Func.h" #include "zeek/Func.h"
#include "zeek/broker/Data.h" #include "zeek/broker/Data.h"
#include "zeek/broker/Store.h" #include "zeek/broker/Store.h"
#include "zeek/telemetry/Manager.h"
#include "zeek/util.h" #include "zeek/util.h"
#include "zeek/Var.h" #include "zeek/Var.h"
#include "zeek/Desc.h" #include "zeek/Desc.h"
@ -1806,4 +1807,31 @@ void Manager::PrepareForwarding(const std::string &name)
DBG_LOG(DBG_BROKER, "Resolved table forward for data store %s", name.c_str()); DBG_LOG(DBG_BROKER, "Resolved table forward for data store %s", name.c_str());
} }
std::unique_ptr<telemetry::Manager> Manager::NewTelemetryManager()
{
// The telemetry Manager actually only has a dependency on the actor system,
// not to the Broker Manager. By having the telemetry Manager hold on to a
// shared_ptr to our Broker state, we make sure the Broker endpoint, which
// owns the CAF actor system, lives for as long as necessary. This also
// makes sure that the Broker Manager may even get destroyed before the
// telemetry Manager.
struct TM : public telemetry::Manager
{
static auto getPimpl(BrokerState& st)
{
auto registry = std::addressof(st.endpoint.system().metrics());
return reinterpret_cast<telemetry::Manager::Impl*>(registry);
}
explicit TM(const std::shared_ptr<BrokerState>& bsptr)
: telemetry::Manager(getPimpl(*bsptr)), ptr(bsptr)
{
}
std::shared_ptr<BrokerState> ptr;
};
return std::make_unique<TM>(bstate);
}
} // namespace zeek::Broker } // namespace zeek::Broker

View file

@ -30,6 +30,8 @@ class TableVal;
using VectorTypePtr = IntrusivePtr<VectorType>; using VectorTypePtr = IntrusivePtr<VectorType>;
using TableValPtr = IntrusivePtr<TableVal>; using TableValPtr = IntrusivePtr<TableVal>;
namespace telemetry { class Manager; }
namespace detail { class Frame; } namespace detail { class Frame; }
namespace Broker { namespace Broker {
@ -357,6 +359,11 @@ public:
~ScriptScopeGuard() { --script_scope; } ~ScriptScopeGuard() { --script_scope; }
}; };
/**
* Allocates a new manager for telemetry data.
*/
std::unique_ptr<telemetry::Manager> NewTelemetryManager();
private: private:
void DispatchMessage(const broker::topic& topic, broker::data msg); void DispatchMessage(const broker::topic& topic, broker::data msg);

View file

@ -69,6 +69,7 @@ extern "C" {
#include "zeek/zeekygen/Manager.h" #include "zeek/zeekygen/Manager.h"
#include "zeek/iosource/Manager.h" #include "zeek/iosource/Manager.h"
#include "zeek/broker/Manager.h" #include "zeek/broker/Manager.h"
#include "zeek/telemetry/Manager.h"
#include "zeek/binpac_zeek.h" #include "zeek/binpac_zeek.h"
#include "zeek/module_util.h" #include "zeek/module_util.h"
@ -107,6 +108,7 @@ zeek::file_analysis::Manager* zeek::file_mgr = nullptr;
zeek::zeekygen::detail::Manager* zeek::detail::zeekygen_mgr = nullptr; zeek::zeekygen::detail::Manager* zeek::detail::zeekygen_mgr = nullptr;
zeek::iosource::Manager* zeek::iosource_mgr = nullptr; zeek::iosource::Manager* zeek::iosource_mgr = nullptr;
zeek::Broker::Manager* zeek::broker_mgr = nullptr; zeek::Broker::Manager* zeek::broker_mgr = nullptr;
zeek::telemetry::Manager* zeek::telemetry_mgr = nullptr;
zeek::Supervisor* zeek::supervisor_mgr = nullptr; zeek::Supervisor* zeek::supervisor_mgr = nullptr;
zeek::detail::trigger::Manager* zeek::detail::trigger_mgr = nullptr; zeek::detail::trigger::Manager* zeek::detail::trigger_mgr = nullptr;
@ -327,6 +329,7 @@ static void terminate_bro()
delete plugin_mgr; delete plugin_mgr;
delete val_mgr; delete val_mgr;
delete fragment_mgr; delete fragment_mgr;
delete telemetry_mgr;
// free the global scope // free the global scope
pop_scope(); pop_scope();
@ -576,6 +579,7 @@ SetupResult setup(int argc, char** argv, Options* zopts)
file_mgr = new file_analysis::Manager(); file_mgr = new file_analysis::Manager();
auto broker_real_time = ! options.pcap_file && ! options.deterministic_mode; auto broker_real_time = ! options.pcap_file && ! options.deterministic_mode;
broker_mgr = new Broker::Manager(broker_real_time); broker_mgr = new Broker::Manager(broker_real_time);
telemetry_mgr = broker_mgr->NewTelemetryManager().release();
trigger_mgr = new trigger::Manager(); trigger_mgr = new trigger::Manager();
plugin_mgr->InitPreScript(); plugin_mgr->InitPreScript();