IcingaDB: Don't publish useless data to Redis

The Icinga DB daemon processes the data from the `IcingaApplication`
type only and Icinga DB Web also uses only those stats. However, before
this commit, Icinga DB published all kinds of useless stats to Redis
each second, like the number of (un)reachable hosts, services, and so
on, which is waste of CPU and some other resources. This commit reduces
the published data drastically to only those simple stats coming from
the `IcingaApplication` type.
This commit is contained in:
Yonas Habteab 2025-03-04 17:34:38 +01:00
parent 5c651e45a3
commit 6ca0611f3d
2 changed files with 6 additions and 33 deletions

View File

@ -12,42 +12,15 @@ using namespace icinga;
Dictionary::Ptr IcingaDB::GetStats()
{
Dictionary::Ptr stats = new Dictionary();
//TODO: Figure out if more stats can be useful here.
Namespace::Ptr statsFunctions = ScriptGlobal::Get("StatsFunctions", &Empty);
if (!statsFunctions)
Dictionary::Ptr();
ObjectLock olock(statsFunctions);
for (auto& kv : statsFunctions)
{
Function::Ptr func = kv.second.Val;
if (!func)
BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid status function name."));
Dictionary::Ptr status = new Dictionary();
Array::Ptr perfdata = new Array();
func->Invoke({ status, perfdata });
stats->Set(kv.first, new Dictionary({
{ "status", status },
{ "perfdata", Serialize(perfdata, FAState) }
}));
}
typedef Dictionary::Ptr DP;
DP app = DP(DP(DP(stats->Get("IcingaApplication"))->Get("status"))->Get("icingaapplication"))->Get("app");
Dictionary::Ptr status = new Dictionary();
IcingaApplication::StatsFunc(status, nullptr);
Dictionary::Ptr app(Dictionary::Ptr(status->Get("icingaapplication"))->Get("app"));
app->Set("program_start", TimestampToMilliseconds(Application::GetStartTime()));
auto localEndpoint (Endpoint::GetLocalEndpoint());
if (localEndpoint) {
if (auto localEndpoint(Endpoint::GetLocalEndpoint()); localEndpoint) {
app->Set("endpoint_id", GetObjectIdentifier(localEndpoint));
}
return stats;
return new Dictionary{{ "IcingaApplication", new Dictionary{{"status", status}}}};
}

View File

@ -143,7 +143,7 @@ private:
Dictionary::Ptr SerializeState(const Checkable::Ptr& checkable);
/* Stats */
Dictionary::Ptr GetStats();
static Dictionary::Ptr GetStats();
/* utilities */
static String FormatCheckSumBinary(const String& str);