diff --git a/CHANGELOG.md b/CHANGELOG.md index 08f8a04..2b3c9e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. +## [1.0.22] - 2022-11-07 +- Update dashboards. +- Lower default interval for most plugins. +- Simplify metrics-results to influx points code. + ## [1.0.21] - 2022-10-30 - Update dashboard - Add IP connections @@ -30,7 +35,8 @@ All notable changes to this project will be documented in this file. ### Changed - Updated 3rd party dependencies. -[1.0.19]: https://bitbucket.org/mnellemann/sysmon/branches/compare/v1.0.21%0Dv0.1.18 +[1.0.22]: https://bitbucket.org/mnellemann/sysmon/branches/compare/v1.0.22%0Dv0.1.21 +[1.0.21]: https://bitbucket.org/mnellemann/sysmon/branches/compare/v1.0.21%0Dv0.1.18 [1.0.18]: https://bitbucket.org/mnellemann/sysmon/branches/compare/v1.0.18%0Dv0.1.13 [0.1.13]: https://bitbucket.org/mnellemann/sysmon/branches/compare/v0.1.13%0Dv0.1.11 [0.1.11]: https://bitbucket.org/mnellemann/sysmon/branches/compare/v0.1.11%0Dv0.1.10 diff --git a/client/doc/sysmon-client.toml b/client/doc/sysmon-client.toml index 15c2bdb..803aa5b 100644 --- a/client/doc/sysmon-client.toml +++ b/client/doc/sysmon-client.toml @@ -1,7 +1,7 @@ ### ### Sysmon Client ### -### Example configuration with default values. +### Example configuration with some default values. ### [extension.base_info] @@ -10,14 +10,17 @@ interval = '60m' [extension.base_disk] enabled = true +interval = '10s' [extension.base_filesystem] enabled = true +interval = '10s' exclude_type = [ "tmpfs", "ahafs" ] exclude_mount = [ "/boot/efi" ] [extension.base_process] enabled = true +interval = '5m' include = [ "java", "node", "httpd", "mongod", "mysqld", "postgres", "influxd", "haproxy", "beam.smp", diff --git a/client/src/main/java/sysmon/client/ClientRouteBuilder.java b/client/src/main/java/sysmon/client/ClientRouteBuilder.java index 0ea76c8..033d0be 100644 --- a/client/src/main/java/sysmon/client/ClientRouteBuilder.java +++ b/client/src/main/java/sysmon/client/ClientRouteBuilder.java @@ -29,8 +29,8 @@ public class ClientRouteBuilder extends RouteBuilder { Registry registry = getContext().getRegistry(); Configuration configuration = (Configuration) registry.lookupByName("configuration"); - Path[] pluginpaths = { Paths.get(registry.lookupByNameAndType("pluginPath", String.class)) }; - PluginManager pluginManager = new JarPluginManager(pluginpaths); + Path[] pluginPaths = { Paths.get(registry.lookupByNameAndType("pluginPath", String.class)) }; + PluginManager pluginManager = new JarPluginManager(pluginPaths); pluginManager.loadPlugins(); pluginManager.startPlugins(); @@ -49,7 +49,6 @@ public class ClientRouteBuilder extends RouteBuilder { if(ext.isSupported() && ext.isEnabled()) { - // Check that another extension has not already been loaded - TODO: Is this required ? if(providers.contains(provides)) { log.warn("Skipping extension (already provided): " + ext.getName()); continue; diff --git a/doc/dashboards/Sysmon - Host Overview.json b/doc/dashboards/Sysmon - Host Overview.json index 70dafc6..0914685 100644 --- a/doc/dashboards/Sysmon - Host Overview.json +++ b/doc/dashboards/Sysmon - Host Overview.json @@ -908,7 +908,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -932,7 +932,7 @@ }, { "params": [ - 10 + 5 ], "type": "moving_average" }, @@ -956,7 +956,7 @@ }, { "params": [ - 10 + 5 ], "type": "moving_average" }, @@ -980,7 +980,7 @@ }, { "params": [ - 10 + 5 ], "type": "moving_average" }, @@ -1004,7 +1004,7 @@ }, { "params": [ - 10 + 5 ], "type": "moving_average" }, @@ -1028,7 +1028,7 @@ }, { "params": [ - 10 + 5 ], "type": "moving_average" }, @@ -1052,7 +1052,7 @@ }, { "params": [ - 10 + 5 ], "type": "moving_average" }, @@ -1169,7 +1169,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -1189,13 +1189,11 @@ }, { "params": [], - "type": "mean" + "type": "last" }, { - "params": [ - "1s" - ], - "type": "non_negative_derivative" + "params": [], + "type": "non_negative_difference" }, { "params": [ @@ -1213,13 +1211,11 @@ }, { "params": [], - "type": "mean" + "type": "last" }, { - "params": [ - "10s" - ], - "type": "non_negative_derivative" + "params": [], + "type": "non_negative_difference" }, { "params": [ @@ -1536,7 +1532,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -1560,16 +1556,14 @@ }, { "params": [ - "1s" - ], - "type": "non_negative_derivative" - }, - { - "params": [ - 10 + 5 ], "type": "moving_average" }, + { + "params": [], + "type": "non_negative_difference" + }, { "params": [ "read" @@ -1696,7 +1690,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -1720,16 +1714,14 @@ }, { "params": [ - "1s" - ], - "type": "non_negative_derivative" - }, - { - "params": [ - 10 + 5 ], "type": "moving_average" }, + { + "params": [], + "type": "non_negative_difference" + }, { "params": [ "write" @@ -1851,7 +1843,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -1875,16 +1867,14 @@ }, { "params": [ - "1s" - ], - "type": "non_negative_derivative" - }, - { - "params": [ - 10 + 5 ], "type": "moving_average" }, + { + "params": [], + "type": "non_negative_difference" + }, { "params": [ "rx" @@ -2006,7 +1996,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -2030,9 +2020,13 @@ }, { "params": [ - "1s" + 5 ], - "type": "non_negative_derivative" + "type": "moving_average" + }, + { + "params": [], + "type": "non_negative_difference" }, { "params": [ @@ -2238,6 +2232,10 @@ "params": [], "type": "mean" }, + { + "params": [], + "type": "non_negative_difference" + }, { "params": [ "ip_conn" @@ -2348,6 +2346,10 @@ "params": [], "type": "non_negative_difference" }, + { + "params": [], + "type": "non_negative_difference" + }, { "params": [ "udp4_recv" @@ -2693,7 +2695,7 @@ }, { "params": [], - "type": "last" + "type": "mean" } ] ], @@ -3107,12 +3109,13 @@ ] }, "time": { - "from": "now-2d", - "to": "now-30s" + "from": "now-24h", + "to": "now-10s" }, "timepicker": { - "nowDelay": "30s", + "nowDelay": "10s", "refresh_intervals": [ + "10s", "30s", "1m", "5m", @@ -3126,6 +3129,6 @@ "timezone": "", "title": "Sysmon - Host Overview", "uid": "QkVPjseMt", - "version": 9, + "version": 15, "weekStart": "" } \ No newline at end of file diff --git a/doc/dashboards/Sysmon - Power Performance.json b/doc/dashboards/Sysmon - IBM Power.json similarity index 97% rename from doc/dashboards/Sysmon - Power Performance.json rename to doc/dashboards/Sysmon - IBM Power.json index 55b3318..8fea098 100644 --- a/doc/dashboards/Sysmon - Power Performance.json +++ b/doc/dashboards/Sysmon - IBM Power.json @@ -15,7 +15,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "9.1.3" + "version": "9.1.6" }, { "type": "datasource", @@ -82,7 +82,7 @@ "content": "## Metrics are collected by an agent running inside of each LPAR / VM / Host.\n \n For more information: [bitbucket.org/mnellemann/sysmon](https://bitbucket.org/mnellemann/sysmon)\n ", "mode": "markdown" }, - "pluginVersion": "9.1.3", + "pluginVersion": "9.1.6", "targets": [ { "datasource": { @@ -126,8 +126,8 @@ "scaleDistribution": { "type": "linear" }, - "showPoints": "never", - "spanNulls": false, + "showPoints": "auto", + "spanNulls": 3600000, "stacking": { "group": "A", "mode": "none" @@ -196,7 +196,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -270,7 +270,7 @@ "type": "linear" }, "showPoints": "auto", - "spanNulls": false, + "spanNulls": 3600000, "stacking": { "group": "A", "mode": "none" @@ -340,7 +340,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -408,7 +408,7 @@ "type": "linear" }, "showPoints": "auto", - "spanNulls": false, + "spanNulls": 3600000, "stacking": { "group": "A", "mode": "none" @@ -478,7 +478,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -547,7 +547,7 @@ "type": "linear" }, "showPoints": "auto", - "spanNulls": false, + "spanNulls": 3600000, "stacking": { "group": "A", "mode": "none" @@ -617,7 +617,7 @@ }, { "params": [ - "none" + "null" ], "type": "fill" } @@ -690,11 +690,12 @@ }, "time": { "from": "now-7d", - "to": "now-30s" + "to": "now-10s" }, "timepicker": { - "nowDelay": "30s", + "nowDelay": "10s", "refresh_intervals": [ + "10s", "30s", "1m", "5m", @@ -706,8 +707,8 @@ ] }, "timezone": "", - "title": "Sysmon - Power Performance", + "title": "Sysmon - IBM Power", "uid": "3zPCIbN4z", - "version": 7, + "version": 5, "weekStart": "" } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 9689fce..6fee1d5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version = 1.0.21 +version = 1.0.22 pf4jVersion = 3.7.0 slf4jVersion = 2.0.3 camelVersion = 3.14.5 diff --git a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixNetstatExtension.java b/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixNetstatExtension.java deleted file mode 100644 index 19c42c1..0000000 --- a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixNetstatExtension.java +++ /dev/null @@ -1,109 +0,0 @@ -package sysmon.plugins.os_aix; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import sysmon.shared.Measurement; -import sysmon.shared.MetricExtension; -import sysmon.shared.MetricResult; -import sysmon.shared.PluginHelper; - -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; - -// Disabled -//@Extension -public class AixNetstatExtension implements MetricExtension { - - private static final Logger log = LoggerFactory.getLogger(AixNetstatExtension.class); - - // Extension details - private final String name = "aix_network_netstat"; - private final String provides = "network_netstat"; - private final String description = "AIX Netstat Metrics"; - - // Configuration / Options - private boolean enabled = true; - private boolean threaded = false; - - - @Override - public boolean isEnabled() { - return enabled; - } - - @Override - public boolean isThreaded() { - return threaded; - } - - @Override - public boolean isSupported() { - - if(!System.getProperty("os.name").toLowerCase().contains("aix")) { - log.warn("Requires AIX."); - return false; - } - - if(PluginHelper.notExecutable("netstat")) { - log.warn("Requires the 'netstat' command."); - return false; - } - - return true; - } - - @Override - public String getName() { - return name; - } - - @Override - public String getInterval() { - return null; - } - - @Override - public String getProvides() { - return provides; - } - - @Override - public String getDescription() { - return description; - } - - @Override - public void setConfiguration(Map map) { - if (map.containsKey("enabled")) { - enabled = (boolean) map.get("enabled"); - } - if(map.containsKey("threaded")) { - threaded = (boolean) map.get("threaded"); - } - } - - @Override - public MetricResult getMetrics() throws Exception { - - HashMap tagsMap; - HashMap fieldsMap; - - try (InputStream buf = PluginHelper.executeCommand("netstat -s -f inet")) { - AixNetstatParser parser = processCommandOutput(buf); - tagsMap = parser.getTags(); - fieldsMap = parser.getFields(); - } - - log.debug(fieldsMap.toString()); - return new MetricResult(name, new Measurement(tagsMap, fieldsMap)); - } - - - protected AixNetstatParser processCommandOutput(InputStream input) throws IOException { - return new AixNetstatParser(input); - } - -} - diff --git a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixNetstatParser.java b/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixNetstatParser.java deleted file mode 100644 index 06d5dfc..0000000 --- a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixNetstatParser.java +++ /dev/null @@ -1,155 +0,0 @@ -package sysmon.plugins.os_aix; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashMap; - -public class AixNetstatParser { - - private static final Logger log = LoggerFactory.getLogger(AixNetstatParser.class); - - private long ipTotalPacketsReceived; - private long ipForwarded; - - private long tcpConnectionsEstablished; - private long tcpPacketsReceved; - private long tcpPacketsSent; - - private long udpPacketsReceived; - private long udpPacketsSent; - - - public AixNetstatParser(InputStream inputStream) throws IOException { - - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - while (reader.ready()) { - String line = reader.readLine(); - log.debug("AixNetstatParser() - Line: " + line); - - if(line.startsWith("tcp:")) { - parseTcp(reader); - } - - if(line.startsWith("udp:")) { - parseUdp(reader); - } - - if(line.startsWith("ip:")) { - parseIp(reader); - } - - } - - inputStream.close(); - } - - - protected void parseIp(BufferedReader reader) throws IOException { - - while (reader.ready()) { - reader.mark(64); - String line = reader.readLine(); - - if(!line.startsWith(" ")) { - reader.reset(); - return; - } - - line = line.trim(); - - if(line.matches("(\\d+) total packets received")) { - ipTotalPacketsReceived = getFirstLong(line); - } - - if(line.matches("(\\d+) packets forwarded")) { - ipForwarded = getFirstLong(line); - } - - } - - } - - - protected void parseTcp(BufferedReader reader) throws IOException { - - while (reader.ready()) { - reader.mark(64); - String line = reader.readLine(); - - if(!line.startsWith(" ")) { - reader.reset(); - return; - } - - line = line.trim(); - - if(line.matches("(\\d+) connections established \\(including accepts\\)")) { - tcpConnectionsEstablished = getFirstLong(line); - } - - if(line.matches("(\\d+) packets received")) { - tcpPacketsReceved = getFirstLong(line); - } - - if(line.matches("(\\d+) packets sent")) { - tcpPacketsSent = getFirstLong(line); - } - - } - - } - - protected void parseUdp(BufferedReader reader) throws IOException { - - while (reader.ready()) { - reader.mark(64); - String line = reader.readLine(); - - if(!line.startsWith(" ")) { - reader.reset(); - return; - } - - line = line.trim(); - - if(line.matches("(\\d+) datagrams received")) { - udpPacketsReceived = getFirstLong(line); - } - - if(line.matches("(\\d+) datagrams output")) { - udpPacketsSent = getFirstLong(line); - } - } - - } - - - public HashMap getTags() { - return new HashMap<>(); - } - - public HashMap getFields() { - HashMap fields = new HashMap<>(); - fields.put("ip_forwarded", ipForwarded); - fields.put("ip_received", ipTotalPacketsReceived); - - fields.put("tcp_connections", tcpConnectionsEstablished); - fields.put("tcp_pkts_recv", tcpPacketsReceved); - fields.put("tcp_pkts_sent", tcpPacketsSent); - - fields.put("udp_pkts_recv", udpPacketsReceived); - fields.put("udp_pkts_sent", udpPacketsSent); - - return fields; - } - - private Long getFirstLong(String line) { - return Long.parseLong(line.substring(0, line.indexOf(" "))); - } - -} diff --git a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorExtension.java b/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorExtension.java index 68b95b4..a20f7bd 100644 --- a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorExtension.java +++ b/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorExtension.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; @Extension public class AixProcessorExtension implements MetricExtension { @@ -26,7 +27,7 @@ public class AixProcessorExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = true; - + private String interval = "10s"; @Override public boolean isEnabled() { @@ -62,7 +63,7 @@ public class AixProcessorExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -83,13 +84,16 @@ public class AixProcessorExtension implements MetricExtension { if(map.containsKey("threaded")) { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } } @Override public MetricResult getMetrics() throws Exception { - HashMap tagsMap = null; - HashMap fieldsMap = null; + TreeMap tagsMap = null; + TreeMap fieldsMap = null; try (InputStream buf = PluginHelper.executeCommand("lparstat 3 1")) { AixProcessorStat processorStat = processCommandOutput(buf); diff --git a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorStat.java b/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorStat.java index 947b311..a636c4d 100644 --- a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorStat.java +++ b/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorStat.java @@ -10,6 +10,7 @@ import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashMap; import java.util.Objects; +import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -154,12 +155,12 @@ public class AixProcessorStat { return 100 - idle; } - public HashMap getTags() { - return new HashMap<>(); + public TreeMap getTags() { + return new TreeMap<>(); } - public HashMap getFields() { - return new HashMap() {{ + public TreeMap getFields() { + return new TreeMap() {{ put("lcpu", lcpu); put("ent", ent); put("user", user); diff --git a/plugins/os-aix/src/test/groovy/AixNetstatTest.groovy b/plugins/os-aix/src/test/groovy/AixNetstatTest.groovy deleted file mode 100644 index 52ad111..0000000 --- a/plugins/os-aix/src/test/groovy/AixNetstatTest.groovy +++ /dev/null @@ -1,25 +0,0 @@ -import spock.lang.Specification -import sysmon.plugins.os_aix.AixNetstatParser - -class AixNetstatTest extends Specification { - - void "test netstat parsing"() { - - setup: - InputStream inputStream = getClass().getResourceAsStream('/netstat-aix.txt') - - when: - AixNetstatParser parser = new AixNetstatParser(inputStream) - - then: - parser.getFields().size() > 0 - parser.getFields().get('ip_received') == 76229L - parser.getFields().get('ip_forwarded') == 24L - parser.getFields().get('tcp_connections') == 85L - parser.getFields().get('tcp_pkts_sent') == 31274L - parser.getFields().get('tcp_pkts_recv') == 39830L - parser.getFields().get('udp_pkts_sent') == 26332L - parser.getFields().get('udp_pkts_recv') == 34559L - } - -} diff --git a/plugins/os-aix/src/test/resources/netstat-aix.txt b/plugins/os-aix/src/test/resources/netstat-aix.txt deleted file mode 100644 index 11ea404..0000000 --- a/plugins/os-aix/src/test/resources/netstat-aix.txt +++ /dev/null @@ -1,157 +0,0 @@ -icmp: - 12 calls to icmp_error - 0 errors not generated because old message was icmp - Output histogram: - destination unreachable: 12 - 0 messages with bad code fields - 0 messages < minimum length - 0 bad checksums - 0 messages with bad length - Input histogram: - destination unreachable: 3 - 0 message responses generated -igmp: - 0 messages received - 0 messages received with too few bytes - 0 messages received with bad checksum - 0 membership queries received - 0 membership queries received with invalid field(s) - 0 membership reports received - 0 membership reports received with invalid field(s) - 0 membership reports received for groups to which we belong - 2 membership reports sent -tcp: - 31274 packets sent - 27328 data packets (82928168 bytes) - 86 data packets (108992 bytes) retransmitted - 2938 ack-only packets (2698 delayed) - 0 URG only packets - 0 window probe packets - 784 window update packets - 138 control packets - 3812 large sends - 74913716 bytes sent using largesend - 64069 bytes is the biggest largesend - 39830 packets received - 22701 acks (for 82928732 bytes) - 112 duplicate acks - 0 acks for unsent data - 15579 packets (5876585 bytes) received in-sequence - 62 completely duplicate packets (320 bytes) - 57 old duplicate packets - 0 packets with some dup. data (0 bytes duped) - 75 out-of-order packets (6408 bytes) - 0 packets (0 bytes) of data after window - 0 window probes - 1723 window update packets - 0 packets received after close - 0 packets with bad hardware assisted checksum - 0 discarded for bad checksums - 0 discarded for bad header offset fields - 0 discarded because packet too short - 1 discarded by listeners - 0 discarded due to listener's queue full - 3207 ack packet headers correctly predicted - 15050 data packet headers correctly predicted - 63 connection requests - 23 connection accepts - 85 connections established (including accepts) - 114 connections closed (including 0 drops) - 0 connections with ECN capability - 0 times responded to ECN - 0 embryonic connections dropped - 20314 segments updated rtt (of 16791 attempts) - 0 segments with congestion window reduced bit set - 0 segments with congestion experienced bit set - 0 resends due to path MTU discovery - 2 path MTU discovery terminations due to retransmits - 25 retransmit timeouts - 0 connections dropped by rexmit timeout - 4 fast retransmits - 1 when congestion window less than 4 segments - 28 newreno retransmits - 4 times avoided false fast retransmits - 0 persist timeouts - 0 connections dropped due to persist timeout - 0 keepalive timeouts - 0 keepalive probes sent - 0 connections dropped by keepalive - 0 times SACK blocks array is extended - 0 times SACK holes array is extended - 0 packets dropped due to memory allocation failure - 0 connections in timewait reused - 0 delayed ACKs for SYN - 0 delayed ACKs for FIN - 0 send_and_disconnects - 0 spliced connections - 0 spliced connections closed - 0 spliced connections reset - 0 spliced connections timeout - 0 spliced connections persist timeout - 0 spliced connections keepalive timeout - 0 TCP checksum offload disabled during retransmit - 0 Connections dropped due to bad ACKs - 0 Connections dropped due to duplicate SYN packets - 0 fastpath loopback connections - 0 fastpath loopback sent packets (0 bytes) - 0 fastpath loopback received packets (0 bytes) - 0 fake SYN segments dropped - 0 fake RST segments dropped - 0 data injection segments dropped - 0 TCPTR maximum connections dropped - 0 TCPTR connections dropped for no memory - 0 TCPTR maximum per host connections dropped - 0 connections dropped due to max assembly queue depth -udp: - 34559 datagrams received - 0 incomplete headers - 0 bad data length fields - 0 bad checksums - 1849 dropped due to no socket - 8218 broadcast/multicast datagrams dropped due to no socket - 0 socket buffer overflows - 24492 delivered - 26332 datagrams output -ip: - 76229 total packets received - 0 bad header checksums - 0 with size smaller than minimum - 0 with data size < data length - 0 with header length < data size - 0 with data length < header length - 0 with bad options - 0 with incorrect version number - 0 fragments received - 0 fragments dropped (dup or out of space) - 0 fragments dropped after timeout - 0 packets reassembled ok - 72552 packets for this host - 3 packets for unknown/unsupported protocol - 24 packets forwarded - 0 packets not forwardable - 0 redirects sent - 55784 packets sent from this host - 0 packets sent with fabricated ip header - 0 output packets dropped due to no bufs, etc. - 0 output packets discarded due to no route - 0 output datagrams fragmented - 0 fragments created - 0 datagrams that can't be fragmented - 0 IP Multicast packets dropped due to no receiver - 0 successful path MTU discovery cycles - 0 path MTU rediscovery cycles attempted - 0 path MTU discovery no-response estimates - 0 path MTU discovery response timeouts - 0 path MTU discovery decreases detected - 0 path MTU discovery packets sent - 0 path MTU discovery memory allocation failures - 0 ipintrq overflows - 0 with illegal source - 0 packets processed by threads - 0 packets dropped by threads - 0 packets dropped due to the full socket receive buffer - 0 dead gateway detection packets sent - 0 dead gateway detection packet allocation failures - 0 dead gateway detection gateway allocation failures - 0 incoming packets dropped due to MLS filters - 0 packets not sent due to MLS filters diff --git a/plugins/os-base/README.md b/plugins/os-base/README.md index ef5213f..cb0fb14 100644 --- a/plugins/os-base/README.md +++ b/plugins/os-base/README.md @@ -1,6 +1,6 @@ # Base Plugin -The base plugin uses the [oshi](https://github.com/oshi/oshi) library to get it's metrics. +The base plugins uses the [oshi](https://github.com/oshi/oshi) library to get it's metrics. ## Processor Extension @@ -51,6 +51,7 @@ Metrics reported are: ```toml [extension.base_filesystem] enabled = true +interval = "10s" exclude_type = [ "tmpfs", "ahafs" ] exclude_mount = [ "/boot/efi" ] ``` @@ -79,5 +80,6 @@ The **include** option let's you specify what processes to report for. ```toml [extension.base_process] enabled = true # true or false +interval = "10s" include = [ "java", "influxd", "grafana-server" ] ``` diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseDiskExtension.java b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseDiskExtension.java index 35b89e7..da8e050 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseDiskExtension.java +++ b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseDiskExtension.java @@ -9,10 +9,7 @@ import sysmon.shared.Measurement; import sysmon.shared.MetricExtension; import sysmon.shared.MetricResult; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Extension public class BaseDiskExtension implements MetricExtension { @@ -27,6 +24,7 @@ public class BaseDiskExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = false; + private String interval = "10s"; private HardwareAbstractionLayer hardwareAbstractionLayer; @@ -54,7 +52,7 @@ public class BaseDiskExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -75,6 +73,9 @@ public class BaseDiskExtension implements MetricExtension { if(map.containsKey("threaded")) { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } } @Override @@ -86,13 +87,18 @@ public class BaseDiskExtension implements MetricExtension { for(HWDiskStore store : diskStores) { String name = store.getName(); - if (name.matches("h?disk[0-9]+") || name.matches("/dev/x?[sv]d[a-z]") || name.matches("/dev/nvme[0-9]n[0-9]") || name.startsWith("\\\\.\\PHYSICALDRIVE")) { + if (name.matches("h?disk[0-9]+") || + //name.matches("/dev/dm-[0-9]+") || + name.matches("/dev/x?[sv]d[a-z]") || + name.matches("/dev/nvme[0-9]n[0-9]") || + name.startsWith("\\\\.\\PHYSICALDRIVE") + ) { - HashMap tagsMap = new HashMap() {{ + TreeMap tagsMap = new TreeMap() {{ put("name", name); }}; - HashMap fieldsMap = new HashMap() {{ + TreeMap fieldsMap = new TreeMap() {{ put("read", store.getReadBytes()); put("write", store.getWriteBytes()); put("iotime", store.getTransferTime()); @@ -102,7 +108,7 @@ public class BaseDiskExtension implements MetricExtension { log.debug("getMetrics() - tags: {}, fields: {}", tagsMap, fieldsMap); measurementList.add(new Measurement(tagsMap, fieldsMap)); } else { - log.debug("getMetrics() - skipping device: {}", name); + log.warn("getMetrics() - skipping device: {}", name); } } diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseFilesystemExtension.java b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseFilesystemExtension.java index 046fb76..a68d611 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseFilesystemExtension.java +++ b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseFilesystemExtension.java @@ -10,10 +10,7 @@ import sysmon.shared.Measurement; import sysmon.shared.MetricExtension; import sysmon.shared.MetricResult; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Extension public class BaseFilesystemExtension implements MetricExtension { @@ -28,6 +25,7 @@ public class BaseFilesystemExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = false; + private String interval = "10s"; private List excludeType = new ArrayList() {{ add("tmpfs"); add("ahafs"); @@ -64,7 +62,7 @@ public class BaseFilesystemExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -87,6 +85,10 @@ public class BaseFilesystemExtension implements MetricExtension { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } + if(map.containsKey("exclude_type")) { excludeType = (List) map.get("exclude_type"); } @@ -125,13 +127,13 @@ public class BaseFilesystemExtension implements MetricExtension { } alreadyProcessed.add(name); - HashMap tagsMap = new HashMap() {{ + TreeMap tagsMap = new TreeMap() {{ put("name", name); put("type", type); put("mount", mount); }}; - HashMap fieldsMap = new HashMap() {{ + TreeMap fieldsMap = new TreeMap() {{ put("free_bytes", store.getFreeSpace()); put("total_bytes", store.getTotalSpace()); put("free_inodes", store.getFreeInodes()); diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseInfoExtension.java b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseInfoExtension.java index 3c882dd..f9acbca 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseInfoExtension.java +++ b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseInfoExtension.java @@ -10,6 +10,7 @@ import sysmon.shared.MetricResult; import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; @Extension public class BaseInfoExtension implements MetricExtension { @@ -80,7 +81,7 @@ public class BaseInfoExtension implements MetricExtension { @Override public MetricResult getMetrics() { - HashMap fieldsMap = new HashMap() {{ + TreeMap fieldsMap = new TreeMap() {{ put("os_manufacturer", systemInfo.getOperatingSystem().getManufacturer()); // GNU/Linux / IBM put("os_family", systemInfo.getOperatingSystem().getFamily()); // Freedesktop.org / AIX put("os_codename", systemInfo.getOperatingSystem().getVersionInfo().getCodeName()); // Flatpak runtime / ppc64 diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseLoadExtension.java b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseLoadExtension.java index d6541f4..038d7f1 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseLoadExtension.java +++ b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseLoadExtension.java @@ -10,6 +10,7 @@ import sysmon.shared.MetricResult; import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; @Extension public class BaseLoadExtension implements MetricExtension { @@ -24,6 +25,7 @@ public class BaseLoadExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = false; + private String interval = "10s"; private HardwareAbstractionLayer hardwareAbstractionLayer; @@ -50,7 +52,7 @@ public class BaseLoadExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -71,20 +73,23 @@ public class BaseLoadExtension implements MetricExtension { if(map.containsKey("threaded")) { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } } @Override public MetricResult getMetrics() { double[] loadAvg = hardwareAbstractionLayer.getProcessor().getSystemLoadAverage(3); - HashMap fieldsMap = new HashMap() {{ + TreeMap fieldsMap = new TreeMap() {{ put("1min", loadAvg[0]); put("5min", loadAvg[1]); put("15min", loadAvg[2]); }}; log.debug(fieldsMap.toString()); - return new MetricResult(name, new Measurement(new HashMap(), fieldsMap)); + return new MetricResult(name, new Measurement(new TreeMap<>(), fieldsMap)); } } diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseMemoryExtension.java b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseMemoryExtension.java index e286274..81dc523 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseMemoryExtension.java +++ b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseMemoryExtension.java @@ -10,6 +10,7 @@ import sysmon.shared.MetricResult; import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; @Extension public class BaseMemoryExtension implements MetricExtension { @@ -24,6 +25,7 @@ public class BaseMemoryExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = false; + private String interval = "10s"; private HardwareAbstractionLayer hardwareAbstractionLayer; @@ -51,7 +53,7 @@ public class BaseMemoryExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -72,13 +74,16 @@ public class BaseMemoryExtension implements MetricExtension { if(map.containsKey("threaded")) { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } } @Override public MetricResult getMetrics() { - HashMap tagsMap = new HashMap<>(); - HashMap fieldsMap = new HashMap<>(); + TreeMap tagsMap = new TreeMap<>(); + TreeMap fieldsMap = new TreeMap<>(); long total = hardwareAbstractionLayer.getMemory().getTotal(); long available = hardwareAbstractionLayer.getMemory().getAvailable(); diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetstatExtension.java b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetstatExtension.java index d0a311e..1aea883 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetstatExtension.java +++ b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetstatExtension.java @@ -10,6 +10,7 @@ import sysmon.shared.MetricResult; import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; @Extension public class BaseNetstatExtension implements MetricExtension { @@ -24,6 +25,7 @@ public class BaseNetstatExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = false; + private String interval = "10s"; private SystemInfo systemInfo; @@ -51,7 +53,7 @@ public class BaseNetstatExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -72,12 +74,15 @@ public class BaseNetstatExtension implements MetricExtension { if (map.containsKey("threaded")) { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } } @Override public MetricResult getMetrics() { - HashMap fieldsMap = new HashMap() {{ + TreeMap fieldsMap = new TreeMap() {{ put("ip_conn_total", systemInfo.getOperatingSystem().getInternetProtocolStats().getConnections().size()); @@ -103,7 +108,7 @@ public class BaseNetstatExtension implements MetricExtension { }}; - return new MetricResult(name, new Measurement(new HashMap<>(), fieldsMap)); + return new MetricResult(name, new Measurement(new TreeMap<>(), fieldsMap)); } } diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetworkExtension.java b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetworkExtension.java index de3c7ac..5fd444d 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetworkExtension.java +++ b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetworkExtension.java @@ -9,10 +9,7 @@ import sysmon.shared.Measurement; import sysmon.shared.MetricExtension; import sysmon.shared.MetricResult; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Extension public class BaseNetworkExtension implements MetricExtension { @@ -27,6 +24,7 @@ public class BaseNetworkExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = false; + private String interval = "10s"; private HardwareAbstractionLayer hardwareAbstractionLayer; @@ -54,7 +52,7 @@ public class BaseNetworkExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -75,6 +73,9 @@ public class BaseNetworkExtension implements MetricExtension { if(map.containsKey("threaded")) { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } } @Override @@ -85,11 +86,11 @@ public class BaseNetworkExtension implements MetricExtension { List interfaces = hardwareAbstractionLayer.getNetworkIFs(); for(NetworkIF netif : interfaces) { - HashMap tagsMap = new HashMap() {{ + TreeMap tagsMap = new TreeMap() {{ put("name", netif.getName()); }}; - HashMap fieldsMap = new HashMap() {{ + TreeMap fieldsMap = new TreeMap() {{ put("rx_pkts", netif.getPacketsRecv()); put("tx_pkts", netif.getPacketsSent()); put("rx_bytes", netif.getBytesRecv()); diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessExtension.java b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessExtension.java index 67dc327..19fa71f 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessExtension.java +++ b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessExtension.java @@ -24,6 +24,8 @@ public class BaseProcessExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = false; + private String interval = "60s"; + private List includeList = new ArrayList() {{ add("java"); add("node"); @@ -70,7 +72,7 @@ public class BaseProcessExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -91,6 +93,9 @@ public class BaseProcessExtension implements MetricExtension { if(map.containsKey("threaded")) { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } if(map.containsKey("include")) { includeList = (List) map.get("include"); } @@ -121,12 +126,12 @@ public class BaseProcessExtension implements MetricExtension { } log.debug("pid: " + p.getProcessID() + ", name: " + p.getName() + ", virt: " + p.getVirtualSize() + " rss: " + p.getResidentSetSize()); - HashMap tagsMap = new HashMap() {{ + TreeMap tagsMap = new TreeMap() {{ put("pid", String.valueOf(p.getProcessID())); put("name", p.getName()); }}; - HashMap fieldsMap = new HashMap() {{ + TreeMap fieldsMap = new TreeMap() {{ put("mem_rss", p.getResidentSetSize()); put("mem_vsz", p.getVirtualSize()); put("kernel_time", p.getKernelTime()); diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessorExtension.java b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessorExtension.java index 49d05cf..55c9e14 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessorExtension.java +++ b/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessorExtension.java @@ -11,6 +11,7 @@ import sysmon.shared.MetricResult; import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; @Extension public class BaseProcessorExtension implements MetricExtension { @@ -25,6 +26,7 @@ public class BaseProcessorExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = false; + private String interval = "10s"; private HardwareAbstractionLayer hardwareAbstractionLayer; private long[] oldTicks; @@ -52,7 +54,7 @@ public class BaseProcessorExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -73,13 +75,16 @@ public class BaseProcessorExtension implements MetricExtension { if(map.containsKey("threaded")) { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } } @Override public MetricResult getMetrics() { - HashMap tagsMap = new HashMap<>(); - HashMap fieldsMap = new HashMap<>(); + TreeMap tagsMap = new TreeMap<>(); + TreeMap fieldsMap = new TreeMap<>(); long[] ticks = hardwareAbstractionLayer.getProcessor().getSystemCpuLoadTicks(); if(oldTicks == null || oldTicks.length != ticks.length) { diff --git a/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/IbmIPlugin.java b/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/IbmIPlugin.java index e7c1fb9..74cf25f 100644 --- a/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/IbmIPlugin.java +++ b/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/IbmIPlugin.java @@ -6,44 +6,33 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.pf4j.Plugin; import org.pf4j.PluginWrapper; -import oshi.SystemInfo; -import oshi.hardware.HardwareAbstractionLayer; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; public class IbmIPlugin extends Plugin { private static final Logger log = LoggerFactory.getLogger(IbmIPlugin.class); - private static SystemStatus systemStatus; private static AS400 as400; + private static SystemStatus systemStatus; + private static Connection connection; + public IbmIPlugin(PluginWrapper wrapper) { super(wrapper); } - - public static SystemStatus getSystemStatus() { - - try { - if (as400 == null) { - as400 = IbmIPlugin.getAS400(); - } - if(systemStatus == null) { - systemStatus = new SystemStatus(as400); - } - } catch (Exception exception) { - log.error("getSystemStatus() - {}", exception.getMessage()); - return null; - } - - return systemStatus; - } - - public static AS400 getAS400() { + if(as400 != null) { + return as400; + } + + // Check platform String osArch = System.getProperty("os.arch").toLowerCase(); String osName = System.getProperty("os.name").toLowerCase(); - if(!osArch.equals("ppc64") && !osName.equals("os/400")) { log.info("getAS400() - OS Arch: {}", osArch); log.info("getAS400() - OS Name: {}", osName); @@ -52,15 +41,57 @@ public class IbmIPlugin extends Plugin { try { as400 = new AS400("localhost", "*CURRENT"); + //as400 = new AS400("localhost", "*LOCAL"); //as400 = new AS400("10.32.64.142"); + return as400; } catch (Exception exception) { log.error("getAS400() - {}", exception.getMessage()); - return null; } - return as400; + return null; } + + public static SystemStatus getSystemStatus() { + + if(systemStatus != null) { + return systemStatus; + } + + try { + if (as400 == null) { + as400 = IbmIPlugin.getAS400(); + } + if(systemStatus == null && as400 != null) { + systemStatus = new SystemStatus(as400); + return systemStatus; + } + } catch (Exception exception) { + log.error("getSystemStatus() - {}", exception.getMessage()); + } + + return null; + } + + + public static Connection getConnection() { + + if(connection != null) { + return connection; + } + + try { + DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver()); + connection = DriverManager.getConnection("jdbc:as400://localhost"); + return connection; + } catch (SQLException exception) { + log.error("getConnection() - {}", exception.getMessage()); + } + + return null; + } + + } diff --git a/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/TestExtension.java b/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/TestExtension.java index 0e9dc96..8a7b7fd 100644 --- a/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/TestExtension.java +++ b/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/TestExtension.java @@ -11,6 +11,7 @@ import sysmon.shared.MetricResult; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; //@Extension public class TestExtension implements MetricExtension { @@ -25,6 +26,7 @@ public class TestExtension implements MetricExtension { // Configuration / Options private boolean enabled = true; private boolean threaded = false; + private String interval = "10s"; private SystemStatus systemStatus; @@ -52,7 +54,7 @@ public class TestExtension implements MetricExtension { @Override public String getInterval() { - return null; + return interval; } @Override @@ -73,6 +75,9 @@ public class TestExtension implements MetricExtension { if(map.containsKey("threaded")) { threaded = (boolean) map.get("threaded"); } + if(map.containsKey("interval")) { + interval = (String) map.get("interval"); + } } @Override @@ -121,8 +126,7 @@ public class TestExtension implements MetricExtension { System.out.println("Temp Addresses Used:" + systemStatus.getPercentTemporaryAddresses()); - - HashMap fieldsMap = new HashMap() {{ + TreeMap fieldsMap = new TreeMap() {{ put("jobs_total", jobsInSystem); put("jobs_running", batchJobsRunning); put("jobs_active", activeJobs); @@ -130,7 +134,7 @@ public class TestExtension implements MetricExtension { put("users", onlineUsers); }}; - return new MetricResult(name, new Measurement(new HashMap<>(), fieldsMap)); + return new MetricResult(name, new Measurement(new TreeMap<>(), fieldsMap)); } catch (AS400SecurityException | ErrorCompletingRequestException | InterruptedException | IOException | ObjectDoesNotExistException e) { log.error("getMetrics() {}", e.getMessage()); diff --git a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatExtension.java b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatExtension.java index 70e73aa..a1bf049 100644 --- a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatExtension.java +++ b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatExtension.java @@ -11,6 +11,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; // Disabled //@Extension @@ -87,8 +88,8 @@ public class LinuxNetstatExtension implements MetricExtension { @Override public MetricResult getMetrics() throws Exception { - HashMap tagsMap; - HashMap fieldsMap; + TreeMap tagsMap; + TreeMap fieldsMap; try (InputStream inputStream = PluginHelper.executeCommand("netstat -s")) { LinuxNetstatParser parser = processCommandOutput(inputStream); diff --git a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatParser.java b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatParser.java index d01b1c1..f351a67 100644 --- a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatParser.java +++ b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatParser.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; +import java.util.TreeMap; public class LinuxNetstatParser { @@ -139,12 +140,12 @@ public class LinuxNetstatParser { } - public HashMap getTags() { - return new HashMap<>(); + public TreeMap getTags() { + return new TreeMap<>(); } - public HashMap getFields() { - return new HashMap() {{ + public TreeMap getFields() { + return new TreeMap() {{ put("ip_forwarded", ipForwarded); put("ip_received", ipTotalPacketsReceived); put("ip_dropped", ipOutgoingPacketsDropped); diff --git a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketExtension.java b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketExtension.java index f6dab78..3428ff7 100644 --- a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketExtension.java +++ b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketExtension.java @@ -11,6 +11,7 @@ import sysmon.shared.PluginHelper; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; @Extension public class LinuxSocketExtension implements MetricExtension { @@ -83,8 +84,8 @@ public class LinuxSocketExtension implements MetricExtension { LinuxSocketStat sockStat = processSockOutput(PluginHelper.readFile("/proc/net/sockstat")); - HashMap tagsMap = sockStat.getTags(); - HashMap fieldsMap = sockStat.getFields(); + TreeMap tagsMap = sockStat.getTags(); + TreeMap fieldsMap = sockStat.getFields(); log.debug("getMetrics() - tags: {}, fields: {}", tagsMap, fieldsMap); return new MetricResult(name, new Measurement(tagsMap, fieldsMap)); diff --git a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketStat.java b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketStat.java index 89ffd1b..eb7326c 100644 --- a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketStat.java +++ b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketStat.java @@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.List; +import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -75,13 +76,13 @@ public class LinuxSocketStat { } - public HashMap getTags() { - return new HashMap<>(); + public TreeMap getTags() { + return new TreeMap<>(); } - public HashMap getFields() { - return new HashMap() {{ + public TreeMap getFields() { + return new TreeMap() {{ put("sockets", sockets); put("tcp_inuse", tcp_inuse); put("tcp_alloc", tcp_alloc); diff --git a/server/src/main/java/sysmon/server/ComboResultToPointProcessor.java b/server/src/main/java/sysmon/server/ComboResultToPointProcessor.java index a8c4f33..39f3afb 100644 --- a/server/src/main/java/sysmon/server/ComboResultToPointProcessor.java +++ b/server/src/main/java/sysmon/server/ComboResultToPointProcessor.java @@ -34,8 +34,11 @@ public class ComboResultToPointProcessor implements Processor { Point.Builder point = Point.measurement(metricResult.getName()) .time(metricResult.getTimestamp(), TimeUnit.MILLISECONDS) - .tag("hostname", metricResult.getHostname()); + .tag("hostname", metricResult.getHostname()) + .tag(measurement.getTags()) + .fields(measurement.getFields()); + /* for (Map.Entry entry : measurement.getTags().entrySet()) { //log.info("process() - tag: " + entry.getKey() + "=" + entry.getValue()); point.tag(entry.getKey(), entry.getValue()); @@ -53,7 +56,7 @@ public class ComboResultToPointProcessor implements Processor { String str = (String) entry.getValue(); point.addField(entry.getKey(), str); } - } + }*/ batchPoints.point(point.build()); } diff --git a/server/src/main/java/sysmon/server/MetricResultToPointProcessor.java b/server/src/main/java/sysmon/server/MetricResultToPointProcessor.java index 5226cfb..7798105 100644 --- a/server/src/main/java/sysmon/server/MetricResultToPointProcessor.java +++ b/server/src/main/java/sysmon/server/MetricResultToPointProcessor.java @@ -35,26 +35,39 @@ public class MetricResultToPointProcessor implements Processor { for(Measurement measurement : measurementList) { Point.Builder point = Point.measurement(metricResult.getName()) - .time(metricResult.getTimestamp(), TimeUnit.MILLISECONDS); + .time(metricResult.getTimestamp(), TimeUnit.MILLISECONDS) + .fields(measurement.getFields()) + .tag(measurement.getTags()); + /* for (Map.Entry entry : measurement.getTags().entrySet()) { //log.info("process() - tag: " + entry.getKey() + "=" + entry.getValue()); point.tag(entry.getKey(), entry.getValue()); - } + }*/ + /* for (Map.Entry entry : measurement.getFields().entrySet()) { //log.info("process() - field: " + entry.getKey() + "=" + entry.getValue()); - if(entry.getValue() instanceof Number) { - Number num = (Number) entry.getValue(); + if(entry.getValue() instanceof Float) { + float num = (float) entry.getValue(); + point.addField(entry.getKey(), num); + } else if(entry.getValue() instanceof Long) { + long num = (long) entry.getValue(); + point.addField(entry.getKey(), num); + } else if(entry.getValue() instanceof Integer) { + int num = (int) entry.getValue(); point.addField(entry.getKey(), num); } else if(entry.getValue() instanceof Boolean) { - Boolean bol = (Boolean) entry.getValue(); + boolean bol = (Boolean) entry.getValue(); point.addField(entry.getKey(), bol); + } else if(entry.getValue() instanceof Number) { + Number num = (Number) entry.getValue(); + point.addField(entry.getKey(), num); } else { String str = (String) entry.getValue(); point.addField(entry.getKey(), str); } - } + }*/ batchPoints.point(point.build()); } diff --git a/shared/src/main/java/sysmon/shared/Measurement.java b/shared/src/main/java/sysmon/shared/Measurement.java index 3e33715..499cbd4 100644 --- a/shared/src/main/java/sysmon/shared/Measurement.java +++ b/shared/src/main/java/sysmon/shared/Measurement.java @@ -4,19 +4,20 @@ import java.io.Serializable; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.TreeMap; public class Measurement implements Serializable { private static final long serialVersionUID = 1L; - private HashMap tags = new HashMap<>(); - private HashMap fields = new HashMap<>(); + private Map tags = new TreeMap<>(); + private Map fields = new TreeMap<>(); public Measurement() { } - public Measurement(HashMap tags, HashMap fields) { + public Measurement(Map tags, TreeMap fields) { this.tags = Objects.requireNonNull(tags); this.fields = Objects.requireNonNull(fields); } @@ -29,12 +30,12 @@ public class Measurement implements Serializable { return fields; } - public void setTags(HashMap tags) { + public void setTags(TreeMap tags) { Objects.requireNonNull(tags); this.tags = tags; } - public void setFields(HashMap fields) { + public void setFields(TreeMap fields) { Objects.requireNonNull(fields); this.fields = fields; }