mirror of
https://github.com/digitalocean/ceph_exporter
synced 2025-02-08 23:47:05 +00:00
exporter: do not reinitialize collectors on every collect
We store all the collectors in a map of string in order to dynamically load/unload the rbd mirror collector
This commit is contained in:
parent
49e6345cb6
commit
69edc55596
@ -39,12 +39,13 @@ type Exporter struct {
|
|||||||
RbdMirror bool
|
RbdMirror bool
|
||||||
Logger *logrus.Logger
|
Logger *logrus.Logger
|
||||||
Version *Version
|
Version *Version
|
||||||
|
cc map[string]interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewExporter returns an initialized *Exporter
|
// NewExporter returns an initialized *Exporter
|
||||||
// We can choose to enable a collector to extract stats out of by adding it to the list of collectors.
|
// We can choose to enable a collector to extract stats out of by adding it to the list of collectors.
|
||||||
func NewExporter(conn Conn, cluster string, config string, user string, rgwMode int, logger *logrus.Logger) *Exporter {
|
func NewExporter(conn Conn, cluster string, config string, user string, rgwMode int, logger *logrus.Logger) *Exporter {
|
||||||
return &Exporter{
|
e := &Exporter{
|
||||||
Conn: conn,
|
Conn: conn,
|
||||||
Cluster: cluster,
|
Cluster: cluster,
|
||||||
Config: config,
|
Config: config,
|
||||||
@ -52,28 +53,32 @@ func NewExporter(conn Conn, cluster string, config string, user string, rgwMode
|
|||||||
RgwMode: rgwMode,
|
RgwMode: rgwMode,
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
}
|
}
|
||||||
|
err := e.setCephVersion()
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.WithError(err).Error("failed to set ceph version")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
e.cc = e.initCollectors()
|
||||||
|
|
||||||
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
func (exporter *Exporter) getCollectors() []prometheus.Collector {
|
func (exporter *Exporter) initCollectors() map[string]interface{} {
|
||||||
standardCollectors := []prometheus.Collector{
|
standardCollectors := map[string]interface{}{
|
||||||
NewClusterUsageCollector(exporter),
|
"clusterUage": NewClusterUsageCollector(exporter),
|
||||||
NewPoolUsageCollector(exporter),
|
"poolUsage": NewPoolUsageCollector(exporter),
|
||||||
NewPoolInfoCollector(exporter),
|
"poolInfo": NewPoolInfoCollector(exporter),
|
||||||
NewClusterHealthCollector(exporter),
|
"clusterHealth": NewClusterHealthCollector(exporter),
|
||||||
NewMonitorCollector(exporter),
|
"mon": NewMonitorCollector(exporter),
|
||||||
NewOSDCollector(exporter),
|
"osd": NewOSDCollector(exporter),
|
||||||
NewCrashesCollector(exporter),
|
"crashes": NewCrashesCollector(exporter),
|
||||||
}
|
|
||||||
|
|
||||||
if exporter.RbdMirror {
|
|
||||||
standardCollectors = append(standardCollectors, NewRbdMirrorStatusCollector(exporter))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch exporter.RgwMode {
|
switch exporter.RgwMode {
|
||||||
case RGWModeForeground:
|
case RGWModeForeground:
|
||||||
standardCollectors = append(standardCollectors, NewRGWCollector(exporter, false))
|
standardCollectors["rgw"] = NewRGWCollector(exporter, false)
|
||||||
case RGWModeBackground:
|
case RGWModeBackground:
|
||||||
standardCollectors = append(standardCollectors, NewRGWCollector(exporter, true))
|
standardCollectors["rgw"] = NewRGWCollector(exporter, true)
|
||||||
case RGWModeDisabled:
|
case RGWModeDisabled:
|
||||||
// nothing to do
|
// nothing to do
|
||||||
default:
|
default:
|
||||||
@ -165,7 +170,14 @@ func (exporter *Exporter) setRbdMirror() error {
|
|||||||
// check to see if rbd-mirror is in ceph version output and not empty
|
// check to see if rbd-mirror is in ceph version output and not empty
|
||||||
if _, exists := versions["rbd-mirror"]; exists {
|
if _, exists := versions["rbd-mirror"]; exists {
|
||||||
if len(versions["rbd-mirror"]) > 0 {
|
if len(versions["rbd-mirror"]) > 0 {
|
||||||
exporter.RbdMirror = true
|
if _, ok := exporter.cc["rbdMirror"]; !ok {
|
||||||
|
exporter.cc["rbdMirror"] = NewRbdMirrorStatusCollector(exporter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// remove the rbdMirror collector if present
|
||||||
|
if _, ok := exporter.cc["rbdMirror"]; ok {
|
||||||
|
delete(exporter.cc, "rbdMirror")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +225,7 @@ func (exporter *Exporter) Describe(ch chan<- *prometheus.Desc) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, cc := range exporter.getCollectors() {
|
for _, cc := range exporter.cc {
|
||||||
cc.Describe(ch)
|
cc.Describe(ch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -237,7 +249,7 @@ func (exporter *Exporter) Collect(ch chan<- prometheus.Metric) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, cc := range exporter.getCollectors() {
|
for _, cc := range exporter.cc {
|
||||||
cc.Collect(ch)
|
cc.Collect(ch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user