Allow for force gathering ES cluster stats (#4345)

This commit is contained in:
Pierre Fersing 2018-11-19 20:53:09 +01:00 committed by Daniel Nelson
parent 9c9511bde9
commit 0772076378
3 changed files with 24 additions and 16 deletions

View File

@ -1907,10 +1907,12 @@
# ## - cluster # ## - cluster
# # cluster_health_level = "indices" # # cluster_health_level = "indices"
# #
# ## Set cluster_stats to true when you want to also obtain cluster stats from the # ## Set cluster_stats to true when you want to also obtain cluster stats.
# ## Master node.
# cluster_stats = false # cluster_stats = false
# #
# ## Only gather cluster_stats from the master node. To work this require local = true
# cluster_stats_only_from_master = true
#
# ## node_stats is a list of sub-stats that you want to have gathered. Valid options # ## node_stats is a list of sub-stats that you want to have gathered. Valid options
# ## are "indices", "os", "process", "jvm", "thread_pool", "fs", "transport", "http", # ## are "indices", "os", "process", "jvm", "thread_pool", "fs", "transport", "http",
# ## "breaker". Per default, all stats are gathered. # ## "breaker". Per default, all stats are gathered.

View File

@ -29,10 +29,12 @@ or [cluster-stats](https://www.elastic.co/guide/en/elasticsearch/reference/curre
## - cluster ## - cluster
# cluster_health_level = "indices" # cluster_health_level = "indices"
## Set cluster_stats to true when you want to also obtain cluster stats from the ## Set cluster_stats to true when you want to also obtain cluster stats.
## Master node.
cluster_stats = false cluster_stats = false
## Only gather cluster_stats from the master node. To work this require local = true
cluster_stats_only_from_master = true
## node_stats is a list of sub-stats that you want to have gathered. Valid options ## node_stats is a list of sub-stats that you want to have gathered. Valid options
## are "indices", "os", "process", "jvm", "thread_pool", "fs", "transport", "http", ## are "indices", "os", "process", "jvm", "thread_pool", "fs", "transport", "http",
## "breaker". Per default, all stats are gathered. ## "breaker". Per default, all stats are gathered.

View File

@ -104,10 +104,12 @@ const sampleConfig = `
## - cluster ## - cluster
# cluster_health_level = "indices" # cluster_health_level = "indices"
## Set cluster_stats to true when you want to also obtain cluster stats from the ## Set cluster_stats to true when you want to also obtain cluster stats.
## Master node.
cluster_stats = false cluster_stats = false
## Only gather cluster_stats from the master node. To work this require local = true
cluster_stats_only_from_master = true
## node_stats is a list of sub-stats that you want to have gathered. Valid options ## node_stats is a list of sub-stats that you want to have gathered. Valid options
## are "indices", "os", "process", "jvm", "thread_pool", "fs", "transport", "http", ## are "indices", "os", "process", "jvm", "thread_pool", "fs", "transport", "http",
## "breaker". Per default, all stats are gathered. ## "breaker". Per default, all stats are gathered.
@ -124,13 +126,14 @@ const sampleConfig = `
// Elasticsearch is a plugin to read stats from one or many Elasticsearch // Elasticsearch is a plugin to read stats from one or many Elasticsearch
// servers. // servers.
type Elasticsearch struct { type Elasticsearch struct {
Local bool Local bool
Servers []string Servers []string
HttpTimeout internal.Duration HttpTimeout internal.Duration
ClusterHealth bool ClusterHealth bool
ClusterHealthLevel string ClusterHealthLevel string
ClusterStats bool ClusterStats bool
NodeStats []string ClusterStatsOnlyFromMaster bool
NodeStats []string
tls.ClientConfig tls.ClientConfig
client *http.Client client *http.Client
@ -141,8 +144,9 @@ type Elasticsearch struct {
// NewElasticsearch return a new instance of Elasticsearch // NewElasticsearch return a new instance of Elasticsearch
func NewElasticsearch() *Elasticsearch { func NewElasticsearch() *Elasticsearch {
return &Elasticsearch{ return &Elasticsearch{
HttpTimeout: internal.Duration{Duration: time.Second * 5}, HttpTimeout: internal.Duration{Duration: time.Second * 5},
ClusterHealthLevel: "indices", ClusterStatsOnlyFromMaster: true,
ClusterHealthLevel: "indices",
} }
} }
@ -216,7 +220,7 @@ func (e *Elasticsearch) Gather(acc telegraf.Accumulator) error {
} }
} }
if e.ClusterStats && e.isMaster { if e.ClusterStats && (e.isMaster || !e.ClusterStatsOnlyFromMaster || !e.Local) {
if err := e.gatherClusterStats(s+"/_cluster/stats", acc); err != nil { if err := e.gatherClusterStats(s+"/_cluster/stats", acc); err != nil {
acc.AddError(fmt.Errorf(mask.ReplaceAllString(err.Error(), "http(s)://XXX:XXX@"))) acc.AddError(fmt.Errorf(mask.ReplaceAllString(err.Error(), "http(s)://XXX:XXX@")))
return return