{ "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") },
+ { "tcp-listen-overflows", MetricDefinition(PrometheusMetricType::counter, "From /proc/net/netstat ListenOverflows") },
{ "proxy-protocol-invalid", MetricDefinition(PrometheusMetricType::counter, "Number of queries dropped because of an invalid Proxy Protocol header") },
};
{"udp-noport-errors", boost::bind(udpErrorStats, "udp-noport-errors")},
{"udp-recvbuf-errors", boost::bind(udpErrorStats, "udp-recvbuf-errors")},
{"udp-sndbuf-errors", boost::bind(udpErrorStats, "udp-sndbuf-errors")},
+ {"tcp-listen-overflows", std::bind(tcpErrorStats, "ListenOverflows")},
{"noncompliant-queries", &nonCompliantQueries},
{"noncompliant-responses", &nonCompliantResponses},
{"proxy-protocol-invalid", &proxyProtocolInvalid},
------------------
Number of servfail answers received from backends.
+tcp-listen-overflows
+--------------------
+.. versionadded:: 1.6.0
+
+From /proc/net/netstat ListenOverflows.
+
trunc-failures
--------------
Number of errors encountered while truncating an answer.
return 0;
}
+uint64_t tcpErrorStats(const std::string& str)
+{
+#ifdef __linux__
+ ifstream ifs("/proc/net/netstat");
+ if (!ifs) {
+ return 0;
+ }
+
+ string line;
+ vector<string> parts;
+ while (getline(ifs,line)) {
+ if (line.size() > 9 && boost::starts_with(line, "TcpExt: ") && isdigit(line.at(8))) {
+ stringtok(parts, line, " \n\t\r");
+
+ if (parts.size() < 21) {
+ break;
+ }
+
+ return std::stoull(parts.at(20));
+ }
+ }
+#endif
+ return 0;
+}
+
uint64_t getCPUIOWait(const std::string& str)
{
#ifdef __linux__
bool setPipeBufferSize(int fd, size_t size);
uint64_t udpErrorStats(const std::string& str);
+uint64_t tcpErrorStats(const std::string& str);
uint64_t getRealMemoryUsage(const std::string&);
uint64_t getSpecialMemoryUsage(const std::string&);
uint64_t getOpenFileDescriptors(const std::string&);
'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',
'udp-in-errors', 'udp-noport-errors', 'udp-recvbuf-errors', 'udp-sndbuf-errors',
- 'doh-query-pipe-full', 'doh-response-pipe-full', 'proxy-protocol-invalid']
+ 'doh-query-pipe-full', 'doh-response-pipe-full', 'proxy-protocol-invalid', 'tcp-listen-overflows']
for key in expected:
self.assertIn(key, values)