Revamped node dashboard charts (work in progress). Stats table treats no refresh as a long refresh and shows sparklines. Do not try to resolve display fields if they are identical to the persistent field (we already have it from the initial facet call). Added cluster events back to overview page charts.

Added a title to the "indexing request rate" chart.

Merge rate -> Merge Rate

Iter1

Enable cluster annotations.

Finished implementing iter1 on node dashboard

Node stats panel shoudl also treat no refresh rate as a long one…

Added generation usages.

Do not try to resolve display fields if they are identical to the persistent field (we already have it from the initial facet call)

jshint commit
This commit is contained in:
Boaz Leskes 2014-01-07 10:44:38 +01:00
parent 29a63e1fc9
commit be67051f62
5 changed files with 259 additions and 95 deletions

View file

@ -159,6 +159,7 @@ var rows = [
"panels": [
{
"value_field": "primaries.indexing.index_total",
"title": "Indexing request rate",
"derivative": true,
"mode": "min",
"scaleSeconds": true

View file

@ -144,19 +144,19 @@ panel_defaults_by_type["histogram"] = {
var rows = [
{
"title": "Server",
"title": "Essentials",
"panels": [
{
"value_field": "os.cpu.usage",
"title": "CPU",
"title": "OS CPU",
"grid": {
"max": 100,
"min": 0
}
},
{
"value_field": "os.mem.used_percent",
"title": "Memory usage (%)",
"value_field": "jvm.mem.heap_used_percent",
"title": "JVM Heap usage (%)",
"grid": {
"max": 100,
"min": 0
@ -169,11 +169,44 @@ var rows = [
]
},
{
"title": "Server 2",
"title": "OS",
"panels": [
{
"value_field": "os.cpu.usage",
"title": "OS CPU",
"grid": {
"max": 100,
"min": 0
}
},
{
"value_field": "os.mem.used_percent",
"title": "OS Memory usage (%)",
"grid": {
"max": 100,
"min": 0
}
},
{
"value_field": "os.load_average.1m",
"title": "OS Load (1m)"
}
]
},
{
"title": "OS Extended",
"panels": [
{
"value_field": "os.cpu.sys",
"title": "OS CPU Sys",
"grid": {
"max": 100,
"min": 0
}
},
{
"value_field": "os.cpu.stolen",
"title": "CPU steal",
"title": "OS CPU Steal",
"grid": {
"max": 100,
"min": 0
@ -182,23 +215,39 @@ var rows = [
{
"time_field": "@timestamp",
"value_field": "os.swap.used_in_bytes",
"title": "Used Swap",
"title": "OS Swap Used",
"y_format": "bytes"
}
]
},
{
},{
"title": "JVM Memory",
"panels": [
{
"time_field": "@timestamp",
"value_field": "jvm.mem.heap_used_in_bytes",
"title": "Heap",
"title": "JVM Heap Used",
"y_format": "bytes"
},
{
"time_field": "@timestamp",
"value_field": "jvm.mem.pools.Par Eden Space.used_in_bytes",
"title": "JVM Young Gen usage",
"y_format": "bytes"
},
{
"time_field": "@timestamp",
"value_field": "jvm.mem.pools.CMS Old Gen.used_in_bytes",
"title": "JVM Old Gen usage",
"y_format": "bytes"
}
]
},
{
"title": "JVM GC Young",
"panels": [
{
"value_field": "jvm.gc.collectors.ParNew.collection_time_in_millis",
"title": "GC Young Gen duration (time %)",
"title": "GC Young Duration (time %)",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
@ -206,68 +255,216 @@ var rows = [
"grid": {
"max": 100,
"min": 0
}
},
"span": 6,
"resolution": 20
},
{
"value_field": "jvm.gc.collectors.ParNew.collection_count",
"title": "GC counts",
"title": "GC Young Counts",
"derivative": true,
"mode": "min",
"scaleSeconds": true
"scaleSeconds": false,
"span": 6,
"resolution": 20
}
]
},
{
"title": "JVM Memory 2",
"title": "JVM GC Old",
"panels": [
{
"value_field": "jvm.gc.collectors.ConcurrentMarkSweep.collection_time_in_millis",
"title": "GC Old Duration (time %)",
"derivative": true,
"mode": "min",
"title": "GC Old Gen duration (time %)",
"scaleSeconds": true,
"scale": 0.001 * 100,
"grid": {
"max": 100,
"min": 0
}
},
"span": 6,
"resolution": 20
},
{
"value_field": "jvm.gc.collectors.ConcurrentMarkSweep.collection_count",
"title": "GC Old Counts",
"derivative": true,
"scaleSeconds": true,
"mode": "min",
"title": "GC Old Gen count"
"scaleSeconds": false,
"span": 6,
"resolution": 20
}
]
},
{
"title": "Caches",
"title": "Indices Memory",
"panels": [
{
"value_field": "indices.fielddata.memory_size_in_bytes",
"title": "Field Data",
"title": "Indices Field Data",
"y_format": "bytes"
},
{
"value_field": "indices.filter_cache.memory_size_in_bytes",
"title": "Filter cache",
"title": "Indices Filter cache",
"y_format": "bytes"
},
{
"value_field": "indices.id_cache.memory_size_in_bytes",
"title": "Id cache",
"title": "Indices Id Cache",
"y_format": "bytes"
}
]
},
{
"title": "Caches 2",
"title": "Indices Memory Extended",
"panels": [
{
"value_field": "indices.completion.size_in_bytes",
"title": "Completion size",
"value_field": "indices.percolate.size_in_bytes",
"title": "Indices Percolation size",
"y_format": "bytes"
},
{
"value_field": "indices.completion.size_in_bytes",
"title": "Indices Completion size",
"y_format": "bytes"
}
]
},
{
"title": "Indices Search Requests Query",
"panels": [
{
"value_field": "indices.search.query_total",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"title": "Indices Search Query Rate"
},
{
"value_field": "indices.search.query_time_in_millis",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"scale": 0.001,
"title": "Indices Total Search Query Time"
}
]
},
{
"title": "Indices Search Requests Fetch",
"panels": [
{
"value_field": "indices.search.fetch_total",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"title": "Indices Search Fetch Rate"
},
{
"value_field": "indices.search.fetch_time_in_millis",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"scale": 0.001,
"title": "Indices Total Search Fetch Time"
}
]
},
{
"title": "Indices Indexing Requests",
"panels": [
{
"value_field": "indices.indexing.index_total",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"title": "Indices Indexing Rate"
},
{
"value_field": "indices.indexing.index_time_in_millis",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"scale": 0.001,
"title": "Indices Total Indexing Time"
},
{
"value_field": "indices.indexing.delete_total",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"title": "Indices Delete Rate"
}
]
},
{
"title": "Indices Get Requests",
"panels": [
{
"value_field": "indices.get.total",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"title": "Indices Get Requests Rate"
},
{
"value_field": "indices.get.time_in_millis",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"scale": 0.001,
"title": "Indices Total Get Time"
}
]
},
{
"title": "Indices Management",
"panels": [
{
"value_field": "indices.merges.current_size_in_bytes",
"mode": "max",
"y_format": "bytes",
"title": "Indices Current Merges"
},
{
"value_field": "indices.refresh.total_time_in_millis",
"derivative": true,
"mode": "min",
"scale": 0.001,
"scaleSeconds": true,
"title": "Indices Total Refresh Time"
},
{
"value_field": "indices.flush.total",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"title": "Indices Flush count"
}
]
},
{
"title": "Indices Management Extended",
"panels": [
{
"value_field": "indices.search.open_contexts",
"mode": "max",
"title": "Indices Open Search Contexts"
},
{
"value_field": "indices.warmer.total_time_in_millis",
"derivative": true,
"mode": "min",
"scale": 0.001,
"scaleSeconds": true,
"title": "Indices Total Warmer Time"
},
{
"value_field": "indices.segments.count",
"title": "Indices Segment Count"
}
]
},
@ -346,59 +543,6 @@ var rows = [
}
]
},
{
"title": "Indexing",
"panels": [
{
"value_field": "indices.indexing.index_total",
"derivative": true,
"scaleSeconds": true,
"title": "Indexing requests"
},
{
"value_field": "indices.merges.current_size_in_bytes",
"title": "Merges size",
"y_format": "bytes"
},
{
"value_field": "indices.refresh.total_time_in_millis",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"title": "Avg refresh time"
}
]
},
{
"title": "Indexing 2",
"panels": [
{
"value_field": "indices.flush.total",
"derivative": true,
"mode": "min",
"title": "Flush count"
}
]
},
{
"title": "Search & Get",
"panels": [
{
"value_field": "indices.search.query_total",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"title": "Search requests"
},
{
"value_field": "indices.get.total",
"derivative": true,
"mode": "min",
"scaleSeconds": true,
"title": "Get requests"
}
]
},
{
"title": "Data",
"panels": [

View file

@ -144,7 +144,7 @@
"title": "Document Count",
"pointradius": 5,
"annotate": {
"enable": false,
"enable": true,
"query": "_type:cluster_event",
"size": 100,
"field": "message",
@ -217,7 +217,7 @@
"title": "Search request rate",
"pointradius": 5,
"annotate": {
"enable": false,
"enable": true,
"query": "_type:cluster_event",
"size": 100,
"field": "message",
@ -290,7 +290,7 @@
"title": "Indexing request rate",
"pointradius": 5,
"annotate": {
"enable": false,
"enable": true,
"query": "_type:cluster_event",
"size": 100,
"field": "message",

View file

@ -27,6 +27,13 @@
}
}
} ]
},
"node_stats": {
"properties": {
"indices.percolate.size_in_bytes": { "type": "long"},
"jvm.buffer_pools.direct.used_in_bytes": { "type": "long" },
"jvm.buffer_pools.mapped.used_in_bytes": { "type": "long" }
}
}
}
}

View file

@ -15,7 +15,7 @@ define([
function y_format_metric_value(value, metric) {
// If this isn't a number, change nothing
if(_.isNaN(value) || !_.isFinite(value)) {
if (_.isNaN(value) || !_.isFinite(value)) {
return value;
}
if (metric.y_format === 'bytes') {
@ -28,7 +28,7 @@ define([
}
function stripRaw(fieldName) {
return fieldName.replace(/\.raw$/,'');
return fieldName.replace(/\.raw$/, '');
}
module.controller('marvel.stats_table', function ($scope, dashboard, filterSrv) {
@ -66,7 +66,7 @@ define([
},
availableMetrics: [
{
name: 'CPU (%)',
name: 'OS CPU (%)',
field: 'os.cpu.usage',
warning: 60,
error: 90
@ -84,7 +84,7 @@ define([
error: 98
},
{
name: 'Free',
name: 'Disk Free Space',
field: 'fs.total.available_in_bytes',
warning: {
threshold: 50 * 1024 * 1024 * 1024,
@ -95,8 +95,7 @@ define([
type: "lower_bound"
},
y_format: "bytes"
}
,
},
{
name: 'IOps',
field: 'fs.total.disk_io_op',
@ -106,7 +105,7 @@ define([
},
indices: {
defaults: {
display_field: 'index',
display_field: null,// identical to index.raw
persistent_field: 'index.raw',
metrics: [ 'primaries.docs.count', 'primaries.indexing.index_total', 'total.search.query_total',
'total.merges.total_size_in_bytes', 'total.fielddata.memory_size_in_bytes'
@ -133,7 +132,7 @@ define([
y_format: "short"
},
{
name: 'Merge rate',
name: 'Merge Rate',
field: 'total.merges.total_size_in_bytes',
derivative: true,
y_format: "bytes"
@ -194,9 +193,9 @@ define([
_.throttle($scope.get_rows(), 500);
});
$scope.$watch('(rows|filter:panel.rowFilter).length', function(l) {
$scope.$watch('(rows|filter:panel.rowFilter).length', function (l) {
//Compute view based on number of rows
if(l > 5 && kbn.interval_to_seconds(dashboard.current.refresh) < 120) {
if (l > 5 && dashboard.current.refresh && kbn.interval_to_seconds(dashboard.current.refresh) < 120) {
$scope.panel.compact = true;
$scope.sparkLines = false;
$scope.viewSelect = false;
@ -272,6 +271,19 @@ define([
return;
}
if (!$scope.panel.display_field || $scope.panel.display_field === $scope.panel.persistent_field) {
$scope.get_data(_.map(newPersistentIds, function (id) {
return {
display_name: id,
id: id,
// using findWhere here, though its not very efficient
selected: (_.findWhere($scope.rows, {id: id}) || {}).selected
};
}));
return;
}
// go get display names.
mrequest = $scope.ejs.MultiSearchRequest().indices(dashboard.indices);
_.each(newPersistentIds, function (persistentId) {
@ -305,7 +317,7 @@ define([
display_name: display_name || persistent_name,
id: persistent_name,
// using findWhere here, though its not very efficient
selected: (_.findWhere($scope.rows,{id:persistent_name}) || {}).selected
selected: (_.findWhere($scope.rows, {id: persistent_name}) || {}).selected
});
});
$scope.get_data(newRows);
@ -458,8 +470,8 @@ define([
}
};
$scope.showFullTable = function() {
if($scope.panel.compact) {
$scope.showFullTable = function () {
if ($scope.panel.compact) {
return false;
} else {
return true;