Add IPv4 packets, errors and fragments charts to FreeBSD plugin
Vladimir Kobal committed
Jan 3, 2017 at 18:40 UTC
478dad3414b89c6517c4022949b24478d7d66dfd
1 file changed
+120
-2
src/freebsd_sysctl.c
+120
-2
@@ -20,8 +20,9 @@
20
#include <ifaddrs.h>
21
// NEEDED BY do_tcp...
22
#include <netinet/tcp_var.h>
23
-// NEEDED BY do_udp...
23
+// NEEDED BY do_udp..., do_ip...
24
#include <netinet/ip_var.h>
25
+// NEEDED BY do_udp...
26
#include <netinet/udp.h>
27
#include <netinet/udp_var.h>
28
// NEEDED BY do_icmp...
@@ -47,7 +48,8 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
48
do_dev_intr = -1, do_soft_intr = -1, do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
49
do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
50
do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
50
- do_udp_packets = -1, do_udp_errors = -1, do_icmp_packets = -1, do_icmpmsg = -1;
51
+ do_udp_packets = -1, do_udp_errors = -1, do_icmp_packets = -1, do_icmpmsg = -1,
52
+ do_ip_packets = -1, do_ip_fragsout = -1, do_ip_fragsin = -1, do_ip_errors = -1;
53
54
if (unlikely(do_cpu == -1)) {
55
do_cpu = config_get_boolean("plugin:freebsd:sysctl", "cpu utilization", 1);
@@ -82,6 +84,10 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
84
do_tcpext_connaborts = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP connection aborts", CONFIG_ONDEMAND_ONDEMAND);
85
do_udp_packets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 UDP packets", 1);
86
do_udp_errors = config_get_boolean("plugin:freebsd:sysctl", "ipv4 UDP errors", 1);
87
+ do_ip_packets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 packets", 1);
88
+ do_ip_fragsout = config_get_boolean("plugin:freebsd:sysctl", "ipv4 fragments sent", 1);
89
+ do_ip_fragsin = config_get_boolean("plugin:freebsd:sysctl", "ipv4 fragments assembly", 1);
90
+ do_ip_errors = config_get_boolean("plugin:freebsd:sysctl", "ipv4 errors", 1);
91
}
92
93
RRDSET *st;
@@ -216,6 +222,9 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
222
u_long msgs_out;
223
} icmp_total = {0, 0};
224
225
+ // NEEDED BY: do_ip...
226
+ struct ipstat ipstat;
227
+
228
// --------------------------------------------------------------------
229
230
if (last_loadavg_usec <= dt) {
@@ -1585,5 +1594,114 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
1594
}
1595
}
1596
1597
+ // --------------------------------------------------------------------
1598
+
1599
+ // see also http://net-snmp.sourceforge.net/docs/mibs/ip.html
1600
+ if (likely(do_ip_packets || do_ip_fragsout || do_ip_fragsin || do_ip_errors)) {
1601
+ if (unlikely(GETSYSCTL("net.inet.ip.stats", ipstat))) {
1602
+ do_ip_packets = 0;
1603
+ error("DISABLED: ipv4.packets");
1604
+ do_ip_fragsout = 0;
1605
+ error("DISABLED: ipv4.fragsout");
1606
+ do_ip_fragsin = 0;
1607
+ error("DISABLED: ipv4.fragsin");
1608
+ do_ip_errors = 0;
1609
+ error("DISABLED: ipv4.errors");
1610
+ } else {
1611
+ if (likely(do_ip_packets)) {
1612
+ st = rrdset_find("ipv4.packets");
1613
+ if (unlikely(!st)) {
1614
+ st = rrdset_create("ipv4", "packets", NULL, "packets", NULL, "IPv4 Packets", "packets/s",
1615
+ 3000, update_every, RRDSET_TYPE_LINE);
1616
+
1617
+ rrddim_add(st, "InReceives", "received", 1, 1, RRDDIM_INCREMENTAL);
1618
+ rrddim_add(st, "OutRequests", "sent", -1, 1, RRDDIM_INCREMENTAL);
1619
+ rrddim_add(st, "ForwDatagrams", "forwarded", 1, 1, RRDDIM_INCREMENTAL);
1620
+ rrddim_add(st, "InDelivers", "delivered", 1, 1, RRDDIM_INCREMENTAL);
1621
+ } else
1622
+ rrdset_next(st);
1623
+
1624
+ rrddim_set(st, "OutRequests", ipstat.ips_localout);
1625
+ rrddim_set(st, "InReceives", ipstat.ips_total);
1626
+ rrddim_set(st, "ForwDatagrams", ipstat.ips_forward);
1627
+ rrddim_set(st, "InDelivers", ipstat.ips_delivered);
1628
+ rrdset_done(st);
1629
+ }
1630
+
1631
+ // --------------------------------------------------------------------
1632
+
1633
+ if (likely(do_ip_fragsout)) {
1634
+ st = rrdset_find("ipv4.fragsout");
1635
+ if (unlikely(!st)) {
1636
+ st = rrdset_create("ipv4", "fragsout", NULL, "fragments", NULL, "IPv4 Fragments Sent",
1637
+ "packets/s", 3010, update_every, RRDSET_TYPE_LINE);
1638
+ st->isdetail = 1;
1639
+
1640
+ rrddim_add(st, "FragOKs", "ok", 1, 1, RRDDIM_INCREMENTAL);
1641
+ rrddim_add(st, "FragFails", "failed", -1, 1, RRDDIM_INCREMENTAL);
1642
+ rrddim_add(st, "FragCreates", "created", 1, 1, RRDDIM_INCREMENTAL);
1643
+ } else
1644
+ rrdset_next(st);
1645
+
1646
+ rrddim_set(st, "FragOKs", ipstat.ips_fragmented);
1647
+ rrddim_set(st, "FragFails", ipstat.ips_cantfrag);
1648
+ rrddim_set(st, "FragCreates", ipstat.ips_ofragments);
1649
+ rrdset_done(st);
1650
+ }
1651
+
1652
+ // --------------------------------------------------------------------
1653
+
1654
+ if (likely(do_ip_fragsin)) {
1655
+ st = rrdset_find("ipv4.fragsin");
1656
+ if (unlikely(!st)) {
1657
+ st = rrdset_create("ipv4", "fragsin", NULL, "fragments", NULL,
1658
+ "IPv4 Fragments Reassembly",
1659
+ "packets/s", 3011, update_every, RRDSET_TYPE_LINE);
1660
+ st->isdetail = 1;
1661
+
1662
+ rrddim_add(st, "ReasmOKs", "ok", 1, 1, RRDDIM_INCREMENTAL);
1663
+ rrddim_add(st, "ReasmFails", "failed", -1, 1, RRDDIM_INCREMENTAL);
1664
+ rrddim_add(st, "ReasmReqds", "all", 1, 1, RRDDIM_INCREMENTAL);
1665
+ } else
1666
+ rrdset_next(st);
1667
+
1668
+ rrddim_set(st, "ReasmOKs", ipstat.ips_fragments);
1669
+ rrddim_set(st, "ReasmFails", ipstat.ips_fragdropped);
1670
+ rrddim_set(st, "ReasmReqds", ipstat.ips_reassembled);
1671
+ rrdset_done(st);
1672
+ }
1673
+
1674
+ // --------------------------------------------------------------------
1675
+
1676
+ if (likely(do_ip_errors)) {
1677
+ st = rrdset_find("ipv4.errors");
1678
+ if (unlikely(!st)) {
1679
+ st = rrdset_create("ipv4", "errors", NULL, "errors", NULL, "IPv4 Errors", "packets/s",
1680
+ 3002,
1681
+ update_every, RRDSET_TYPE_LINE);
1682
+ st->isdetail = 1;
1683
+
1684
+ rrddim_add(st, "InDiscards", NULL, 1, 1, RRDDIM_INCREMENTAL);
1685
+ rrddim_add(st, "OutDiscards", NULL, -1, 1, RRDDIM_INCREMENTAL);
1686
+
1687
+ rrddim_add(st, "InHdrErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
1688
+ rrddim_add(st, "OutNoRoutes", NULL, -1, 1, RRDDIM_INCREMENTAL);
1689
+
1690
+ rrddim_add(st, "InAddrErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
1691
+ rrddim_add(st, "InUnknownProtos", NULL, 1, 1, RRDDIM_INCREMENTAL);
1692
+ } else
1693
+ rrdset_next(st);
1694
+
1695
+ rrddim_set(st, "InDiscards", ipstat.ips_badsum + ipstat.ips_tooshort + ipstat.ips_toosmall + ipstat.ips_toolong);
1696
+ rrddim_set(st, "OutDiscards", ipstat.ips_odropped);
1697
+ rrddim_set(st, "InHdrErrors", ipstat.ips_badhlen + ipstat.ips_badlen + ipstat.ips_badoptions + ipstat.ips_badvers);
1698
+ rrddim_set(st, "InAddrErrors", ipstat.ips_badaddr);
1699
+ rrddim_set(st, "InUnknownProtos", ipstat.ips_noproto);
1700
+ rrddim_set(st, "OutNoRoutes", ipstat.ips_noroute);
1701
+ rrdset_done(st);
1702
+ }
1703
+ }
1704
+ }
1705
+
1706
return 0;
1707
}