Add tcp ListenOverflows to FreeBSD plugin
Vladimir Kobal committed
Oct 18, 2017 at 12:53 UTC
5f262b15b329abf9b92d95caf4ccc03485bc993d
2 files changed
+44
-3
conf.d/health.d/tcp_listen.conf
+1
-1
@@ -3,7 +3,7 @@
3
4
alarm: 1m_ipv4_tcp_listen_overflows
5
on: ipv4.tcplistenissues
6
- os: linux
6
+ os: linux freebsd
7
hosts: *
8
lookup: sum -60s unaligned absolute of ListenOverflows
9
units: overflows
src/freebsd_sysctl.c
+43
-2
@@ -1751,7 +1751,8 @@ int do_net_inet_tcp_states(int update_every, usec_t dt) {
1751
1752
int do_net_inet_tcp_stats(int update_every, usec_t dt) {
1753
(void)dt;
1754
- static int do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1, do_tcpext_connaborts = -1, do_tcpext_ofo = -1, do_tcpext_syncookies = -1, do_ecn = -1;
1754
+ static int do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1, do_tcpext_connaborts = -1, do_tcpext_ofo = -1,
1755
+ do_tcpext_syncookies = -1, do_tcpext_listen = -1, do_ecn = -1;
1756
1757
if (unlikely(do_tcp_packets == -1)) {
1758
do_tcp_packets = config_get_boolean("plugin:freebsd:net.inet.tcp.stats", "ipv4 TCP packets", 1);
@@ -1763,12 +1764,15 @@ int do_net_inet_tcp_stats(int update_every, usec_t dt) {
1764
CONFIG_BOOLEAN_AUTO);
1765
do_tcpext_syncookies = config_get_boolean_ondemand("plugin:freebsd:net.inet.tcp.stats", "TCP SYN cookies",
1766
CONFIG_BOOLEAN_AUTO);
1767
+ do_tcpext_listen = config_get_boolean_ondemand("plugin:freebsd:net.inet.tcp.stats", "TCP listen issues",
1768
+ CONFIG_BOOLEAN_AUTO);
1769
do_ecn = config_get_boolean_ondemand("plugin:freebsd:net.inet.tcp.stats", "ECN packets",
1770
CONFIG_BOOLEAN_AUTO);
1771
}
1772
1773
// see http://net-snmp.sourceforge.net/docs/mibs/tcp.html
1771
- if (likely(do_tcp_packets || do_tcp_errors || do_tcp_handshake || do_tcpext_connaborts || do_tcpext_ofo || do_tcpext_syncookies || do_ecn)) {
1774
+ if (likely(do_tcp_packets || do_tcp_errors || do_tcp_handshake || do_tcpext_connaborts || do_tcpext_ofo ||
1775
+ do_tcpext_syncookies || do_tcpext_listen || do_ecn)) {
1776
static int mib[4] = {0, 0, 0, 0};
1777
struct tcpstat tcpstat;
1778
@@ -1785,6 +1789,8 @@ int do_net_inet_tcp_stats(int update_every, usec_t dt) {
1789
error("DISABLED: ipv4.tcpofo chart");
1790
do_tcpext_syncookies = 0;
1791
error("DISABLED: ipv4.tcpsyncookies chart");
1792
+ do_tcpext_listen = 0;
1793
+ error("DISABLED: ipv4.tcplistenissues chart");
1794
do_ecn = 0;
1795
error("DISABLED: ipv4.ecnpkts chart");
1796
error("DISABLED: net.inet.tcp.stats module");
@@ -2011,6 +2017,41 @@ int do_net_inet_tcp_stats(int update_every, usec_t dt) {
2017
rrddim_set_by_pointer(st, rd_failed, tcpstat.tcps_sc_zonefail);
2018
rrdset_done(st);
2019
}
2020
+
2021
+ // --------------------------------------------------------------------
2022
+
2023
+ if(do_tcpext_listen == CONFIG_BOOLEAN_YES || (do_tcpext_listen == CONFIG_BOOLEAN_AUTO && tcpstat.tcps_listendrop)) {
2024
+ do_tcpext_listen = CONFIG_BOOLEAN_YES;
2025
+
2026
+ static RRDSET *st_listen = NULL;
2027
+ static RRDDIM *rd_overflows = NULL;
2028
+
2029
+ if(unlikely(!st_listen)) {
2030
+
2031
+ st_listen = rrdset_create_localhost(
2032
+ "ipv4",
2033
+ "tcplistenissues",
2034
+ NULL,
2035
+ "tcp",
2036
+ NULL,
2037
+ "TCP Listen Socket Issues",
2038
+ "packets/s",
2039
+ "freebsd",
2040
+ "net.inet.tcp.stats",
2041
+ 3015,
2042
+ update_every,
2043
+ RRDSET_TYPE_LINE
2044
+ );
2045
+
2046
+ rd_overflows = rrddim_add(st_listen, "ListenOverflows", "overflows", 1, 1, RRD_ALGORITHM_INCREMENTAL);
2047
+ }
2048
+ else
2049
+ rrdset_next(st_listen);
2050
+
2051
+ rrddim_set_by_pointer(st_listen, rd_overflows, tcpstat.tcps_listendrop);
2052
+
2053
+ rrdset_done(st_listen);
2054
+ }
2055
2056
// --------------------------------------------------------------------
2057