Skip to content

Commit

Permalink
change mongodb to compatible graphite
Browse files Browse the repository at this point in the history
  • Loading branch information
arstercz committed Jan 12, 2022
1 parent e3be037 commit 0daaa59
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 29 deletions.
8 changes: 4 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ else ifneq ($(findstring -rc,$(tag)),)
tar_version := $(version)~$(rc)
else
version := $(tag:v%=%)
rpm_version := $(version)-3
rpm_iteration := 3
deb_version := $(version)-3
deb_iteration := 3
rpm_version := $(version)-1
rpm_iteration := 1
deb_version := $(version)-1
deb_iteration := 1
tar_version := $(version)
endif

Expand Down
33 changes: 21 additions & 12 deletions plugins/inputs/mongodb/README.md

Large diffs are not rendered by default.

55 changes: 45 additions & 10 deletions plugins/inputs/mongodb/mongodb_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ type MongodbData struct {
StatLine *StatLine
Fields map[string]interface{}
Tags map[string]string
MetaTags map[string]string
MetaFields map[string]interface{}
DbData []DbData
ColData []ColData
ShardHostData []DbData
Expand All @@ -28,11 +30,22 @@ type ColData struct {
Fields map[string]interface{}
}

func copyTagsMap(globalTags map[string]string) map[string]string {
tags := make(map[string]string)
for k, v := range globalTags {
tags[k] = v
}

return tags
}

func NewMongodbData(statLine *StatLine, tags map[string]string) *MongodbData {
return &MongodbData{
StatLine: statLine,
Tags: tags,
Fields: make(map[string]interface{}),
MetaTags: copyTagsMap(tags),
MetaFields: make(map[string]interface{}),
DbData: []DbData{},
}
}
Expand Down Expand Up @@ -313,30 +326,38 @@ func (d *MongodbData) AddShardHostStats() {
}
}

func (d *MongodbData) AddMetaInfo() {
if d.StatLine.ReplSetName != "" {
d.MetaTags["rs_name"] = d.StatLine.ReplSetName
}

if d.StatLine.Version != "" {
d.MetaTags["version"] = d.StatLine.Version
}

if d.StatLine.StorageEngine != "" {
d.MetaTags["storage_engine"] = d.StatLine.StorageEngine
}

d.addMeta("meta_info", 1)
}

func (d *MongodbData) AddDefaultStats() {
statLine := reflect.ValueOf(d.StatLine).Elem()
d.addStat(statLine, DefaultStats)
if d.StatLine.NodeType != "" {
d.addStat(statLine, DefaultReplStats)
d.Tags["node_type"] = d.StatLine.NodeType
d.add("state_int", d.StatLine.NodeTypeInt)
}

if d.StatLine.ReadLatency > 0 {
d.addStat(statLine, DefaultLatencyStats)
}

if d.StatLine.ReplSetName != "" {
d.Tags["rs_name"] = d.StatLine.ReplSetName
}

if d.StatLine.OplogStats != nil {
d.add("repl_oplog_window_sec", d.StatLine.OplogStats.TimeDiff)
}

if d.StatLine.Version != "" {
d.add("version", d.StatLine.Version)
}

d.addStat(statLine, DefaultAssertsStats)
d.addStat(statLine, DefaultClusterStats)
d.addStat(statLine, DefaultCommandsStats)
Expand Down Expand Up @@ -369,7 +390,19 @@ func (d *MongodbData) add(key string, val interface{}) {
d.Fields[key] = val
}

func (d *MongodbData) addMeta(key string, val interface{}) {
d.MetaFields[key] = val
}

func (d *MongodbData) flush(acc telegraf.Accumulator) {
acc.AddFields(
"mongodb_meta",
d.MetaFields,
d.MetaTags,
d.StatLine.Time,
)
d.MetaFields = make(map[string]interface{})

acc.AddFields(
"mongodb",
d.Fields,
Expand All @@ -378,6 +411,8 @@ func (d *MongodbData) flush(acc telegraf.Accumulator) {
)
d.Fields = make(map[string]interface{})



for _, db := range d.DbData {
d.Tags["db_name"] = db.Name
acc.AddFields(
Expand All @@ -400,7 +435,7 @@ func (d *MongodbData) flush(acc telegraf.Accumulator) {
col.Fields = make(map[string]interface{})
}
for _, host := range d.ShardHostData {
d.Tags["hostname"] = host.Name
d.Tags["server"] = host.Name
acc.AddFields(
"mongodb_shard_stats",
host.Fields,
Expand Down
2 changes: 1 addition & 1 deletion plugins/inputs/mongodb/mongodb_data_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ func TestAddShardHostStats(t *testing.T) {
assert.True(t, acc.HasInt64Field("mongodb_shard_stats", key))
}

assert.True(t, acc.HasTag("mongodb_shard_stats", "hostname"))
assert.True(t, acc.HasTag("mongodb_shard_stats", "server"))
hostsFound = append(hostsFound, host)
}
sort.Strings(hostsFound)
Expand Down
3 changes: 2 additions & 1 deletion plugins/inputs/mongodb/mongodb_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type Server struct {

func (s *Server) getDefaultTags() map[string]string {
tags := make(map[string]string)
tags["hostname"] = s.URL.Host
tags["server"] = s.URL.Host
return tags
}

Expand Down Expand Up @@ -279,6 +279,7 @@ func (s *Server) gatherData(acc telegraf.Accumulator, gatherClusterStatus bool,
s.getDefaultTags(),
)
data.AddDefaultStats()
data.AddMetaInfo()
data.AddDbStats()
data.AddColStats()
data.AddShardHostStats()
Expand Down
2 changes: 1 addition & 1 deletion plugins/inputs/mongodb/mongodb_server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func TestGetDefaultTags(t *testing.T) {
in string
out string
}{
{"hostname", server.Url.Host},
{"server", server.Url.Host},
}
defaultTags := server.getDefaultTags()
for _, tt := range tagTests {
Expand Down
6 changes: 6 additions & 0 deletions plugins/inputs/mongodb/mongostat.go
Original file line number Diff line number Diff line change
Expand Up @@ -735,6 +735,7 @@ type StatLine struct {
NumConnections int64
ReplSetName string
NodeType string
NodeTypeInt int64
NodeState string
NodeStateInt int64

Expand Down Expand Up @@ -1125,16 +1126,21 @@ func NewStatLine(oldMongo, newMongo MongoStatus, key string, all bool, sampleSec
// BEGIN code modification
if newStat.Repl.IsMaster.(bool) {
returnVal.NodeType = "PRI"
returnVal.NodeTypeInt = 1
} else if newStat.Repl.Secondary != nil && newStat.Repl.Secondary.(bool) {
returnVal.NodeType = "SEC"
returnVal.NodeTypeInt = 2
} else if newStat.Repl.ArbiterOnly != nil && newStat.Repl.ArbiterOnly.(bool) {
returnVal.NodeType = "ARB"
returnVal.NodeTypeInt = 7
} else {
returnVal.NodeType = "UNK"
returnVal.NodeTypeInt = 6
}
// END code modification
} else if returnVal.IsMongos {
returnVal.NodeType = "RTR"
returnVal.NodeTypeInt = 99
}

if oldStat.ExtraInfo != nil && newStat.ExtraInfo != nil &&
Expand Down

0 comments on commit 0daaa59

Please sign in to comment.