]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add missing DoQ latency metrics 13472/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 9 Nov 2023 08:06:30 +0000 (09:06 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 9 Nov 2023 08:09:51 +0000 (09:09 +0100)
.github/actions/spell-check/expect.txt
pdns/dnsdist-web.cc
pdns/dnsdist.cc
pdns/dnsdistdist/dnsdist-metrics.cc
pdns/dnsdistdist/dnsdist-metrics.hh
pdns/dnsdistdist/docs/statistics.rst
pdns/dnsdistdist/html/index.html
pdns/dnsdistdist/html/local.js
regression-tests.dnsdist/test_API.py

index 99ca1cfd394a4951b989374c5fc1b430cdbf8b91..d11470aafe552a3b4dbd1832f425767d72ea586e 100644 (file)
@@ -346,6 +346,7 @@ domainname
 domainrelatedobject
 Donatas
 dontcare
+doq
 downsides
 downstreams
 dport
index 69f543621e5062edbc0445e6d59c83918d05379a..c4cf702f504c7d9ca04b0bbd3f45423e90b631f2 100644 (file)
@@ -176,6 +176,10 @@ std::map<std::string, MetricDefinition> MetricDefinitionStorage::metrics{
   { "latency-doh-avg1000",                   MetricDefinition(PrometheusMetricType::gauge,   "Average response latency, in microseconds, of the last 1000 packets received over DoH")},
   { "latency-doh-avg10000",                  MetricDefinition(PrometheusMetricType::gauge,   "Average response latency, in microseconds, of the last 10000 packets received over DoH")},
   { "latency-doh-avg1000000",                MetricDefinition(PrometheusMetricType::gauge,   "Average response latency, in microseconds, of the last 1000000 packets received over DoH")},
+  { "latency-doq-avg100",                    MetricDefinition(PrometheusMetricType::gauge,   "Average response latency, in microseconds, of the last 100 packets received over DoQ")},
+  { "latency-doq-avg1000",                   MetricDefinition(PrometheusMetricType::gauge,   "Average response latency, in microseconds, of the last 1000 packets received over DoQ")},
+  { "latency-doq-avg10000",                  MetricDefinition(PrometheusMetricType::gauge,   "Average response latency, in microseconds, of the last 10000 packets received over DoQ")},
+  { "latency-doq-avg1000000",                MetricDefinition(PrometheusMetricType::gauge,   "Average response latency, in microseconds, of the last 1000000 packets received over DoQ")},
   { "uptime",                                MetricDefinition(PrometheusMetricType::gauge,   "Uptime of the dnsdist process in seconds")},
   { "real-memory-usage",                     MetricDefinition(PrometheusMetricType::gauge,   "Current memory usage in bytes")},
   { "noncompliant-queries",                  MetricDefinition(PrometheusMetricType::counter, "Number of queries dropped as non-compliant")},
index dc490d2e220828c0d76ee443f20c2d1c7fcfa441..34d0f71f607e609138acda57bdd80f00f2da1c28 100644 (file)
@@ -317,6 +317,12 @@ static void doLatencyStats(dnsdist::Protocol protocol, double udiff)
     doAvg(dnsdist::metrics::g_stats.latencyDoHAvg10000,   udiff,   10000);
     doAvg(dnsdist::metrics::g_stats.latencyDoHAvg1000000, udiff, 1000000);
   }
+  else if (protocol == dnsdist::Protocol::DoQ) {
+    doAvg(dnsdist::metrics::g_stats.latencyDoQAvg100,     udiff,     100);
+    doAvg(dnsdist::metrics::g_stats.latencyDoQAvg1000,    udiff,    1000);
+    doAvg(dnsdist::metrics::g_stats.latencyDoQAvg10000,   udiff,   10000);
+    doAvg(dnsdist::metrics::g_stats.latencyDoQAvg1000000, udiff, 1000000);
+  }
 }
 
 bool responseContentMatches(const PacketBuffer& response, const DNSName& qname, const uint16_t qtype, const uint16_t qclass, const std::shared_ptr<DownstreamState>& remote, unsigned int& qnameWireLength)
index 6497a455d338d92e548ea823a392a5d0d2666043..adf961eb8b4b30e0cbe3ce1bcb7c10bbeb62974e 100644 (file)
@@ -110,6 +110,10 @@ Stats::Stats() :
     {"latency-doh-avg1000", &latencyDoHAvg1000},
     {"latency-doh-avg10000", &latencyDoHAvg10000},
     {"latency-doh-avg1000000", &latencyDoHAvg1000000},
+    {"latency-doq-avg100", &latencyDoQAvg100},
+    {"latency-doq-avg1000", &latencyDoQAvg1000},
+    {"latency-doq-avg10000", &latencyDoQAvg10000},
+    {"latency-doq-avg1000000", &latencyDoQAvg1000000},
     {"uptime", uptimeOfProcess},
     {"real-memory-usage", getRealMemoryUsage},
     {"special-memory-usage", getSpecialMemoryUsage},
index 37e75d1865a8635be8ec8416c792d797c83f87ee..264054f6728d24e0dd28610abef86b42a7a8b3f8 100644 (file)
@@ -84,6 +84,7 @@ struct Stats
   double latencyTCPAvg100{0}, latencyTCPAvg1000{0}, latencyTCPAvg10000{0}, latencyTCPAvg1000000{0};
   double latencyDoTAvg100{0}, latencyDoTAvg1000{0}, latencyDoTAvg10000{0}, latencyDoTAvg1000000{0};
   double latencyDoHAvg100{0}, latencyDoHAvg1000{0}, latencyDoHAvg10000{0}, latencyDoHAvg1000000{0};
+  double latencyDoQAvg100{0}, latencyDoQAvg1000{0}, latencyDoQAvg10000{0}, latencyDoQAvg1000000{0};
   using statfunction_t = std::function<uint64_t(const std::string&)>;
   using entry_t = std::variant<stat_t*, pdns::stat_t_trait<double>*, double*, statfunction_t>;
   struct EntryPair
index 0d5b5ed1c52f2991011c126c099baba0a7e8b553..664c38df56ff11ba66d2e0b7a43c2539335fc58f 100644 (file)
@@ -68,6 +68,10 @@ doh-response-pipe-full
 ----------------------
 Number of responses dropped because the internal DoH pipe was full.
 
+doq-response-pipe-full
+----------------------
+Number of responses dropped because the internal DoQ pipe was full.
+
 downstream-send-errors
 ----------------------
 Number of errors when sending a query to a backend.
@@ -145,6 +149,22 @@ latency-doh-avg1000000
 ----------------------
 Average response latency, in microseconds, of the last 1000000 packets received over DoH.
 
+latency-doq-avg100
+------------------
+Average response latency, in microseconds, of the last 100 packets received over DoQ.
+
+latency-doq-avg1000
+-------------------
+Average response latency, in microseconds, of the last 1000 packets received over DoQ.
+
+latency-doq-avg10000
+--------------------
+Average response latency, in microseconds, of the last 10000 packets received over DoQ.
+
+latency-doq-avg1000000
+----------------------
+Average response latency, in microseconds, of the last 1000000 packets received over DoQ.
+
 latency-dot-avg100
 ------------------
 Average response latency, in microseconds, of the last 100 packets received over DoT.
index 4f3bc695e95e9f5948b801197e2a4cdc242c5b7a..29571e9067d25e2571f06ca71e0f70651387d1f6 100644 (file)
@@ -50,7 +50,7 @@
     </tr></table>
     <p>
       Uptime: <span id="uptime"></span>, Number of queries: <span id="questions"></span> (<span id="qps"></span> qps), ACL drops: <span id="acl-drops"></span>, Dynamic drops: <span id="dyn-drops"></span>, Rule drops: <span id="rule-drops"></span><br/>
-      Average response time: UDP <span id="latency"></span> ms, TCP <span id="latency-tcp"></span> ms, DoT <span id="latency-dot"></span> ms, DoH <span id="latency-doh"></span> ms <br/>
+      Average response time: UDP <span id="latency"></span> ms, TCP <span id="latency-tcp"></span> ms, DoT <span id="latency-dot"></span> ms, DoH <span id="latency-doh"></span> ms, DoQ <span id="latency-doq"></span> ms <br/>
       CPU Usage: <span id="cpu"></span>%, Cache hitrate: <span id="phitrate"></span>%, Server selection policy: <span id="server-policy"></span><br/>
       Listening on: <span id="local"></span>, ACL: <span id="acl"></span>
     </p>
index 1db6999dbaa0a0b87d4ab86fda4c58f2f9caa6de..4f9f125509934fd5333d356510eb3eb63a21a853 100644 (file)
@@ -154,6 +154,7 @@ $(document).ready(function() {
                 $("#latency-tcp").text((data["latency-tcp-avg10000"]/1000.0).toFixed(2));
                 $("#latency-dot").text((data["latency-dot-avg10000"]/1000.0).toFixed(2));
                 $("#latency-doh").text((data["latency-doh-avg10000"]/1000.0).toFixed(2));
+                $("#latency-doq").text((data["latency-doq-avg10000"]/1000.0).toFixed(2));
                 if(!gdata["cpu-sys-msec"]) 
                     gdata=data;
 
index d36da2e76e4609ac6d84db2f64a3175bfe98e610..322b63bbd5fa876aec2e2d00dc209db9219396bc 100644 (file)
@@ -32,7 +32,8 @@ class APITestsBase(DNSDistTest):
                         'latency-avg10000', 'latency-avg1000000', 'latency-tcp-avg100', 'latency-tcp-avg1000',
                         'latency-tcp-avg10000', 'latency-tcp-avg1000000', 'latency-dot-avg100', 'latency-dot-avg1000',
                         'latency-dot-avg10000', 'latency-dot-avg1000000', 'latency-doh-avg100', 'latency-doh-avg1000',
-                        'latency-doh-avg10000', 'latency-doh-avg1000000', 'uptime', 'real-memory-usage', 'noncompliant-queries',
+                        'latency-doh-avg10000', 'latency-doh-avg1000000', 'latency-doq-avg100', 'latency-doq-avg1000',
+                        'latency-doq-avg10000', 'latency-doq-avg1000000','uptime', 'real-memory-usage', 'noncompliant-queries',
                         'noncompliant-responses', 'rdqueries', 'empty-queries', 'cache-hits',
                         'cache-misses', 'cpu-iowait', 'cpu-steal', 'cpu-sys-msec', 'cpu-user-msec', 'fd-usage', 'dyn-blocked',
                         'dyn-block-nmg-size', 'rule-servfail', 'rule-truncated', 'security-status',