From ca6d5a62025f483ab8fd69b7ce7f4149e305f150 Mon Sep 17 00:00:00 2001 From: Feliksas The Lion Date: Sat, 19 May 2018 04:49:23 +0300 Subject: [PATCH] Added 3 important elasticsearch cluster health metrics (#4167) --- plugins/inputs/elasticsearch/elasticsearch.go | 48 +++++++++++-------- plugins/inputs/elasticsearch/testdata_test.go | 31 +++++++----- 2 files changed, 47 insertions(+), 32 deletions(-) diff --git a/plugins/inputs/elasticsearch/elasticsearch.go b/plugins/inputs/elasticsearch/elasticsearch.go index eee8d4182..9875b68aa 100644 --- a/plugins/inputs/elasticsearch/elasticsearch.go +++ b/plugins/inputs/elasticsearch/elasticsearch.go @@ -40,17 +40,20 @@ type nodeStat struct { } type clusterHealth struct { - ClusterName string `json:"cluster_name"` - Status string `json:"status"` - TimedOut bool `json:"timed_out"` - NumberOfNodes int `json:"number_of_nodes"` - NumberOfDataNodes int `json:"number_of_data_nodes"` - ActivePrimaryShards int `json:"active_primary_shards"` - ActiveShards int `json:"active_shards"` - RelocatingShards int `json:"relocating_shards"` - InitializingShards int `json:"initializing_shards"` - UnassignedShards int `json:"unassigned_shards"` - Indices map[string]indexHealth `json:"indices"` + ClusterName string `json:"cluster_name"` + Status string `json:"status"` + TimedOut bool `json:"timed_out"` + NumberOfNodes int `json:"number_of_nodes"` + NumberOfDataNodes int `json:"number_of_data_nodes"` + ActivePrimaryShards int `json:"active_primary_shards"` + ActiveShards int `json:"active_shards"` + RelocatingShards int `json:"relocating_shards"` + InitializingShards int `json:"initializing_shards"` + UnassignedShards int `json:"unassigned_shards"` + NumberOfPendingTasks int `json:"number_of_pending_tasks"` + TaskMaxWaitingInQueueMillis int `json:"task_max_waiting_in_queue_millis"` + ActiveShardsPercentAsNumber float64 `json:"active_shards_percent_as_number"` + Indices map[string]indexHealth `json:"indices"` } type indexHealth struct { @@ -323,16 +326,19 @@ func (e *Elasticsearch) gatherClusterHealth(url string, acc telegraf.Accumulator } measurementTime := time.Now() clusterFields := map[string]interface{}{ - "status": healthStats.Status, - "status_code": mapHealthStatusToCode(healthStats.Status), - "timed_out": healthStats.TimedOut, - "number_of_nodes": healthStats.NumberOfNodes, - "number_of_data_nodes": healthStats.NumberOfDataNodes, - "active_primary_shards": healthStats.ActivePrimaryShards, - "active_shards": healthStats.ActiveShards, - "relocating_shards": healthStats.RelocatingShards, - "initializing_shards": healthStats.InitializingShards, - "unassigned_shards": healthStats.UnassignedShards, + "status": healthStats.Status, + "status_code": mapHealthStatusToCode(healthStats.Status), + "timed_out": healthStats.TimedOut, + "number_of_nodes": healthStats.NumberOfNodes, + "number_of_data_nodes": healthStats.NumberOfDataNodes, + "active_primary_shards": healthStats.ActivePrimaryShards, + "active_shards": healthStats.ActiveShards, + "relocating_shards": healthStats.RelocatingShards, + "initializing_shards": healthStats.InitializingShards, + "unassigned_shards": healthStats.UnassignedShards, + "number_of_pending_tasks": healthStats.NumberOfPendingTasks, + "task_max_waiting_in_queue_millis": healthStats.TaskMaxWaitingInQueueMillis, + "active_shards_percent_as_number": healthStats.ActiveShardsPercentAsNumber, } acc.AddFields( "elasticsearch_cluster_health", diff --git a/plugins/inputs/elasticsearch/testdata_test.go b/plugins/inputs/elasticsearch/testdata_test.go index 8229fd66e..622abeaf8 100644 --- a/plugins/inputs/elasticsearch/testdata_test.go +++ b/plugins/inputs/elasticsearch/testdata_test.go @@ -11,7 +11,10 @@ const clusterHealthResponse = ` "active_shards": 15, "relocating_shards": 0, "initializing_shards": 0, - "unassigned_shards": 0 + "unassigned_shards": 0, + "number_of_pending_tasks": 0, + "task_max_waiting_in_queue_millis": 0, + "active_shards_percent_as_number": 100.0 } ` @@ -27,6 +30,9 @@ const clusterHealthResponseWithIndices = ` "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, + "number_of_pending_tasks": 0, + "task_max_waiting_in_queue_millis": 0, + "active_shards_percent_as_number": 100.0, "indices": { "v1": { "status": "green", @@ -53,16 +59,19 @@ const clusterHealthResponseWithIndices = ` ` var clusterHealthExpected = map[string]interface{}{ - "status": "green", - "status_code": 1, - "timed_out": false, - "number_of_nodes": 3, - "number_of_data_nodes": 3, - "active_primary_shards": 5, - "active_shards": 15, - "relocating_shards": 0, - "initializing_shards": 0, - "unassigned_shards": 0, + "status": "green", + "status_code": 1, + "timed_out": false, + "number_of_nodes": 3, + "number_of_data_nodes": 3, + "active_primary_shards": 5, + "active_shards": 15, + "relocating_shards": 0, + "initializing_shards": 0, + "unassigned_shards": 0, + "number_of_pending_tasks": 0, + "task_max_waiting_in_queue_millis": 0, + "active_shards_percent_as_number": 100.0, } var v1IndexExpected = map[string]interface{}{