From: Otto Date: Wed, 27 Jan 2021 12:14:54 +0000 (+0100) Subject: Move table to web server and add missing entries. X-Git-Tag: dnsdist-1.6.0-alpha2~47^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d3fe9f3f43555e762c786dd9e6e4628d1345c266;p=thirdparty%2Fpdns.git Move table to web server and add missing entries. There is code to check the tables, but it is disabled since it is racy and causes crashes once in a while. --- diff --git a/pdns/recursordist/rec_metrics.hh b/pdns/recursordist/rec_metrics.hh index fc363e876c..39b15deeb6 100644 --- a/pdns/recursordist/rec_metrics.hh +++ b/pdns/recursordist/rec_metrics.hh @@ -87,371 +87,7 @@ public: private: // Description and types for prometheus output of stats - std::map metrics = { - {"all-outqueries", - MetricDefinition(PrometheusMetricType::counter, - "Number of outgoing UDP queries since starting")}, - - {"answers-slow", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered after 1 second")}, - {"answers0-1", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered within 1 millisecond")}, - {"answers1-10", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered within 10 milliseconds")}, - {"answers10-100", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered within 100 milliseconds")}, - {"answers100-1000", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered within 1 second")}, - - {"auth4-answers-slow", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv4 after 1 second")}, - {"auth4-answers0-1", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv4within 1 millisecond")}, - {"auth4-answers1-10", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv4 within 10 milliseconds")}, - {"auth4-answers10-100", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv4 within 100 milliseconds")}, - {"auth4-answers100-1000", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv4 within 1 second")}, - - {"auth6-answers-slow", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv6 after 1 second")}, - {"auth6-answers0-1", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv6 within 1 millisecond")}, - {"auth6-answers1-10", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv6 within 10 milliseconds")}, - {"auth6-answers10-100", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv6 within 100 milliseconds")}, - {"auth6-answers100-1000", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries answered by authoritatives over IPv6 within 1 second")}, - - {"auth-zone-queries", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries to locally hosted authoritative zones (`setting-auth-zones`) since starting")}, - {"cache-bytes", - MetricDefinition(PrometheusMetricType::gauge, - "Size of the cache in bytes")}, - {"cache-entries", - MetricDefinition(PrometheusMetricType::gauge, - "Number of entries in the cache")}, - {"cache-hits", - MetricDefinition(PrometheusMetricType::counter, - "Number of of cache hits since starting, this does **not** include hits that got answered from the packet-cache")}, - {"cache-misses", - MetricDefinition(PrometheusMetricType::counter, - "Number of cache misses since starting")}, - {"case-mismatches", - MetricDefinition(PrometheusMetricType::counter, - "Number of mismatches in character case since starting")}, - {"chain-resends", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries chained to existing outstanding")}, - {"client-parse-errors", - MetricDefinition(PrometheusMetricType::counter, - "Number of client packets that could not be parsed")}, - {"concurrent-queries", - MetricDefinition(PrometheusMetricType::gauge, - "Number of MThreads currently running")}, - {"cpu-msec-thread-0", - MetricDefinition(PrometheusMetricType::counter, - "Number of milliseconds spent in thread n")}, - {"dlg-only-drops", - MetricDefinition(PrometheusMetricType::counter, - "Number of records dropped because of `setting-delegation-only` setting")}, - - {"dnssec-authentic-data-queries", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries received with the AD bit set")}, - {"dnssec-check-disabled-queries", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries received with the CD bit set")}, - {"dnssec-queries", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries received with the DO bit set")}, - {"dnssec-result-bogus", - MetricDefinition(PrometheusMetricType::counter, - "Number of DNSSEC validations that had the Bogus state")}, - {"dnssec-result-indeterminate", - MetricDefinition(PrometheusMetricType::counter, - "Number of DNSSEC validations that had the Indeterminate state")}, - {"dnssec-result-insecure", - MetricDefinition(PrometheusMetricType::counter, - "Number of DNSSEC validations that had the Insecure state")}, - {"dnssec-result-nta", - MetricDefinition(PrometheusMetricType::counter, - "Number of DNSSEC validations that had the (negative trust anchor) state")}, - {"dnssec-result-secure", - MetricDefinition(PrometheusMetricType::counter, - "Number of DNSSEC validations that had the Secure state")}, - - {"dnssec-validations", - MetricDefinition(PrometheusMetricType::counter, - "Number of DNSSEC validations performed")}, - {"dont-outqueries", - MetricDefinition(PrometheusMetricType::counter, - "Number of outgoing queries dropped because of `setting-dont-query` setting")}, - {"qname-min-fallback-success", - MetricDefinition(PrometheusMetricType::counter, - "Number of successful queries due to fallback mechanism within 'qname-minimization' setting")}, - {"ecs-queries", - MetricDefinition(PrometheusMetricType::counter, - "Number of outgoing queries adorned with an EDNS Client Subnet option")}, - {"ecs-responses", - MetricDefinition(PrometheusMetricType::counter, - "Number of responses received from authoritative servers with an EDNS Client Subnet option we used")}, - {"edns-ping-matches", - MetricDefinition(PrometheusMetricType::counter, - "Number of servers that sent a valid EDNS PING response")}, - {"edns-ping-mismatches", - MetricDefinition(PrometheusMetricType::counter, - "Number of servers that sent an invalid EDN PING response")}, - {"failed-host-entries", - MetricDefinition(PrometheusMetricType::counter, - "Number of servers that failed to resolve")}, - {"ignored-packets", - MetricDefinition(PrometheusMetricType::counter, - "Number of non-query packets received on server sockets that should only get query packets")}, - {"ipv6-outqueries", - MetricDefinition(PrometheusMetricType::counter, - "Number of outgoing queries over IPv6")}, - {"ipv6-questions", - MetricDefinition(PrometheusMetricType::counter, - "Number of end-user initiated queries with the RD bit set, received over IPv6 UDP")}, - {"malloc-bytes", - MetricDefinition(PrometheusMetricType::counter, - "Number of bytes allocated by the process (broken, always returns 0)")}, - {"max-cache-entries", - MetricDefinition(PrometheusMetricType::gauge, - "Currently configured maximum number of cache entries")}, - {"max-packetcache-entries", - MetricDefinition(PrometheusMetricType::gauge, - "Currently configured maximum number of packet cache entries")}, - {"max-mthread-stack", - MetricDefinition(PrometheusMetricType::gauge, - "Maximum amount of thread stack ever used")}, - - {"negcache-entries", - MetricDefinition(PrometheusMetricType::gauge, - "Number of entries in the negative answer cache")}, - {"no-packet-error", - MetricDefinition(PrometheusMetricType::counter, - "Number of erroneous received packets")}, - {"nod-lookups-dropped-oversize", - MetricDefinition(PrometheusMetricType::counter, - "Number of NOD lookups dropped because they would exceed the maximum name length")}, - {"noedns-outqueries", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries sent out without EDNS")}, - {"noerror-answers", - MetricDefinition(PrometheusMetricType::counter, - "Number of NOERROR answers since starting")}, - {"noping-outqueries", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries sent out without ENDS PING")}, - {"nsset-invalidations", - MetricDefinition(PrometheusMetricType::counter, - "Number of times an nsset was dropped because it no longer worked")}, - {"nsspeeds-entries", - MetricDefinition(PrometheusMetricType::gauge, - "Number of entries in the NS speeds map")}, - {"nxdomain-answers", - MetricDefinition(PrometheusMetricType::counter, - "Number of NXDOMAIN answers since starting")}, - {"outgoing-timeouts", - MetricDefinition(PrometheusMetricType::counter, - "Number of timeouts on outgoing UDP queries since starting")}, - {"outgoing4-timeouts", - MetricDefinition(PrometheusMetricType::counter, - "Number of timeouts on outgoing UDP IPv4 queries since starting")}, - {"outgoing6-timeouts", - MetricDefinition(PrometheusMetricType::counter, - "Number of timeouts on outgoing UDP IPv6 queries since starting")}, - {"over-capacity-drops", - MetricDefinition(PrometheusMetricType::counter, - "Number of questions dropped because over maximum concurrent query limit")}, - {"packetcache-bytes", - MetricDefinition(PrometheusMetricType::gauge, - "Size of the packet cache in bytes")}, - {"packetcache-entries", - MetricDefinition(PrometheusMetricType::gauge, - "Number of packet cache entries")}, - {"packetcache-hits", - MetricDefinition(PrometheusMetricType::counter, - "Number of packet cache hits")}, - {"packetcache-misses", - MetricDefinition(PrometheusMetricType::counter, - "Number of packet cache misses")}, - - {"policy-drops", - MetricDefinition(PrometheusMetricType::counter, - "Number of packets dropped because of (Lua) policy decision")}, - {"policy-result-noaction", - MetricDefinition(PrometheusMetricType::counter, - "Number of packets that were not acted upon by the RPZ/filter engine")}, - {"policy-result-drop", - MetricDefinition(PrometheusMetricType::counter, - "Number of packets that were dropped by the RPZ/filter engine")}, - {"policy-result-nxdomain", - MetricDefinition(PrometheusMetricType::counter, - "Number of packets that were replied to with NXDOMAIN by the RPZ/filter engine")}, - {"policy-result-nodata", - MetricDefinition(PrometheusMetricType::counter, - "Number of packets that were replied to with no data by the RPZ/filter engine")}, - {"policy-result-truncate", - MetricDefinition(PrometheusMetricType::counter, - "Number of packets that were were forced to TCP by the RPZ/filter engine")}, - {"policy-result-custom", - MetricDefinition(PrometheusMetricType::counter, - "Number of packets that were sent a custom answer by the RPZ/filter engine")}, - - {"qa-latency", - MetricDefinition(PrometheusMetricType::gauge, - "Shows the current latency average, in microseconds, exponentially weighted over past 'latency-statistic-size' packets")}, - {"query-pipe-full-drops", - MetricDefinition(PrometheusMetricType::counter, - "Number of questions dropped because the query distribution pipe was full")}, - {"questions", - MetricDefinition(PrometheusMetricType::counter, - "Counts all end-user initiated queries with the RD bit set")}, - {"rebalanced-queries", - MetricDefinition(PrometheusMetricType::counter, - "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", - MetricDefinition(PrometheusMetricType::counter, - "Number of queries that could not be performed because of resource limits")}, - {"security-status", - MetricDefinition(PrometheusMetricType::gauge, - "security status based on `securitypolling`")}, - {"server-parse-errors", - MetricDefinition(PrometheusMetricType::counter, - "Number of server replied packets that could not be parsed")}, - {"servfail-answers", - MetricDefinition(PrometheusMetricType::counter, - "Number of SERVFAIL answers since starting")}, - {"spoof-prevents", - MetricDefinition(PrometheusMetricType::counter, - "Number of times PowerDNS considered itself spoofed, and dropped the data")}, - {"sys-msec", - MetricDefinition(PrometheusMetricType::counter, - "Number of CPU milliseconds spent in 'system' mode")}, - {"tcp-client-overflow", - MetricDefinition(PrometheusMetricType::counter, - "Number of times an IP address was denied TCP access because it already had too many connections")}, - {"tcp-clients", - MetricDefinition(PrometheusMetricType::gauge, - "Number of currently active TCP/IP clients")}, - {"tcp-outqueries", - MetricDefinition(PrometheusMetricType::counter, - "Number of outgoing TCP queries since starting")}, - {"tcp-questions", - MetricDefinition(PrometheusMetricType::counter, - "Number of all incoming TCP queries since starting")}, - {"throttle-entries", - MetricDefinition(PrometheusMetricType::gauge, - "Number of of entries in the throttle map")}, - {"throttled-out", - MetricDefinition(PrometheusMetricType::counter, - "Number of throttled outgoing UDP queries since starting")}, - {"throttled-outqueries", - MetricDefinition(PrometheusMetricType::counter, - "Number of throttled outgoing UDP queries since starting")}, - {"too-old-drops", - MetricDefinition(PrometheusMetricType::counter, - "Number of questions dropped that were too old")}, - {"truncated-drops", - MetricDefinition(PrometheusMetricType::counter, - "Number of questions dropped because they were larger than 512 bytes")}, - {"empty-queries", - MetricDefinition(PrometheusMetricType::counter, - "Questions dropped because they had a QD count of 0")}, - {"unauthorized-tcp", - MetricDefinition(PrometheusMetricType::counter, - "Number of TCP questions denied because of allow-from restrictions")}, - {"unauthorized-udp", - MetricDefinition(PrometheusMetricType::counter, - "Number of UDP questions denied because of allow-from restrictions")}, - {"unexpected-packets", - MetricDefinition(PrometheusMetricType::counter, - "Number of answers from remote servers that were unexpected (might point to spoofing)")}, - {"unreachables", - MetricDefinition(PrometheusMetricType::counter, - "Number of times nameservers were unreachable since starting")}, - {"uptime", - MetricDefinition(PrometheusMetricType::counter, - "Number of seconds process has been running")}, - {"user-msec", - MetricDefinition(PrometheusMetricType::counter, - "Number of CPU milliseconds spent in 'user' mode")}, - {"variable-responses", - MetricDefinition(PrometheusMetricType::counter, - "Number of responses that were marked as 'variable'")}, - - {"x-our-latency", - MetricDefinition(PrometheusMetricType::gauge, - "Shows the averaged time spent within PowerDNS, in microseconds, exponentially weighted over past 'latency-statistic-size' packets")}, - {"x-ourtime0-1", - MetricDefinition(PrometheusMetricType::counter, - "Counts responses where between 0 and 1 milliseconds was spent within the Recursor")}, - {"x-ourtime1-2", - MetricDefinition(PrometheusMetricType::counter, - "Counts responses where between 1 and 2 milliseconds was spent within the Recursor")}, - {"x-ourtime2-4", - MetricDefinition(PrometheusMetricType::counter, - "Counts responses where between 2 and 4 milliseconds was spent within the Recursor")}, - {"x-ourtime4-8", - MetricDefinition(PrometheusMetricType::counter, - "Counts responses where between 4 and 8 milliseconds was spent within the Recursor")}, - {"x-ourtime8-16", - MetricDefinition(PrometheusMetricType::counter, - "Counts responses where between 8 and 16 milliseconds was spent within the Recursor")}, - {"x-ourtime16-32", - MetricDefinition(PrometheusMetricType::counter, - "Counts responses where between 16 and 32 milliseconds was spent within the Recursor")}, - {"x-ourtime-slow", - MetricDefinition(PrometheusMetricType::counter, - "Counts responses where more than 32 milliseconds was spent within the Recursor")}, - - {"fd-usage", - MetricDefinition(PrometheusMetricType::gauge, - "Number of open file descriptors")}, - {"real-memory-usage", - MetricDefinition(PrometheusMetricType::gauge, - "Number of bytes real process memory usage")}, - {"udp-in-errors", - MetricDefinition(PrometheusMetricType::counter, - "From /proc/net/snmp InErrors")}, - {"udp-noport-errors", - MetricDefinition(PrometheusMetricType::counter, - "From /proc/net/snmp NoPorts")}, - {"udp-recvbuf-errors", - MetricDefinition(PrometheusMetricType::counter, - "From /proc/net/snmp RcvbufErrors")}, - {"udp-sndbuf-errors", - MetricDefinition(PrometheusMetricType::counter, - "From /proc/net/snmp SndbufErrors")}, - - {"cpu-iowait", - MetricDefinition(PrometheusMetricType::counter, - "Time spent waiting for I/O to complete by the whole system, in units of USER_HZ")}, - {"cpu-steal", - MetricDefinition(PrometheusMetricType::counter, - "Stolen time, which is the time spent by the whole system in other operating systems when running in a virtualized environment, in units of USER_HZ")}, - }; + static const std::map metrics; }; extern MetricDefinitionStorage g_metricDefinitions; diff --git a/pdns/ws-recursor.cc b/pdns/ws-recursor.cc index c6f521d8fb..6481c7cbd4 100644 --- a/pdns/ws-recursor.cc +++ b/pdns/ws-recursor.cc @@ -507,11 +507,487 @@ static void serveStuff(HttpRequest* req, HttpResponse* resp) } } +const std::map MetricDefinitionStorage::metrics = { + {"all-outqueries", + MetricDefinition(PrometheusMetricType::counter, + "Number of outgoing UDP queries since starting")}, + + {"answers-slow", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered after 1 second")}, + {"answers0-1", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered within 1 millisecond")}, + {"answers1-10", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered within 10 milliseconds")}, + {"answers10-100", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered within 100 milliseconds")}, + {"answers100-1000", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered within 1 second")}, + + {"auth4-answers-slow", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv4 after 1 second")}, + {"auth4-answers0-1", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv4within 1 millisecond")}, + {"auth4-answers1-10", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv4 within 10 milliseconds")}, + {"auth4-answers10-100", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv4 within 100 milliseconds")}, + {"auth4-answers100-1000", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv4 within 1 second")}, + + {"auth6-answers-slow", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv6 after 1 second")}, + {"auth6-answers0-1", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv6 within 1 millisecond")}, + {"auth6-answers1-10", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv6 within 10 milliseconds")}, + {"auth6-answers10-100", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv6 within 100 milliseconds")}, + {"auth6-answers100-1000", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries answered by authoritatives over IPv6 within 1 second")}, + + {"auth-zone-queries", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries to locally hosted authoritative zones (`setting-auth-zones`) since starting")}, + {"cache-bytes", + MetricDefinition(PrometheusMetricType::gauge, + "Size of the cache in bytes")}, + {"cache-entries", + MetricDefinition(PrometheusMetricType::gauge, + "Number of entries in the cache")}, + {"cache-hits", + MetricDefinition(PrometheusMetricType::counter, + "Number of of cache hits since starting, this does **not** include hits that got answered from the packet-cache")}, + {"cache-misses", + MetricDefinition(PrometheusMetricType::counter, + "Number of cache misses since starting")}, + {"case-mismatches", + MetricDefinition(PrometheusMetricType::counter, + "Number of mismatches in character case since starting")}, + {"chain-resends", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries chained to existing outstanding")}, + {"client-parse-errors", + MetricDefinition(PrometheusMetricType::counter, + "Number of client packets that could not be parsed")}, + {"concurrent-queries", + MetricDefinition(PrometheusMetricType::gauge, + "Number of MThreads currently running")}, + {"cpu-msec-thread-0", + MetricDefinition(PrometheusMetricType::counter, + "Number of milliseconds spent in thread n")}, + {"dlg-only-drops", + MetricDefinition(PrometheusMetricType::counter, + "Number of records dropped because of `setting-delegation-only` setting")}, + + {"dnssec-authentic-data-queries", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries received with the AD bit set")}, + {"dnssec-check-disabled-queries", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries received with the CD bit set")}, + {"dnssec-queries", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries received with the DO bit set")}, + {"dnssec-result-bogus", + MetricDefinition(PrometheusMetricType::counter, + "Number of DNSSEC validations that had the Bogus state")}, + {"dnssec-result-indeterminate", + MetricDefinition(PrometheusMetricType::counter, + "Number of DNSSEC validations that had the Indeterminate state")}, + {"dnssec-result-insecure", + MetricDefinition(PrometheusMetricType::counter, + "Number of DNSSEC validations that had the Insecure state")}, + {"dnssec-result-nta", + MetricDefinition(PrometheusMetricType::counter, + "Number of DNSSEC validations that had the (negative trust anchor) state")}, + {"dnssec-result-secure", + MetricDefinition(PrometheusMetricType::counter, + "Number of DNSSEC validations that had the Secure state")}, + + {"dnssec-validations", + MetricDefinition(PrometheusMetricType::counter, + "Number of DNSSEC validations performed")}, + {"dont-outqueries", + MetricDefinition(PrometheusMetricType::counter, + "Number of outgoing queries dropped because of `setting-dont-query` setting")}, + {"qname-min-fallback-success", + MetricDefinition(PrometheusMetricType::counter, + "Number of successful queries due to fallback mechanism within 'qname-minimization' setting")}, + {"ecs-queries", + MetricDefinition(PrometheusMetricType::counter, + "Number of outgoing queries adorned with an EDNS Client Subnet option")}, + {"ecs-responses", + MetricDefinition(PrometheusMetricType::counter, + "Number of responses received from authoritative servers with an EDNS Client Subnet option we used")}, + {"edns-ping-matches", + MetricDefinition(PrometheusMetricType::counter, + "Number of servers that sent a valid EDNS PING response")}, + {"edns-ping-mismatches", + MetricDefinition(PrometheusMetricType::counter, + "Number of servers that sent an invalid EDN PING response")}, + {"failed-host-entries", + MetricDefinition(PrometheusMetricType::counter, + "Number of servers that failed to resolve")}, + {"ignored-packets", + MetricDefinition(PrometheusMetricType::counter, + "Number of non-query packets received on server sockets that should only get query packets")}, + {"ipv6-outqueries", + MetricDefinition(PrometheusMetricType::counter, + "Number of outgoing queries over IPv6")}, + {"ipv6-questions", + MetricDefinition(PrometheusMetricType::counter, + "Number of end-user initiated queries with the RD bit set, received over IPv6 UDP")}, + {"malloc-bytes", + MetricDefinition(PrometheusMetricType::counter, + "Number of bytes allocated by the process (broken, always returns 0)")}, + {"max-cache-entries", + MetricDefinition(PrometheusMetricType::gauge, + "Currently configured maximum number of cache entries")}, + {"max-packetcache-entries", + MetricDefinition(PrometheusMetricType::gauge, + "Currently configured maximum number of packet cache entries")}, + {"max-mthread-stack", + MetricDefinition(PrometheusMetricType::gauge, + "Maximum amount of thread stack ever used")}, + + {"negcache-entries", + MetricDefinition(PrometheusMetricType::gauge, + "Number of entries in the negative answer cache")}, + {"no-packet-error", + MetricDefinition(PrometheusMetricType::counter, + "Number of erroneous received packets")}, + {"nod-lookups-dropped-oversize", + MetricDefinition(PrometheusMetricType::counter, + "Number of NOD lookups dropped because they would exceed the maximum name length")}, + {"noedns-outqueries", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries sent out without EDNS")}, + {"noerror-answers", + MetricDefinition(PrometheusMetricType::counter, + "Number of NOERROR answers since starting")}, + {"noping-outqueries", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries sent out without ENDS PING")}, + {"nsset-invalidations", + MetricDefinition(PrometheusMetricType::counter, + "Number of times an nsset was dropped because it no longer worked")}, + {"nsspeeds-entries", + MetricDefinition(PrometheusMetricType::gauge, + "Number of entries in the NS speeds map")}, + {"nxdomain-answers", + MetricDefinition(PrometheusMetricType::counter, + "Number of NXDOMAIN answers since starting")}, + {"outgoing-timeouts", + MetricDefinition(PrometheusMetricType::counter, + "Number of timeouts on outgoing UDP queries since starting")}, + {"outgoing4-timeouts", + MetricDefinition(PrometheusMetricType::counter, + "Number of timeouts on outgoing UDP IPv4 queries since starting")}, + {"outgoing6-timeouts", + MetricDefinition(PrometheusMetricType::counter, + "Number of timeouts on outgoing UDP IPv6 queries since starting")}, + {"over-capacity-drops", + MetricDefinition(PrometheusMetricType::counter, + "Number of questions dropped because over maximum concurrent query limit")}, + {"packetcache-bytes", + MetricDefinition(PrometheusMetricType::gauge, + "Size of the packet cache in bytes")}, + {"packetcache-entries", + MetricDefinition(PrometheusMetricType::gauge, + "Number of packet cache entries")}, + {"packetcache-hits", + MetricDefinition(PrometheusMetricType::counter, + "Number of packet cache hits")}, + {"packetcache-misses", + MetricDefinition(PrometheusMetricType::counter, + "Number of packet cache misses")}, + + {"policy-drops", + MetricDefinition(PrometheusMetricType::counter, + "Number of packets dropped because of (Lua) policy decision")}, + {"policy-result-noaction", + MetricDefinition(PrometheusMetricType::counter, + "Number of packets that were not acted upon by the RPZ/filter engine")}, + {"policy-result-drop", + MetricDefinition(PrometheusMetricType::counter, + "Number of packets that were dropped by the RPZ/filter engine")}, + {"policy-result-nxdomain", + MetricDefinition(PrometheusMetricType::counter, + "Number of packets that were replied to with NXDOMAIN by the RPZ/filter engine")}, + {"policy-result-nodata", + MetricDefinition(PrometheusMetricType::counter, + "Number of packets that were replied to with no data by the RPZ/filter engine")}, + {"policy-result-truncate", + MetricDefinition(PrometheusMetricType::counter, + "Number of packets that were were forced to TCP by the RPZ/filter engine")}, + {"policy-result-custom", + MetricDefinition(PrometheusMetricType::counter, + "Number of packets that were sent a custom answer by the RPZ/filter engine")}, + + {"qa-latency", + MetricDefinition(PrometheusMetricType::gauge, + "Shows the current latency average, in microseconds, exponentially weighted over past 'latency-statistic-size' packets")}, + {"query-pipe-full-drops", + MetricDefinition(PrometheusMetricType::counter, + "Number of questions dropped because the query distribution pipe was full")}, + {"questions", + MetricDefinition(PrometheusMetricType::counter, + "Counts all end-user initiated queries with the RD bit set")}, + {"rebalanced-queries", + MetricDefinition(PrometheusMetricType::counter, + "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", + MetricDefinition(PrometheusMetricType::counter, + "Number of queries that could not be performed because of resource limits")}, + {"security-status", + MetricDefinition(PrometheusMetricType::gauge, + "security status based on `securitypolling`")}, + {"server-parse-errors", + MetricDefinition(PrometheusMetricType::counter, + "Number of server replied packets that could not be parsed")}, + {"servfail-answers", + MetricDefinition(PrometheusMetricType::counter, + "Number of SERVFAIL answers since starting")}, + {"spoof-prevents", + MetricDefinition(PrometheusMetricType::counter, + "Number of times PowerDNS considered itself spoofed, and dropped the data")}, + {"sys-msec", + MetricDefinition(PrometheusMetricType::counter, + "Number of CPU milliseconds spent in 'system' mode")}, + {"tcp-client-overflow", + MetricDefinition(PrometheusMetricType::counter, + "Number of times an IP address was denied TCP access because it already had too many connections")}, + {"tcp-clients", + MetricDefinition(PrometheusMetricType::gauge, + "Number of currently active TCP/IP clients")}, + {"tcp-outqueries", + MetricDefinition(PrometheusMetricType::counter, + "Number of outgoing TCP queries since starting")}, + {"tcp-questions", + MetricDefinition(PrometheusMetricType::counter, + "Number of all incoming TCP queries since starting")}, + {"throttle-entries", + MetricDefinition(PrometheusMetricType::gauge, + "Number of of entries in the throttle map")}, + {"throttled-out", + MetricDefinition(PrometheusMetricType::counter, + "Number of throttled outgoing UDP queries since starting")}, + {"throttled-outqueries", + MetricDefinition(PrometheusMetricType::counter, + "Number of throttled outgoing UDP queries since starting")}, + {"too-old-drops", + MetricDefinition(PrometheusMetricType::counter, + "Number of questions dropped that were too old")}, + {"truncated-drops", + MetricDefinition(PrometheusMetricType::counter, + "Number of questions dropped because they were larger than 512 bytes")}, + {"empty-queries", + MetricDefinition(PrometheusMetricType::counter, + "Questions dropped because they had a QD count of 0")}, + {"unauthorized-tcp", + MetricDefinition(PrometheusMetricType::counter, + "Number of TCP questions denied because of allow-from restrictions")}, + {"unauthorized-udp", + MetricDefinition(PrometheusMetricType::counter, + "Number of UDP questions denied because of allow-from restrictions")}, + {"unexpected-packets", + MetricDefinition(PrometheusMetricType::counter, + "Number of answers from remote servers that were unexpected (might point to spoofing)")}, + {"unreachables", + MetricDefinition(PrometheusMetricType::counter, + "Number of times nameservers were unreachable since starting")}, + {"uptime", + MetricDefinition(PrometheusMetricType::counter, + "Number of seconds process has been running")}, + {"user-msec", + MetricDefinition(PrometheusMetricType::counter, + "Number of CPU milliseconds spent in 'user' mode")}, + {"variable-responses", + MetricDefinition(PrometheusMetricType::counter, + "Number of responses that were marked as 'variable'")}, + + {"x-our-latency", + MetricDefinition(PrometheusMetricType::gauge, + "Shows the averaged time spent within PowerDNS, in microseconds, exponentially weighted over past 'latency-statistic-size' packets")}, + {"x-ourtime0-1", + MetricDefinition(PrometheusMetricType::counter, + "Counts responses where between 0 and 1 milliseconds was spent within the Recursor")}, + {"x-ourtime1-2", + MetricDefinition(PrometheusMetricType::counter, + "Counts responses where between 1 and 2 milliseconds was spent within the Recursor")}, + {"x-ourtime2-4", + MetricDefinition(PrometheusMetricType::counter, + "Counts responses where between 2 and 4 milliseconds was spent within the Recursor")}, + {"x-ourtime4-8", + MetricDefinition(PrometheusMetricType::counter, + "Counts responses where between 4 and 8 milliseconds was spent within the Recursor")}, + {"x-ourtime8-16", + MetricDefinition(PrometheusMetricType::counter, + "Counts responses where between 8 and 16 milliseconds was spent within the Recursor")}, + {"x-ourtime16-32", + MetricDefinition(PrometheusMetricType::counter, + "Counts responses where between 16 and 32 milliseconds was spent within the Recursor")}, + {"x-ourtime-slow", + MetricDefinition(PrometheusMetricType::counter, + "Counts responses where more than 32 milliseconds was spent within the Recursor")}, + + {"fd-usage", + MetricDefinition(PrometheusMetricType::gauge, + "Number of open file descriptors")}, + {"real-memory-usage", + MetricDefinition(PrometheusMetricType::gauge, + "Number of bytes real process memory usage")}, + {"udp-in-errors", + MetricDefinition(PrometheusMetricType::counter, + "From /proc/net/snmp InErrors")}, + {"udp-noport-errors", + MetricDefinition(PrometheusMetricType::counter, + "From /proc/net/snmp NoPorts")}, + {"udp-recvbuf-errors", + MetricDefinition(PrometheusMetricType::counter, + "From /proc/net/snmp RcvbufErrors")}, + {"udp-sndbuf-errors", + MetricDefinition(PrometheusMetricType::counter, + "From /proc/net/snmp SndbufErrors")}, + + {"cpu-iowait", + MetricDefinition(PrometheusMetricType::counter, + "Time spent waiting for I/O to complete by the whole system, in units of USER_HZ")}, + {"cpu-steal", + MetricDefinition(PrometheusMetricType::counter, + "Stolen time, which is the time spent by the whole system in other operating systems when running in a virtualized environment, in units of USER_HZ")}, + + { "dnssec-result-bogus-invalid-denial", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because a valid denial of existence proof could not be found")}, + + { "dnssec-result-bogus-invalid-dnskey-protocol", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because all DNSKEYs had invalid protocols")}, + + { "dnssec-result-bogus-missing-negative-indication", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because a NODATA or NXDOMAIN answer lacked the required SOA and/or NSEC(3) records")}, + + { "dnssec-result-bogus-no-rrsig", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because required RRSIG records were not present in an answer")}, + + { "dnssec-result-bogus-no-valid-dnskey", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because a valid DNSKEY could not be found")}, + + { "dnssec-result-bogus-no-valid-rrsig", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because only invalid RRSIG records were present in an answer")}, + + { "dnssec-result-bogus-no-zone-key-bit-set", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because no DNSKEY with the Zone Key bit set was found")}, + + { "dnssec-result-bogus-revoked-dnskey", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because all DNSKEYs were revoked")}, + + { "dnssec-result-bogus-self-signed-ds", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because a DS record was signed by itself")}, + + { "dnssec-result-bogus-signature-expired", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because the signature expired time in the RRSIG was in the past")}, + + { "dnssec-result-bogus-signature-not-yet-valid", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because the signature inception time in the RRSIG was not yet valid")}, + + { "dnssec-result-bogus-unable-to-get-dnskeys", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because a valid DNSKEY could not be retrieved")}, + + { "dnssec-result-bogus-unable-to-get-dss", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because a valid DS could not be retrieved")}, + { "dnssec-result-bogus-unsupported-dnskey-algo", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because a DNSKEY RRset contained only unsupported DNSSEC algorithms")}, + + { "dnssec-result-bogus-unsupported-ds-digest-type", + MetricDefinition(PrometheusMetricType::counter, + "number of DNSSEC validations that had the Bogus state because a DS RRset contained only unsupported digest types")}, + + { "proxy-protocol-invalid", + MetricDefinition(PrometheusMetricType::counter, + "invalid proxy-protocol headers received")}, + + { "record-cache-acquired", + MetricDefinition(PrometheusMetricType::counter, + "number of record cache lock acquisitions")}, + + { "record-cache-contended", + MetricDefinition(PrometheusMetricType::counter, + "number of contented record cache lock acquisitions")}, + + { "taskqueue-expired", + MetricDefinition(PrometheusMetricType::counter, + "number of tasks expired before they could be run")}, + + { "taskqueue-pushed", + MetricDefinition(PrometheusMetricType::counter, + "number of tasks pushed to the taskqueues")}, + + { "taskqueue-size", + MetricDefinition(PrometheusMetricType::gauge, + "number of tasks currenlty in the taskqueue")}, + +}; + +#define CHECK_PROMETHEUS_METRICS 0 + +#if CHECK_PROMETHEUS_METRICS +static void validatePrometheusMetrics() +{ + MetricDefinitionStorage s_metricDefinitions; + + auto varmap = getAllStatsMap(StatComponent::API); + for (const auto& tup : varmap) { + std::string metricName = tup.first; + if (metricName.find("cpu-msec-") == 0) { + continue; + } + MetricDefinition metricDetails; + + if (!s_metricDefinitions.getMetricDetails(metricName, metricDetails)) { + g_log<(fdm, arg()["webserver-address"], arg().asNum("webserver-port")); d_ws->setApiKey(arg()["api-key"]);