Add option to disable mongodb cluster status (#7515)
It can be expensive to compute these metrics. In particular, when retrieveing the amount of jumbo chunks, an index is not being used and consequently the query triggers an expensive COLLSCAN. For big databases, this query has negative impact on the cluster performance.
This commit is contained in:
parent
130403c0c9
commit
4d071bed24
|
@ -11,6 +11,11 @@
|
||||||
## mongodb://10.10.3.33:18832,
|
## mongodb://10.10.3.33:18832,
|
||||||
servers = ["mongodb://127.0.0.1:27017"]
|
servers = ["mongodb://127.0.0.1:27017"]
|
||||||
|
|
||||||
|
## When true, collect cluster status.
|
||||||
|
## Note that the query that counts jumbo chunks triggers a COLLSCAN, which
|
||||||
|
## may have an impact on performance.
|
||||||
|
# gather_cluster_status = true
|
||||||
|
|
||||||
## When true, collect per database stats
|
## When true, collect per database stats
|
||||||
# gather_perdb_stats = false
|
# gather_perdb_stats = false
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ type MongoDB struct {
|
||||||
Servers []string
|
Servers []string
|
||||||
Ssl Ssl
|
Ssl Ssl
|
||||||
mongos map[string]*Server
|
mongos map[string]*Server
|
||||||
|
GatherClusterStatus bool
|
||||||
GatherPerdbStats bool
|
GatherPerdbStats bool
|
||||||
GatherColStats bool
|
GatherColStats bool
|
||||||
ColStatsDbs []string
|
ColStatsDbs []string
|
||||||
|
@ -41,6 +42,11 @@ var sampleConfig = `
|
||||||
## mongodb://10.10.3.33:18832,
|
## mongodb://10.10.3.33:18832,
|
||||||
servers = ["mongodb://127.0.0.1:27017"]
|
servers = ["mongodb://127.0.0.1:27017"]
|
||||||
|
|
||||||
|
## When true, collect cluster status
|
||||||
|
## Note that the query that counts jumbo chunks triggers a COLLSCAN, which
|
||||||
|
## may have an impact on performance.
|
||||||
|
# gather_cluster_status = true
|
||||||
|
|
||||||
## When true, collect per database stats
|
## When true, collect per database stats
|
||||||
# gather_perdb_stats = false
|
# gather_perdb_stats = false
|
||||||
|
|
||||||
|
@ -177,14 +183,17 @@ func (m *MongoDB) gatherServer(server *Server, acc telegraf.Accumulator) error {
|
||||||
}
|
}
|
||||||
server.Session = sess
|
server.Session = sess
|
||||||
}
|
}
|
||||||
return server.gatherData(acc, m.GatherPerdbStats, m.GatherColStats, m.ColStatsDbs)
|
return server.gatherData(acc, m.GatherClusterStatus, m.GatherPerdbStats, m.GatherColStats, m.ColStatsDbs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
inputs.Add("mongodb", func() telegraf.Input {
|
inputs.Add("mongodb", func() telegraf.Input {
|
||||||
return &MongoDB{
|
return &MongoDB{
|
||||||
ColStatsDbs: []string{"local"},
|
|
||||||
mongos: make(map[string]*Server),
|
mongos: make(map[string]*Server),
|
||||||
|
GatherClusterStatus: true,
|
||||||
|
GatherPerdbStats: false,
|
||||||
|
GatherColStats: false,
|
||||||
|
ColStatsDbs: []string{"local"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,7 +192,7 @@ func (s *Server) gatherCollectionStats(colStatsDbs []string) (*ColStats, error)
|
||||||
return results, nil
|
return results, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) gatherData(acc telegraf.Accumulator, gatherDbStats bool, gatherColStats bool, colStatsDbs []string) error {
|
func (s *Server) gatherData(acc telegraf.Accumulator, gatherClusterStatus bool, gatherDbStats bool, gatherColStats bool, colStatsDbs []string) error {
|
||||||
s.Session.SetMode(mgo.Eventual, true)
|
s.Session.SetMode(mgo.Eventual, true)
|
||||||
s.Session.SetSocketTimeout(0)
|
s.Session.SetSocketTimeout(0)
|
||||||
|
|
||||||
|
@ -218,10 +218,14 @@ func (s *Server) gatherData(acc telegraf.Accumulator, gatherDbStats bool, gather
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clusterStatus, err := s.gatherClusterStatus()
|
var clusterStatus *ClusterStatus
|
||||||
|
if gatherClusterStatus {
|
||||||
|
status, err := s.gatherClusterStatus()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.Log.Debugf("Unable to gather cluster status: %s", err.Error())
|
s.Log.Debugf("Unable to gather cluster status: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
clusterStatus = status
|
||||||
|
}
|
||||||
|
|
||||||
shardStats, err := s.gatherShardConnPoolStats()
|
shardStats, err := s.gatherShardConnPoolStats()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue