Update dashboard to include system information and only submit this once an hour per. default.

Bump version to 1.0.x
This commit is contained in:
Mark Nellemann 2022-09-06 15:08:52 +02:00
parent abef741218
commit dd475c6d23
22 changed files with 415 additions and 51 deletions

View file

@ -1,3 +0,0 @@
{
"java.configuration.updateBuildConfiguration": "automatic"
}

View file

@ -4,6 +4,10 @@
### Example configuration with default values.
###
[extension.base_info]
enabled = true
interval = '60m'
[extension.base_disk]
enabled = true

View file

@ -61,7 +61,8 @@ public class ClientRouteBuilder extends RouteBuilder {
// Setup Camel route for this extension
// a unique timer name gives the timer it's own thread, otherwise it's a shared thread for other timers with same name.
String timerName = ext.isThreaded() ? ext.getProvides() : "default";
from("timer:"+timerName+"?fixedRate=true&period=30s")
String timerInterval = (ext.getInterval() != null) ? ext.getInterval() : "30s";
from("timer:"+timerName+"?fixedRate=true&period="+timerInterval)
.bean(ext, "getMetrics")
.outputType(MetricResult.class)
.process(new MetricEnrichProcessor(registry))

View file

@ -56,6 +56,8 @@ public final class Configuration {
map.put(k, table.getDouble(k));
} else if(table.isArray(k)) {
map.put(k, Objects.requireNonNull(table.getArray(k)).toList());
} else if(table.isTable(k)) {
map.put(k, table.getTable(k));
}
});

View file

@ -10,4 +10,5 @@ public class ListOfResultsStrategy extends AbstractListAggregationStrategy<Metri
public MetricResult getValue(Exchange exchange) {
return exchange.getIn().getBody(MetricResult.class);
}
}

View file

@ -1,5 +1,13 @@
{
"__inputs": [
{
"name": "DS_INFLUXDB-HMCI",
"label": "InfluxDB-hmci",
"description": "",
"type": "datasource",
"pluginId": "influxdb",
"pluginName": "InfluxDB"
},
{
"name": "DS_INFLUXDB-SYSMON",
"label": "InfluxDB-sysmon",
@ -9,7 +17,7 @@
"pluginName": "InfluxDB"
}
],
"__elements": [],
"__elements": {},
"__requires": [
{
"type": "panel",
@ -21,7 +29,7 @@
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "8.4.7"
"version": "9.0.7"
},
{
"type": "panel",
@ -58,7 +66,10 @@
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
@ -78,11 +89,14 @@
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": null,
"iteration": 1657611401289,
"links": [],
"liveNow": false,
"panels": [
{
"datasource": {
"type": "influxdb",
"uid": "${DS_INFLUXDB-HMCI}"
},
"gridPos": {
"h": 3,
"w": 24,
@ -94,12 +108,25 @@
"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": "8.4.7",
"pluginVersion": "9.0.7",
"targets": [
{
"datasource": {
"type": "influxdb",
"uid": "${DS_INFLUXDB-HMCI}"
},
"refId": "A"
}
],
"transparent": true,
"type": "text"
},
{
"collapsed": false,
"datasource": {
"type": "influxdb",
"uid": "5KYZifB7z"
},
"gridPos": {
"h": 1,
"w": 24,
@ -109,9 +136,263 @@
"id": 4,
"panels": [],
"repeat": "hostname",
"targets": [
{
"datasource": {
"type": "influxdb",
"uid": "5KYZifB7z"
},
"refId": "A"
}
],
"title": "${hostname}",
"type": "row"
},
{
"datasource": {
"type": "influxdb",
"uid": "${DS_INFLUXDB-SYSMON}"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "text"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 24,
"x": 0,
"y": 4
},
"id": 35,
"options": {
"colorMode": "none",
"graphMode": "none",
"justifyMode": "center",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "/.*/",
"values": false
},
"textMode": "value_and_name"
},
"pluginVersion": "9.0.7",
"targets": [
{
"datasource": {
"type": "influxdb",
"uid": "${DS_INFLUXDB-SYSMON}"
},
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"hostname"
],
"type": "tag"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"limit": "100",
"measurement": "base_info",
"orderByTime": "DESC",
"policy": "default",
"query": "SELECT last(\"os_manufacturer\") AS \"manufacturer\", last(\"os_family\") AS \"family\", last(\"os_version\") AS \"version\", last(\"os_codename\") AS \"codename\", last(\"os_build\") AS \"build\", last(\"boot_time\") * 1000 AS \"boottime\" FROM \"base_info\" WHERE (\"hostname\" =~ /^$hostname$/) AND $timeFilter GROUP BY time($__interval), \"hostname\" fill(null) ORDER BY time DESC LIMIT 1000",
"rawQuery": true,
"refId": "A",
"resultFormat": "table",
"select": [
[
{
"params": [
"os_manufacturer"
],
"type": "field"
},
{
"params": [],
"type": "last"
},
{
"params": [
"manufacturer"
],
"type": "alias"
}
],
[
{
"params": [
"os_family"
],
"type": "field"
},
{
"params": [],
"type": "last"
},
{
"params": [
"family"
],
"type": "alias"
}
],
[
{
"params": [
"os_codename"
],
"type": "field"
},
{
"params": [],
"type": "last"
},
{
"params": [
"codename"
],
"type": "alias"
}
],
[
{
"params": [
"os_build"
],
"type": "field"
},
{
"params": [],
"type": "last"
},
{
"params": [
"build"
],
"type": "alias"
}
],
[
{
"params": [
"os_version"
],
"type": "field"
},
{
"params": [],
"type": "last"
},
{
"params": [
"version"
],
"type": "alias"
}
],
[
{
"params": [
"boot_time"
],
"type": "field"
},
{
"params": [],
"type": "last"
},
{
"params": [
"boottime"
],
"type": "alias"
}
]
],
"tags": [
{
"key": "hostname",
"operator": "=~",
"value": "/^$hostname$/"
}
]
}
],
"title": "System Information",
"transformations": [
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true,
"hostname": true
},
"indexByName": {
"Time": 0,
"boottime": 7,
"build": 6,
"codename": 5,
"family": 3,
"hostname": 1,
"manufacturer": 2,
"version": 4
},
"renameByName": {
"boottime": "Boot Time",
"build": "OS Build",
"codename": "OS Codename",
"family": "OS Family",
"hostname": "Hostname",
"manufacturer": "Manufacturer",
"version": "OS Version"
}
}
},
{
"id": "convertFieldType",
"options": {
"conversions": [
{
"destinationType": "time",
"targetField": "Boot Time"
}
],
"fields": {}
}
}
],
"type": "stat"
},
{
"aliasColors": {},
"bars": false,
@ -128,7 +409,7 @@
"h": 5,
"w": 12,
"x": 0,
"y": 4
"y": 8
},
"hiddenSeries": false,
"id": 2,
@ -149,7 +430,7 @@
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "8.4.7",
"pluginVersion": "9.0.7",
"pointradius": 2,
"points": false,
"renderer": "flot",
@ -398,7 +679,7 @@
"h": 5,
"w": 12,
"x": 12,
"y": 4
"y": 8
},
"id": 16,
"options": {
@ -416,9 +697,13 @@
"text": {},
"textMode": "value_and_name"
},
"pluginVersion": "8.4.7",
"pluginVersion": "9.0.7",
"targets": [
{
"datasource": {
"type": "influxdb",
"uid": "${DS_INFLUXDB-SYSMON}"
},
"groupBy": [
{
"params": [
@ -575,7 +860,7 @@
"h": 6,
"w": 12,
"x": 0,
"y": 9
"y": 13
},
"hiddenSeries": false,
"id": 29,
@ -595,7 +880,7 @@
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "8.4.7",
"pluginVersion": "9.0.7",
"pointradius": 2,
"points": false,
"renderer": "flot",
@ -877,7 +1162,7 @@
"h": 6,
"w": 4,
"x": 12,
"y": 9
"y": 13
},
"id": 19,
"options": {
@ -893,7 +1178,7 @@
"showThresholdMarkers": true,
"text": {}
},
"pluginVersion": "8.4.7",
"pluginVersion": "9.0.7",
"targets": [
{
"datasource": {
@ -1051,7 +1336,7 @@
"h": 6,
"w": 8,
"x": 16,
"y": 9
"y": 13
},
"id": 17,
"options": {
@ -1069,7 +1354,7 @@
"text": {},
"textMode": "auto"
},
"pluginVersion": "8.4.7",
"pluginVersion": "9.0.7",
"targets": [
{
"datasource": {
@ -1224,7 +1509,7 @@
"h": 9,
"w": 12,
"x": 0,
"y": 15
"y": 19
},
"id": 10,
"options": {
@ -1381,7 +1666,7 @@
"h": 9,
"w": 12,
"x": 12,
"y": 15
"y": 19
},
"id": 30,
"options": {
@ -1539,7 +1824,7 @@
"h": 9,
"w": 12,
"x": 0,
"y": 24
"y": 28
},
"id": 31,
"options": {
@ -1685,7 +1970,7 @@
"h": 9,
"w": 12,
"x": 12,
"y": 24
"y": 28
},
"id": 18,
"options": {
@ -1797,7 +2082,7 @@
"h": 10,
"w": 12,
"x": 0,
"y": 33
"y": 37
},
"hiddenSeries": false,
"id": 24,
@ -1819,7 +2104,7 @@
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "8.4.7",
"pluginVersion": "9.0.7",
"pointradius": 2,
"points": false,
"renderer": "flot",
@ -1989,7 +2274,7 @@
"h": 10,
"w": 12,
"x": 12,
"y": 33
"y": 37
},
"id": 25,
"options": {
@ -2131,7 +2416,7 @@
"h": 9,
"w": 12,
"x": 0,
"y": 43
"y": 47
},
"id": 8,
"options": {
@ -2325,7 +2610,7 @@
"h": 9,
"w": 12,
"x": 12,
"y": 43
"y": 47
},
"id": 26,
"options": {
@ -2553,7 +2838,7 @@
"h": 6,
"w": 24,
"x": 0,
"y": 52
"y": 56
},
"id": 22,
"options": {
@ -2571,7 +2856,7 @@
"text": {},
"textMode": "auto"
},
"pluginVersion": "8.4.7",
"pluginVersion": "9.0.7",
"targets": [
{
"datasource": {
@ -2757,7 +3042,7 @@
}
],
"refresh": "30s",
"schemaVersion": 35,
"schemaVersion": 36,
"style": "dark",
"tags": [
"sysmon"
@ -2790,7 +3075,7 @@
]
},
"time": {
"from": "now-1h",
"from": "now-6h",
"to": "now-30s"
},
"timepicker": {
@ -2809,6 +3094,6 @@
"timezone": "",
"title": "Sysmon Agent - Host Overview",
"uid": "QkVPjseMk",
"version": 24,
"version": 29,
"weekStart": ""
}

View file

@ -1,7 +1,7 @@
version = 0.1.15
version = 1.0.16
pf4jVersion = 3.7.0
slf4jVersion = 1.7.36
camelVersion = 3.14.4
camelVersion = 3.14.5
groovyVersion = 3.0.12
picocliVersion = 4.6.3
oshiVersion = 6.2.2

View file

@ -59,6 +59,11 @@ public class AixNetstatExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -60,6 +60,11 @@ public class AixProcessorExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -52,6 +52,11 @@ public class BaseDiskExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -62,6 +62,11 @@ public class BaseFilesystemExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -12,18 +12,20 @@ import java.util.HashMap;
import java.util.Map;
@Extension
public class BaseDetailsExtension implements MetricExtension {
public class BaseInfoExtension implements MetricExtension {
private static final Logger log = LoggerFactory.getLogger(BaseDetailsExtension.class);
private static final Logger log = LoggerFactory.getLogger(BaseInfoExtension.class);
// Extension details
private final String name = "base_details";
private final String provides = "details";
private final String description = "Base Details Metrics";
private final String name = "base_info";
private final String provides = "info";
private final String description = "Base System Information";
// Configuration / Options
private boolean enabled = true;
private boolean threaded = false;
private String interval = "60m";
private HashMap<String, String> tags = new HashMap<>();
private SystemInfo systemInfo;
@ -54,6 +56,9 @@ public class BaseDetailsExtension implements MetricExtension {
return provides;
}
@Override
public String getInterval() { return interval; }
@Override
public String getDescription() {
return description;
@ -67,22 +72,25 @@ public class BaseDetailsExtension 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<String, Object> fieldsMap = new HashMap<String, Object>() {{
put("family", systemInfo.getOperatingSystem().getFamily()); // Freedesktop.org / AIX
put("manufacturer", systemInfo.getOperatingSystem().getManufacturer()); // GNU/Linux / IBM
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
put("os_version", systemInfo.getOperatingSystem().getVersionInfo().getVersion()); // 21.08.4 / 7.2
put("os_build", systemInfo.getOperatingSystem().getVersionInfo().getBuildNumber()); // 5.13.0-7620-generic / 2045B_72V
put("uptime", systemInfo.getOperatingSystem().getSystemUptime());
put("threads", systemInfo.getOperatingSystem().getThreadCount());
put("boot_time", systemInfo.getOperatingSystem().getSystemBootTime());
}};
return new MetricResult(name, new Measurement(new HashMap<>(), fieldsMap));
log.info(fieldsMap.toString());
return new MetricResult(name, new Measurement(tags, fieldsMap));
}
}

View file

@ -48,6 +48,11 @@ public class BaseLoadExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -49,6 +49,11 @@ public class BaseMemoryExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -49,6 +49,11 @@ public class BaseNetstatExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -52,6 +52,11 @@ public class BaseNetworkExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -65,6 +65,11 @@ public class BaseProcessExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -50,6 +50,11 @@ public class BaseProcessorExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -50,6 +50,11 @@ public class TestExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -59,6 +59,11 @@ public class LinuxNetstatExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -53,6 +53,11 @@ public class LinuxSocketExtension implements MetricExtension {
return name;
}
@Override
public String getInterval() {
return null;
}
@Override
public String getProvides() {
return provides;

View file

@ -11,6 +11,7 @@ public interface MetricExtension extends ExtensionPoint {
boolean isSupported();
String getName();
String getInterval();
String getProvides();
String getDescription();