Separate net.inet.tcp.stats module
Vladimir Kobal committed
Mar 14, 2017 at 14:31 UTC
c74bc1c7b31358e347cf76d3bb322e6470cc840e
3 files changed
+306
-188
src/freebsd_sysctl.c
+302
-188
@@ -1231,7 +1231,7 @@ int do_net_isr(int update_every, usec_t dt) {
1231
static int do_netisr = -1, do_netisr_per_core = -1;
1232
1233
if (unlikely(do_netisr == -1)) {
1234
- do_netisr = config_get_boolean("plugin:freebsd:sysctl", "netisr", 1);
1234
+ do_netisr = config_get_boolean("plugin:freebsd:sysctl", "netisr", 1);
1235
do_netisr_per_core = config_get_boolean("plugin:freebsd:sysctl", "netisr per core", 1);
1236
}
1237
@@ -1434,14 +1434,313 @@ int do_net_inet_tcp_states(int update_every, usec_t dt) {
1434
return 0;
1435
}
1436
1437
+// --------------------------------------------------------------------------------------------------------------------
1438
+// net.inet.tcp.stats
1439
+
1440
+int do_net_inet_tcp_stats(int update_every, usec_t dt) {
1441
+ 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;
1442
+
1443
+ if (unlikely(do_tcp_packets == -1)) {
1444
+ do_tcp_packets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 TCP packets", 1);
1445
+ do_tcp_errors = config_get_boolean("plugin:freebsd:sysctl", "ipv4 TCP errors", 1);
1446
+ do_tcp_handshake = config_get_boolean("plugin:freebsd:sysctl", "ipv4 TCP handshake issues", 1);
1447
+ do_tcpext_connaborts = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP connection aborts",
1448
+ CONFIG_BOOLEAN_AUTO);
1449
+ do_tcpext_ofo = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP out-of-order queue",
1450
+ CONFIG_BOOLEAN_AUTO);
1451
+ do_tcpext_syncookies = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP SYN cookies",
1452
+ CONFIG_BOOLEAN_AUTO);
1453
+ do_ecn = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ECN packets",
1454
+ CONFIG_BOOLEAN_AUTO);
1455
+ }
1456
+
1457
+ static int mib[4] = {0, 0, 0, 0};
1458
+ struct tcpstat tcpstat;
1459
+
1460
+ // see http://net-snmp.sourceforge.net/docs/mibs/tcp.html
1461
+ if (likely(do_tcp_packets || do_tcp_errors || do_tcp_handshake || do_tcpext_connaborts || do_tcpext_ofo || do_tcpext_syncookies || do_ecn)) {
1462
+ if (unlikely(GETSYSCTL_SIMPLE("net.inet.tcp.stats", mib, tcpstat))) {
1463
+ do_tcp_packets = 0;
1464
+ error("DISABLED: ipv4.tcppackets chart");
1465
+ do_tcp_errors = 0;
1466
+ error("DISABLED: ipv4.tcperrors chart");
1467
+ do_tcp_handshake = 0;
1468
+ error("DISABLED: ipv4.tcphandshake chart");
1469
+ do_tcpext_connaborts = 0;
1470
+ error("DISABLED: ipv4.tcpconnaborts chart");
1471
+ do_tcpext_ofo = 0;
1472
+ error("DISABLED: ipv4.tcpofo chart");
1473
+ do_tcpext_syncookies = 0;
1474
+ error("DISABLED: ipv4.tcpsyncookies chart");
1475
+ do_ecn = 0;
1476
+ error("DISABLED: ipv4.ecnpkts chart");
1477
+ error("DISABLED: net.inet.tcp.stats module");
1478
+ return 1;
1479
+ } else {
1480
+
1481
+ // --------------------------------------------------------------------
1482
+
1483
+ if (likely(do_tcp_packets)) {
1484
+ static RRDSET *st_packets = NULL;
1485
+ static RRDDIM *rd_in_segs = NULL, *rd_out_segs = NULL;
1486
+
1487
+ if (unlikely(!st_packets)) {
1488
+ st_packets = rrdset_create_localhost("ipv4",
1489
+ "tcppackets",
1490
+ NULL,
1491
+ "tcp",
1492
+ NULL,
1493
+ "IPv4 TCP Packets",
1494
+ "packets/s",
1495
+ 2600,
1496
+ update_every,
1497
+ RRDSET_TYPE_LINE
1498
+ );
1499
+
1500
+ rd_in_segs = rrddim_add(st_packets, "InSegs", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1501
+ rd_out_segs = rrddim_add(st_packets, "OutSegs", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
1502
+ } else
1503
+ rrdset_next(st_packets);
1504
+
1505
+ rrddim_set_by_pointer(st_packets, rd_in_segs, tcpstat.tcps_rcvtotal);
1506
+ rrddim_set_by_pointer(st_packets, rd_out_segs, tcpstat.tcps_sndtotal);
1507
+ rrdset_done(st_packets);
1508
+ }
1509
+
1510
+ // --------------------------------------------------------------------
1511
+
1512
+ if (likely(do_tcp_errors)) {
1513
+ static RRDSET *st_errors = NULL;
1514
+ static RRDDIM *rd_in_errs = NULL, *rd_in_csum_errs = NULL, *rd_retrans_segs = NULL;
1515
+
1516
+ if (unlikely(!st_errors)) {
1517
+ st_errors = rrdset_create_localhost("ipv4",
1518
+ "tcperrors",
1519
+ NULL,
1520
+ "tcp",
1521
+ NULL,
1522
+ "IPv4 TCP Errors",
1523
+ "packets/s",
1524
+ 2700,
1525
+ update_every,
1526
+ RRDSET_TYPE_LINE
1527
+ );
1528
+
1529
+ rrdset_flag_set(st_errors, RRDSET_FLAG_DETAIL);
1530
+
1531
+ rd_in_errs = rrddim_add(st_errors, "InErrs", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1532
+ rd_in_csum_errs = rrddim_add(st_errors, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1533
+ rd_retrans_segs = rrddim_add(st_errors, "RetransSegs", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1534
+ } else
1535
+ rrdset_next(st_errors);
1536
+
1537
+#if __FreeBSD__ >= 11
1538
+ rrddim_set_by_pointer(st_errors, rd_in_errs, tcpstat.tcps_rcvbadoff + tcpstat.tcps_rcvreassfull +
1539
+ tcpstat.tcps_rcvshort);
1540
+#else
1541
+ rrddim_set_by_pointer(st_errors, rd_in_errs, tcpstat.tcps_rcvbadoff + tcpstat.tcps_rcvshort);
1542
+#endif
1543
+ rrddim_set_by_pointer(st_errors, rd_in_csum_errs, tcpstat.tcps_rcvbadsum);
1544
+ rrddim_set_by_pointer(st_errors, rd_retrans_segs, tcpstat.tcps_sndrexmitpack);
1545
+ rrdset_done(st_errors);
1546
+ }
1547
+
1548
+ // --------------------------------------------------------------------
1549
+
1550
+ if (likely(do_tcp_handshake)) {
1551
+ static RRDSET *st_handshake = NULL;
1552
+ static RRDDIM *rd_estab_resets = NULL, *rd_active_opens = NULL, *rd_passive_opens = NULL,
1553
+ *rd_attempt_fails = NULL;
1554
+
1555
+ if (unlikely(!st_handshake)) {
1556
+ st_handshake = rrdset_create_localhost("ipv4",
1557
+ "tcphandshake",
1558
+ NULL,
1559
+ "tcp",
1560
+ NULL,
1561
+ "IPv4 TCP Handshake Issues",
1562
+ "events/s",
1563
+ 2900,
1564
+ update_every,
1565
+ RRDSET_TYPE_LINE
1566
+ );
1567
+
1568
+ rrdset_flag_set(st_handshake, RRDSET_FLAG_DETAIL);
1569
+
1570
+ rd_estab_resets = rrddim_add(st_handshake, "EstabResets", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1571
+ rd_active_opens = rrddim_add(st_handshake, "ActiveOpens", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1572
+ rd_passive_opens = rrddim_add(st_handshake, "PassiveOpens", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1573
+ rd_attempt_fails = rrddim_add(st_handshake, "AttemptFails", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1574
+ } else
1575
+ rrdset_next(st_handshake);
1576
+
1577
+ rrddim_set_by_pointer(st_handshake, rd_estab_resets, tcpstat.tcps_drops);
1578
+ rrddim_set_by_pointer(st_handshake, rd_active_opens, tcpstat.tcps_connattempt);
1579
+ rrddim_set_by_pointer(st_handshake, rd_passive_opens, tcpstat.tcps_accepts);
1580
+ rrddim_set_by_pointer(st_handshake, rd_attempt_fails, tcpstat.tcps_conndrops);
1581
+ rrdset_done(st_handshake);
1582
+ }
1583
+
1584
+ // --------------------------------------------------------------------
1585
+
1586
+ if (do_tcpext_connaborts == CONFIG_BOOLEAN_YES || (do_tcpext_connaborts == CONFIG_BOOLEAN_AUTO && (tcpstat.tcps_rcvpackafterwin || tcpstat.tcps_rcvafterclose || tcpstat.tcps_rcvmemdrop || tcpstat.tcps_persistdrop || tcpstat.tcps_finwait2_drops))) {
1587
+ do_tcpext_connaborts = CONFIG_BOOLEAN_YES;
1588
+
1589
+ static RRDSET *st_connaborts = NULL;
1590
+ static RRDDIM *rd_on_data = NULL, *rd_on_close = NULL, *rd_on_memory = NULL,
1591
+ *rd_on_timeout = NULL, *rd_on_linger = NULL;
1592
+
1593
+ if (unlikely(!st_connaborts)) {
1594
+ st_connaborts = rrdset_create_localhost("ipv4",
1595
+ "tcpconnaborts",
1596
+ NULL,
1597
+ "tcp",
1598
+ NULL,
1599
+ "TCP Connection Aborts",
1600
+ "connections/s",
1601
+ 3010,
1602
+ update_every,
1603
+ RRDSET_TYPE_LINE
1604
+ );
1605
+
1606
+ rd_on_data = rrddim_add(st_connaborts, "TCPAbortOnData", "baddata", 1, 1,
1607
+ RRD_ALGORITHM_INCREMENTAL);
1608
+ rd_on_close = rrddim_add(st_connaborts, "TCPAbortOnClose", "userclosed", 1, 1,
1609
+ RRD_ALGORITHM_INCREMENTAL);
1610
+ rd_on_memory = rrddim_add(st_connaborts, "TCPAbortOnMemory", "nomemory", 1, 1,
1611
+ RRD_ALGORITHM_INCREMENTAL);
1612
+ rd_on_timeout = rrddim_add(st_connaborts, "TCPAbortOnTimeout", "timeout", 1, 1,
1613
+ RRD_ALGORITHM_INCREMENTAL);
1614
+ rd_on_linger = rrddim_add(st_connaborts, "TCPAbortOnLinger", "linger", 1, 1,
1615
+ RRD_ALGORITHM_INCREMENTAL);
1616
+ }
1617
+ else rrdset_next(st_connaborts);
1618
+
1619
+ rrddim_set_by_pointer(st_connaborts, rd_on_data, tcpstat.tcps_rcvpackafterwin);
1620
+ rrddim_set_by_pointer(st_connaborts, rd_on_close, tcpstat.tcps_rcvafterclose);
1621
+ rrddim_set_by_pointer(st_connaborts, rd_on_memory, tcpstat.tcps_rcvmemdrop);
1622
+ rrddim_set_by_pointer(st_connaborts, rd_on_timeout, tcpstat.tcps_persistdrop);
1623
+ rrddim_set_by_pointer(st_connaborts, rd_on_linger, tcpstat.tcps_finwait2_drops);
1624
+ rrdset_done(st_connaborts);
1625
+ }
1626
+
1627
+ // --------------------------------------------------------------------
1628
+
1629
+ if (do_tcpext_ofo == CONFIG_BOOLEAN_YES || (do_tcpext_ofo == CONFIG_BOOLEAN_AUTO && tcpstat.tcps_rcvoopack)) {
1630
+ do_tcpext_ofo = CONFIG_BOOLEAN_YES;
1631
+
1632
+ static RRDSET *st_ofo_queue = NULL;
1633
+ static RRDDIM *rd_ofo_queue = NULL;
1634
+
1635
+ if (unlikely(!st_ofo_queue)) {
1636
+ st_ofo_queue = rrdset_create_localhost("ipv4",
1637
+ "tcpofo",
1638
+ NULL,
1639
+ "tcp",
1640
+ NULL,
1641
+ "TCP Out-Of-Order Queue",
1642
+ "packets/s",
1643
+ 3050,
1644
+ update_every,
1645
+ RRDSET_TYPE_LINE
1646
+ );
1647
+
1648
+ rd_ofo_queue = rrddim_add(st_ofo_queue, "TCPOFOQueue", "inqueue", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1649
+ }
1650
+ else rrdset_next(st_ofo_queue);
1651
+
1652
+ rrddim_set_by_pointer(st_ofo_queue, rd_ofo_queue, tcpstat.tcps_rcvoopack);
1653
+ rrdset_done(st_ofo_queue);
1654
+ }
1655
+
1656
+ // --------------------------------------------------------------------
1657
+
1658
+ if (do_tcpext_syncookies == CONFIG_BOOLEAN_YES || (do_tcpext_syncookies == CONFIG_BOOLEAN_AUTO && (tcpstat.tcps_sc_sendcookie || tcpstat.tcps_sc_recvcookie || tcpstat.tcps_sc_zonefail))) {
1659
+ do_tcpext_syncookies = CONFIG_BOOLEAN_YES;
1660
+
1661
+ static RRDSET *st_syncookies = NULL;
1662
+ static RRDDIM *rd_recv = NULL, *rd_send = NULL, *rd_failed = NULL;
1663
+
1664
+ if (unlikely(!st_syncookies)) {
1665
+ st_syncookies = rrdset_create_localhost("ipv4",
1666
+ "tcpsyncookies",
1667
+ NULL,
1668
+ "tcp",
1669
+ NULL,
1670
+ "TCP SYN Cookies",
1671
+ "packets/s",
1672
+ 3100,
1673
+ update_every,
1674
+ RRDSET_TYPE_LINE
1675
+ );
1676
+
1677
+ rd_recv = rrddim_add(st_syncookies, "SyncookiesRecv", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1678
+ rd_send = rrddim_add(st_syncookies, "SyncookiesSent", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
1679
+ rd_failed = rrddim_add(st_syncookies, "SyncookiesFailed", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
1680
+ }
1681
+ else rrdset_next(st_syncookies);
1682
+
1683
+ rrddim_set_by_pointer(st_syncookies, rd_recv, tcpstat.tcps_sc_recvcookie);
1684
+ rrddim_set_by_pointer(st_syncookies, rd_send, tcpstat.tcps_sc_sendcookie);
1685
+ rrddim_set_by_pointer(st_syncookies, rd_failed, tcpstat.tcps_sc_zonefail);
1686
+ rrdset_done(st_syncookies);
1687
+ }
1688
+
1689
+ // --------------------------------------------------------------------
1690
+
1691
+ if (do_ecn == CONFIG_BOOLEAN_YES || (do_ecn == CONFIG_BOOLEAN_AUTO && (tcpstat.tcps_ecn_ce || tcpstat.tcps_ecn_ect0 || tcpstat.tcps_ecn_ect1))) {
1692
+ do_ecn = CONFIG_BOOLEAN_YES;
1693
+
1694
+ static RRDSET *st_ecn = NULL;
1695
+ static RRDDIM *rd_ce = NULL, *rd_no_ect = NULL, *rd_ect0 = NULL, *rd_ect1 = NULL;
1696
+
1697
+ if (unlikely(!st_ecn)) {
1698
+ st_ecn = rrdset_create_localhost("ipv4",
1699
+ "ecnpkts",
1700
+ NULL,
1701
+ "ecn",
1702
+ NULL,
1703
+ "IPv4 ECN Statistics",
1704
+ "packets/s",
1705
+ 8700,
1706
+ update_every,
1707
+ RRDSET_TYPE_LINE
1708
+ );
1709
+
1710
+ rrdset_flag_set(st_ecn, RRDSET_FLAG_DETAIL);
1711
+
1712
+ rd_ce = rrddim_add(st_ecn, "InCEPkts", "CEP", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1713
+ rd_no_ect = rrddim_add(st_ecn, "InNoECTPkts", "NoECTP", -1, 1, RRD_ALGORITHM_INCREMENTAL);
1714
+ rd_ect0 = rrddim_add(st_ecn, "InECT0Pkts", "ECTP0", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1715
+ rd_ect1 = rrddim_add(st_ecn, "InECT1Pkts", "ECTP1", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1716
+ }
1717
+ else rrdset_next(st_ecn);
1718
+
1719
+ rrddim_set_by_pointer(st_ecn, rd_ce, tcpstat.tcps_ecn_ce);
1720
+ rrddim_set_by_pointer(st_ecn, rd_no_ect, tcpstat.tcps_ecn_ce - (tcpstat.tcps_ecn_ect0 +
1721
+ tcpstat.tcps_ecn_ect1));
1722
+ rrddim_set_by_pointer(st_ecn, rd_ect0, tcpstat.tcps_ecn_ect0);
1723
+ rrddim_set_by_pointer(st_ecn, rd_ect1, tcpstat.tcps_ecn_ect1);
1724
+ rrdset_done(st_ecn);
1725
+ }
1726
+
1727
+ }
1728
+ } else {
1729
+ error("DISABLED: net.inet.tcp.stats module");
1730
+ return 1;
1731
+ }
1732
+
1733
+ return 0;
1734
+}
1735
+
1736
+
1737
+
1738
// --------------------------------------------------------------------------------------------------------------------
1739
// old sources
1740
1741
int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1742
static int do_disk_io = -1,
1743
do_bandwidth = -1,
1443
- do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
1444
- do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
1744
do_udp_packets = -1, do_udp_errors = -1, do_icmp_packets = -1, do_icmpmsg = -1,
1745
do_ip_packets = -1, do_ip_fragsout = -1, do_ip_fragsin = -1, do_ip_errors = -1,
1746
do_ip6_packets = -1, do_ip6_fragsout = -1, do_ip6_fragsin = -1, do_ip6_errors = -1,
@@ -1451,14 +1750,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1750
if (unlikely(do_disk_io == -1)) {
1751
do_disk_io = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1);
1752
do_bandwidth = config_get_boolean("plugin:freebsd:sysctl", "bandwidth", 1);
1454
- do_tcp_sockets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 TCP connections", 1);
1455
- do_tcp_packets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 TCP packets", 1);
1456
- do_tcp_errors = config_get_boolean("plugin:freebsd:sysctl", "ipv4 TCP errors", 1);
1457
- do_tcp_handshake = config_get_boolean("plugin:freebsd:sysctl", "ipv4 TCP handshake issues", 1);
1458
- do_ecn = config_get_boolean_ondemand("plugin:freebsd:sysctl", "ECN packets", CONFIG_BOOLEAN_AUTO);
1459
- do_tcpext_syscookies = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP SYN cookies", CONFIG_BOOLEAN_AUTO);
1460
- do_tcpext_ofo = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP out-of-order queue", CONFIG_BOOLEAN_AUTO);
1461
- do_tcpext_connaborts = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP connection aborts", CONFIG_BOOLEAN_AUTO);
1753
do_udp_packets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 UDP packets", 1);
1754
do_udp_errors = config_get_boolean("plugin:freebsd:sysctl", "ipv4 UDP errors", 1);
1755
do_icmp_packets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 ICMP packets", 1);
@@ -1517,9 +1808,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1808
u_long ift_obytes;
1809
} iftot = {0, 0};
1810
1520
- // NEEDED BY: do_tcp...
1521
- struct tcpstat tcpstat;
1522
-
1811
// NEEDED BY: do_udp...
1812
struct udpstat udpstat;
1813
@@ -1876,180 +2164,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
2164
2165
// --------------------------------------------------------------------
2166
1879
- // see http://net-snmp.sourceforge.net/docs/mibs/tcp.html
1880
- if (likely(do_tcp_packets || do_tcp_errors || do_tcp_handshake || do_tcpext_connaborts || do_tcpext_ofo || do_tcpext_syscookies || do_ecn)) {
1881
- if (unlikely(GETSYSCTL_BY_NAME("net.inet.tcp.stats", tcpstat))){
1882
- do_tcp_packets = 0;
1883
- error("DISABLED: ipv4.tcppackets");
1884
- do_tcp_errors = 0;
1885
- error("DISABLED: ipv4.tcperrors");
1886
- do_tcp_handshake = 0;
1887
- error("DISABLED: ipv4.tcphandshake");
1888
- do_tcpext_connaborts = 0;
1889
- error("DISABLED: ipv4.tcpconnaborts");
1890
- do_tcpext_ofo = 0;
1891
- error("DISABLED: ipv4.tcpofo");
1892
- do_tcpext_syscookies = 0;
1893
- error("DISABLED: ipv4.tcpsyncookies");
1894
- do_ecn = 0;
1895
- error("DISABLED: ipv4.ecnpkts");
1896
- } else {
1897
- if (likely(do_tcp_packets)) {
1898
- st = rrdset_find_localhost("ipv4.tcppackets");
1899
- if (unlikely(!st)) {
1900
- st = rrdset_create_localhost("ipv4", "tcppackets", NULL, "tcp", NULL, "IPv4 TCP Packets",
1901
- "packets/s",
1902
- 2600, update_every, RRDSET_TYPE_LINE);
1903
-
1904
- rrddim_add(st, "InSegs", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1905
- rrddim_add(st, "OutSegs", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
1906
- } else
1907
- rrdset_next(st);
1908
-
1909
- rrddim_set(st, "InSegs", tcpstat.tcps_rcvtotal);
1910
- rrddim_set(st, "OutSegs", tcpstat.tcps_sndtotal);
1911
- rrdset_done(st);
1912
- }
1913
-
1914
- // --------------------------------------------------------------------
1915
-
1916
- if (likely(do_tcp_errors)) {
1917
- st = rrdset_find_localhost("ipv4.tcperrors");
1918
- if (unlikely(!st)) {
1919
- st = rrdset_create_localhost("ipv4", "tcperrors", NULL, "tcp", NULL, "IPv4 TCP Errors",
1920
- "packets/s",
1921
- 2700, update_every, RRDSET_TYPE_LINE);
1922
- rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
1923
-
1924
- rrddim_add(st, "InErrs", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1925
- rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1926
- rrddim_add(st, "RetransSegs", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1927
- } else
1928
- rrdset_next(st);
1929
-
1930
-#if __FreeBSD__ >= 11
1931
- rrddim_set(st, "InErrs", tcpstat.tcps_rcvbadoff + tcpstat.tcps_rcvreassfull + tcpstat.tcps_rcvshort);
1932
-#else
1933
- rrddim_set(st, "InErrs", tcpstat.tcps_rcvbadoff + tcpstat.tcps_rcvshort);
1934
-#endif
1935
- rrddim_set(st, "InCsumErrors", tcpstat.tcps_rcvbadsum);
1936
- rrddim_set(st, "RetransSegs", tcpstat.tcps_sndrexmitpack);
1937
- rrdset_done(st);
1938
- }
1939
-
1940
- // --------------------------------------------------------------------
1941
-
1942
- if (likely(do_tcp_handshake)) {
1943
- st = rrdset_find_localhost("ipv4.tcphandshake");
1944
- if (unlikely(!st)) {
1945
- st = rrdset_create_localhost("ipv4", "tcphandshake", NULL, "tcp", NULL,
1946
- "IPv4 TCP Handshake Issues",
1947
- "events/s", 2900, update_every, RRDSET_TYPE_LINE);
1948
- rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
1949
-
1950
- rrddim_add(st, "EstabResets", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1951
- rrddim_add(st, "ActiveOpens", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1952
- rrddim_add(st, "PassiveOpens", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1953
- rrddim_add(st, "AttemptFails", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1954
- } else
1955
- rrdset_next(st);
1956
-
1957
- rrddim_set(st, "EstabResets", tcpstat.tcps_drops);
1958
- rrddim_set(st, "ActiveOpens", tcpstat.tcps_connattempt);
1959
- rrddim_set(st, "PassiveOpens", tcpstat.tcps_accepts);
1960
- rrddim_set(st, "AttemptFails", tcpstat.tcps_conndrops);
1961
- rrdset_done(st);
1962
- }
1963
-
1964
- // --------------------------------------------------------------------
1965
-
1966
- if (do_tcpext_connaborts == CONFIG_BOOLEAN_YES || (do_tcpext_connaborts == CONFIG_BOOLEAN_AUTO && (tcpstat.tcps_rcvpackafterwin || tcpstat.tcps_rcvafterclose || tcpstat.tcps_rcvmemdrop || tcpstat.tcps_persistdrop || tcpstat.tcps_finwait2_drops))) {
1967
- do_tcpext_connaborts = CONFIG_BOOLEAN_YES;
1968
- st = rrdset_find_localhost("ipv4.tcpconnaborts");
1969
- if (unlikely(!st)) {
1970
- st = rrdset_create_localhost("ipv4", "tcpconnaborts", NULL, "tcp", NULL, "TCP Connection Aborts", "connections/s", 3010, update_every, RRDSET_TYPE_LINE);
1971
-
1972
- rrddim_add(st, "TCPAbortOnData", "baddata", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1973
- rrddim_add(st, "TCPAbortOnClose", "userclosed", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1974
- rrddim_add(st, "TCPAbortOnMemory", "nomemory", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1975
- rrddim_add(st, "TCPAbortOnTimeout", "timeout", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1976
- rrddim_add(st, "TCPAbortOnLinger", "linger", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1977
- }
1978
- else rrdset_next(st);
1979
-
1980
- rrddim_set(st, "TCPAbortOnData", tcpstat.tcps_rcvpackafterwin);
1981
- rrddim_set(st, "TCPAbortOnClose", tcpstat.tcps_rcvafterclose);
1982
- rrddim_set(st, "TCPAbortOnMemory", tcpstat.tcps_rcvmemdrop);
1983
- rrddim_set(st, "TCPAbortOnTimeout", tcpstat.tcps_persistdrop);
1984
- rrddim_set(st, "TCPAbortOnLinger", tcpstat.tcps_finwait2_drops);
1985
- rrdset_done(st);
1986
- }
1987
-
1988
- // --------------------------------------------------------------------
1989
-
1990
- if (do_tcpext_ofo == CONFIG_BOOLEAN_YES || (do_tcpext_ofo == CONFIG_BOOLEAN_AUTO && tcpstat.tcps_rcvoopack)) {
1991
- do_tcpext_ofo = CONFIG_BOOLEAN_YES;
1992
- st = rrdset_find_localhost("ipv4.tcpofo");
1993
- if (unlikely(!st)) {
1994
- st = rrdset_create_localhost("ipv4", "tcpofo", NULL, "tcp", NULL, "TCP Out-Of-Order Queue", "packets/s", 3050, update_every, RRDSET_TYPE_LINE);
1995
-
1996
- rrddim_add(st, "TCPOFOQueue", "inqueue", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1997
- }
1998
- else rrdset_next(st);
1999
-
2000
- rrddim_set(st, "TCPOFOQueue", tcpstat.tcps_rcvoopack);
2001
- rrdset_done(st);
2002
- }
2003
-
2004
- // --------------------------------------------------------------------
2005
-
2006
- if (do_tcpext_syscookies == CONFIG_BOOLEAN_YES || (do_tcpext_syscookies == CONFIG_BOOLEAN_AUTO && (tcpstat.tcps_sc_sendcookie || tcpstat.tcps_sc_recvcookie || tcpstat.tcps_sc_zonefail))) {
2007
- do_tcpext_syscookies = CONFIG_BOOLEAN_YES;
2008
-
2009
- st = rrdset_find_localhost("ipv4.tcpsyncookies");
2010
- if (unlikely(!st)) {
2011
- st = rrdset_create_localhost("ipv4", "tcpsyncookies", NULL, "tcp", NULL, "TCP SYN Cookies", "packets/s", 3100, update_every, RRDSET_TYPE_LINE);
2012
-
2013
- rrddim_add(st, "SyncookiesRecv", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
2014
- rrddim_add(st, "SyncookiesSent", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
2015
- rrddim_add(st, "SyncookiesFailed", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
2016
- }
2017
- else rrdset_next(st);
2018
-
2019
- rrddim_set(st, "SyncookiesRecv", tcpstat.tcps_sc_recvcookie);
2020
- rrddim_set(st, "SyncookiesSent", tcpstat.tcps_sc_sendcookie);
2021
- rrddim_set(st, "SyncookiesFailed", tcpstat.tcps_sc_zonefail);
2022
- rrdset_done(st);
2023
- }
2024
-
2025
- // --------------------------------------------------------------------
2026
-
2027
- if (do_ecn == CONFIG_BOOLEAN_YES || (do_ecn == CONFIG_BOOLEAN_AUTO && (tcpstat.tcps_ecn_ce || tcpstat.tcps_ecn_ect0 || tcpstat.tcps_ecn_ect1))) {
2028
- do_ecn = CONFIG_BOOLEAN_YES;
2029
- st = rrdset_find_localhost("ipv4.ecnpkts");
2030
- if (unlikely(!st)) {
2031
- st = rrdset_create_localhost("ipv4", "ecnpkts", NULL, "ecn", NULL, "IPv4 ECN Statistics", "packets/s", 8700, update_every, RRDSET_TYPE_LINE);
2032
- rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
2033
-
2034
- rrddim_add(st, "InCEPkts", "CEP", 1, 1, RRD_ALGORITHM_INCREMENTAL);
2035
- rrddim_add(st, "InNoECTPkts", "NoECTP", -1, 1, RRD_ALGORITHM_INCREMENTAL);
2036
- rrddim_add(st, "InECT0Pkts", "ECTP0", 1, 1, RRD_ALGORITHM_INCREMENTAL);
2037
- rrddim_add(st, "InECT1Pkts", "ECTP1", 1, 1, RRD_ALGORITHM_INCREMENTAL);
2038
- }
2039
- else rrdset_next(st);
2040
-
2041
- rrddim_set(st, "InCEPkts", tcpstat.tcps_ecn_ce);
2042
- rrddim_set(st, "InNoECTPkts", tcpstat.tcps_ecn_ce - (tcpstat.tcps_ecn_ect0 + tcpstat.tcps_ecn_ect1));
2043
- rrddim_set(st, "InECT0Pkts", tcpstat.tcps_ecn_ect0);
2044
- rrddim_set(st, "InECT1Pkts", tcpstat.tcps_ecn_ect1);
2045
- rrdset_done(st);
2046
- }
2047
-
2048
- }
2049
- }
2050
-
2051
- // --------------------------------------------------------------------
2052
-
2167
// see http://net-snmp.sourceforge.net/docs/mibs/udp.html
2168
if (likely(do_udp_packets || do_udp_errors)) {
2169
if (unlikely(GETSYSCTL_BY_NAME("net.inet.udp.stats", udpstat))) {
src/plugin_freebsd.c
+3
@@ -32,7 +32,10 @@ static struct freebsd_module {
32
{ .name = "kern.ipc.msq", .dim = "message_queues", .enabled = 1, .func = do_kern_ipc_msq },
33
{ .name = "uptime", .dim = "uptime", .enabled = 1, .func = do_uptime },
34
{ .name = "net.isr", .dim = "net_isr", .enabled = 1, .func = do_net_isr },
35
+
36
+ // network metrics
37
{ .name = "net.inet.tcp.states", .dim = "tcp_states", .enabled = 1, .func = do_net_inet_tcp_states },
38
+ { .name = "net.inet.tcp.stats", .dim = "tcp_stats", .enabled = 1, .func = do_net_inet_tcp_stats },
39
40
// CPU metrics
41
{ .name = "kern.cp_times", .dim = "cp_times", .enabled = 1, .func = do_kern_cp_times },
src/plugin_freebsd.h
+1
@@ -26,6 +26,7 @@ extern int do_kern_ipc_msq(int update_every, usec_t dt);
26
extern int do_uptime(int update_every, usec_t dt);
27
extern int do_net_isr(int update_every, usec_t dt);
28
extern int do_net_inet_tcp_states(int update_every, usec_t dt);
29
+extern int do_net_inet_tcp_stats(int update_every, usec_t dt);
30
31
extern int do_freebsd_sysctl_old(int update_every, usec_t dt);
32