From: Remi Gacogne Date: Wed, 27 Mar 2019 11:10:37 +0000 (+0100) Subject: rec: Add a 'rebalanced-queries' metric X-Git-Tag: dnsdist-1.4.0-alpha1~38^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=596bf48219cb82379bf872e746dd7f626b582342;p=thirdparty%2Fpdns.git rec: Add a 'rebalanced-queries' metric --- diff --git a/pdns/pdns_recursor.cc b/pdns/pdns_recursor.cc index 7437e71852..065833eb53 100644 --- a/pdns/pdns_recursor.cc +++ b/pdns/pdns_recursor.cc @@ -2889,9 +2889,13 @@ static unsigned int selectWorker(unsigned int hash) unsigned int worker = hash % g_numWorkerThreads; /* at least one server has to be below the average load */ - while(load[worker] > targetLoad) { - // cerr<<"worker "< targetLoad) { + ++g_stats.rebalancedQueries; + do { + // cerr<<"worker "< targetLoad); } return /* skip handler */ 1 + g_numDistributorThreads + worker; diff --git a/pdns/rec-snmp.cc b/pdns/rec-snmp.cc index 415a36ff30..45b48cea8d 100644 --- a/pdns/rec-snmp.cc +++ b/pdns/rec-snmp.cc @@ -114,6 +114,7 @@ static const oid dnssecAuthenticDataQueriesOID[] = { RECURSOR_STATS_OID, 95 }; static const oid dnssecCheckDisabledQueriesOID[] = { RECURSOR_STATS_OID, 96 }; static const oid variableResponsesOID[] = { RECURSOR_STATS_OID, 97 }; static const oid specialMemoryUsageOID[] = { RECURSOR_STATS_OID, 98 }; +static const oid rebalancedQueriesOID[] = { RECURSOR_STATS_OID, 99 }; static std::unordered_map s_statsMap; @@ -320,5 +321,6 @@ RecursorSNMPAgent::RecursorSNMPAgent(const std::string& name, const std::string& registerCounter64Stat("policy-result-truncate", policyResultTruncateOID, OID_LENGTH(policyResultTruncateOID)); registerCounter64Stat("policy-result-custom", policyResultCustomOID, OID_LENGTH(policyResultCustomOID)); registerCounter64Stat("special-memory-usage", specialMemoryUsageOID, OID_LENGTH(specialMemoryUsageOID)); + registerCounter64Stat("rebalanced-queries", rebalancedQueriesOID, OID_LENGTH(rebalancedQueriesOID)); #endif /* HAVE_NET_SNMP */ } diff --git a/pdns/rec_channel_rec.cc b/pdns/rec_channel_rec.cc index bb5bfba56b..453885bad4 100644 --- a/pdns/rec_channel_rec.cc +++ b/pdns/rec_channel_rec.cc @@ -1102,6 +1102,8 @@ void registerAllStats() addGetStat("policy-result-truncate", &g_stats.policyResults[DNSFilterEngine::PolicyKind::Truncate]); addGetStat("policy-result-custom", &g_stats.policyResults[DNSFilterEngine::PolicyKind::Custom]); + addGetStat("rebalanced-queries", &g_stats.rebalancedQueries); + /* make sure that the ECS stats are properly initialized */ SyncRes::clearECSStats(); for (size_t idx = 0; idx < SyncRes::s_ecsResponsesBySubnetSize4.size(); idx++) { diff --git a/pdns/recursordist/RECURSOR-MIB.txt b/pdns/recursordist/RECURSOR-MIB.txt index 2af4621d08..6b9fac22e1 100644 --- a/pdns/recursordist/RECURSOR-MIB.txt +++ b/pdns/recursordist/RECURSOR-MIB.txt @@ -817,6 +817,14 @@ specialMemoryUsage OBJECT-TYPE "Memory usage (more precise bbut expensive to retrieve)" ::= { stats 98 } +rebalancedQueries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of queries re-distributed because the first selected worker thread was above the target load" + ::= { stats 99 } + --- --- Traps / Notifications --- @@ -957,6 +965,8 @@ recGroup OBJECT-GROUP dnssecAuthenticDataQueries, dnssecCheckDisabledQueries, variableResponses, + specialMemoryUsage, + rebalancedQueries, trapReason } STATUS current diff --git a/pdns/recursordist/docs/metrics.rst b/pdns/recursordist/docs/metrics.rst index 3fb0ee71ed..1fbf805763 100644 --- a/pdns/recursordist/docs/metrics.rst +++ b/pdns/recursordist/docs/metrics.rst @@ -399,6 +399,12 @@ questions ^^^^^^^^^ counts all end-user initiated queries with the RD bit set +rebalanced-queries +^^^^^^^^^^^^^^^^^^ +.. versionadded:: 4.1.12 + +number of queries balanced to a different worker thread because the first selected one was above the target load configured with 'distribution-load-factor' + resource-limits ^^^^^^^^^^^^^^^ counts number of queries that could not be performed because of resource limits diff --git a/pdns/syncres.hh b/pdns/syncres.hh index d808668b49..bba453e2cf 100644 --- a/pdns/syncres.hh +++ b/pdns/syncres.hh @@ -957,6 +957,7 @@ struct RecursorStats std::atomic dnssecValidations; // should be the sum of all dnssecResult* stats std::map > dnssecResults; std::map > policyResults; + std::atomic rebalancedQueries{0}; }; //! represents a running TCP/IP client session