Add commands stats to mongodb input plugin (#6905)
This commit is contained in:
parent
ba138b8f5b
commit
3e1c7a8948
|
@ -69,14 +69,24 @@ by running Telegraf with the `--debug` argument.
|
||||||
- cursor_pinned_count (integer)
|
- cursor_pinned_count (integer)
|
||||||
- cursor_total_count (integer)
|
- cursor_total_count (integer)
|
||||||
- deletes (integer)
|
- deletes (integer)
|
||||||
|
- delete_command_total (integer)
|
||||||
|
- delete_command_failed (integer)
|
||||||
- document_deleted (integer)
|
- document_deleted (integer)
|
||||||
- document_inserted (integer)
|
- document_inserted (integer)
|
||||||
- document_returned (integer)
|
- document_returned (integer)
|
||||||
- document_updated (integer)
|
- document_updated (integer)
|
||||||
|
- find_command_total (integer)
|
||||||
|
- find_command_failed (integer)
|
||||||
|
- find_and_modify_command_total (integer)
|
||||||
|
- find_and_modify_command_failed (integer)
|
||||||
- flushes (integer)
|
- flushes (integer)
|
||||||
- flushes_total_time_ns (integer)
|
- flushes_total_time_ns (integer)
|
||||||
- getmores (integer)
|
- getmores (integer)
|
||||||
|
- get_more_command_total (integer)
|
||||||
|
- get_more_command_failed (integer)
|
||||||
- inserts (integer)
|
- inserts (integer)
|
||||||
|
- insert_command_total (integer)
|
||||||
|
- insert_command_failed (integer)
|
||||||
- jumbo_chunks (integer)
|
- jumbo_chunks (integer)
|
||||||
- latency_commands_count (integer)
|
- latency_commands_count (integer)
|
||||||
- latency_commands (integer)
|
- latency_commands (integer)
|
||||||
|
@ -110,6 +120,8 @@ by running Telegraf with the `--debug` argument.
|
||||||
- ttl_deletes (integer)
|
- ttl_deletes (integer)
|
||||||
- ttl_passes (integer)
|
- ttl_passes (integer)
|
||||||
- updates (integer)
|
- updates (integer)
|
||||||
|
- update_command_total (integer)
|
||||||
|
- update_command_failed (integer)
|
||||||
- uptime_ns (integer)
|
- uptime_ns (integer)
|
||||||
- vsize_megabytes (integer)
|
- vsize_megabytes (integer)
|
||||||
- wtcache_app_threads_page_read_count (integer)
|
- wtcache_app_threads_page_read_count (integer)
|
||||||
|
|
|
@ -86,6 +86,21 @@ var DefaultStats = map[string]string{
|
||||||
"connections_total_created": "TotalCreatedC",
|
"connections_total_created": "TotalCreatedC",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var DefaultCommandsStats = map[string]string{
|
||||||
|
"delete_command_total": "DeleteCommandTotal",
|
||||||
|
"delete_command_failed": "DeleteCommandFailed",
|
||||||
|
"find_command_total": "FindCommandTotal",
|
||||||
|
"find_command_failed": "FindCommandFailed",
|
||||||
|
"find_and_modify_command_total": "FindAndModifyCommandTotal",
|
||||||
|
"find_and_modify_command_failed": "FindAndModifyCommandFailed",
|
||||||
|
"get_more_command_total": "GetMoreCommandTotal",
|
||||||
|
"get_more_command_failed": "GetMoreCommandFailed",
|
||||||
|
"insert_command_total": "InsertCommandTotal",
|
||||||
|
"insert_command_failed": "InsertCommandFailed",
|
||||||
|
"update_command_total": "UpdateCommandTotal",
|
||||||
|
"update_command_failed": "UpdateCommandFailed",
|
||||||
|
}
|
||||||
|
|
||||||
var DefaultLatencyStats = map[string]string{
|
var DefaultLatencyStats = map[string]string{
|
||||||
"latency_writes_count": "WriteOpsCnt",
|
"latency_writes_count": "WriteOpsCnt",
|
||||||
"latency_writes": "WriteLatency",
|
"latency_writes": "WriteLatency",
|
||||||
|
@ -253,8 +268,10 @@ func (d *MongodbData) AddDefaultStats() {
|
||||||
d.add("repl_oplog_window_sec", d.StatLine.OplogStats.TimeDiff)
|
d.add("repl_oplog_window_sec", d.StatLine.OplogStats.TimeDiff)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d.addStat(statLine, DefaultCommandsStats)
|
||||||
d.addStat(statLine, DefaultClusterStats)
|
d.addStat(statLine, DefaultClusterStats)
|
||||||
d.addStat(statLine, DefaultShardStats)
|
d.addStat(statLine, DefaultShardStats)
|
||||||
|
|
||||||
if d.StatLine.StorageEngine == "mmapv1" || d.StatLine.StorageEngine == "rocksdb" {
|
if d.StatLine.StorageEngine == "mmapv1" || d.StatLine.StorageEngine == "rocksdb" {
|
||||||
d.addStat(statLine, MmapStats)
|
d.addStat(statLine, MmapStats)
|
||||||
} else if d.StatLine.StorageEngine == "wiredTiger" {
|
} else if d.StatLine.StorageEngine == "wiredTiger" {
|
||||||
|
|
|
@ -165,6 +165,35 @@ func TestAddLatencyStats(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAddCommandsStats(t *testing.T) {
|
||||||
|
d := NewMongodbData(
|
||||||
|
&StatLine{
|
||||||
|
DeleteCommandTotal: 73,
|
||||||
|
DeleteCommandFailed: 364,
|
||||||
|
FindCommandTotal: 113,
|
||||||
|
FindCommandFailed: 201,
|
||||||
|
FindAndModifyCommandTotal: 7,
|
||||||
|
FindAndModifyCommandFailed: 55,
|
||||||
|
GetMoreCommandTotal: 4,
|
||||||
|
GetMoreCommandFailed: 55,
|
||||||
|
InsertCommandTotal: 34,
|
||||||
|
InsertCommandFailed: 65,
|
||||||
|
UpdateCommandTotal: 23,
|
||||||
|
UpdateCommandFailed: 6,
|
||||||
|
},
|
||||||
|
tags,
|
||||||
|
)
|
||||||
|
|
||||||
|
var acc testutil.Accumulator
|
||||||
|
|
||||||
|
d.AddDefaultStats()
|
||||||
|
d.flush(&acc)
|
||||||
|
|
||||||
|
for key := range DefaultCommandsStats {
|
||||||
|
assert.True(t, acc.HasInt64Field("mongodb", key))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAddShardHostStats(t *testing.T) {
|
func TestAddShardHostStats(t *testing.T) {
|
||||||
expectedHosts := []string{"hostA", "hostB"}
|
expectedHosts := []string{"hostA", "hostB"}
|
||||||
hostStatLines := map[string]ShardHostStatLine{}
|
hostStatLines := map[string]ShardHostStatLine{}
|
||||||
|
@ -225,72 +254,84 @@ func TestStateTag(t *testing.T) {
|
||||||
d.AddDefaultStats()
|
d.AddDefaultStats()
|
||||||
d.flush(&acc)
|
d.flush(&acc)
|
||||||
fields := map[string]interface{}{
|
fields := map[string]interface{}{
|
||||||
"active_reads": int64(0),
|
"active_reads": int64(0),
|
||||||
"active_writes": int64(0),
|
"active_writes": int64(0),
|
||||||
"commands": int64(0),
|
"commands": int64(0),
|
||||||
"commands_per_sec": int64(0),
|
"commands_per_sec": int64(0),
|
||||||
"deletes": int64(0),
|
"deletes": int64(0),
|
||||||
"deletes_per_sec": int64(0),
|
"deletes_per_sec": int64(0),
|
||||||
"flushes": int64(0),
|
"flushes": int64(0),
|
||||||
"flushes_per_sec": int64(0),
|
"flushes_per_sec": int64(0),
|
||||||
"flushes_total_time_ns": int64(0),
|
"flushes_total_time_ns": int64(0),
|
||||||
"getmores": int64(0),
|
"getmores": int64(0),
|
||||||
"getmores_per_sec": int64(0),
|
"getmores_per_sec": int64(0),
|
||||||
"inserts": int64(0),
|
"inserts": int64(0),
|
||||||
"inserts_per_sec": int64(0),
|
"inserts_per_sec": int64(0),
|
||||||
"member_status": "PRI",
|
"member_status": "PRI",
|
||||||
"state": "PRIMARY",
|
"state": "PRIMARY",
|
||||||
"net_in_bytes_count": int64(0),
|
"net_in_bytes_count": int64(0),
|
||||||
"net_in_bytes": int64(0),
|
"net_in_bytes": int64(0),
|
||||||
"net_out_bytes_count": int64(0),
|
"net_out_bytes_count": int64(0),
|
||||||
"net_out_bytes": int64(0),
|
"net_out_bytes": int64(0),
|
||||||
"open_connections": int64(0),
|
"open_connections": int64(0),
|
||||||
"queries": int64(0),
|
"queries": int64(0),
|
||||||
"queries_per_sec": int64(0),
|
"queries_per_sec": int64(0),
|
||||||
"queued_reads": int64(0),
|
"queued_reads": int64(0),
|
||||||
"queued_writes": int64(0),
|
"queued_writes": int64(0),
|
||||||
"repl_commands": int64(0),
|
"repl_commands": int64(0),
|
||||||
"repl_commands_per_sec": int64(0),
|
"repl_commands_per_sec": int64(0),
|
||||||
"repl_deletes": int64(0),
|
"repl_deletes": int64(0),
|
||||||
"repl_deletes_per_sec": int64(0),
|
"repl_deletes_per_sec": int64(0),
|
||||||
"repl_getmores": int64(0),
|
"repl_getmores": int64(0),
|
||||||
"repl_getmores_per_sec": int64(0),
|
"repl_getmores_per_sec": int64(0),
|
||||||
"repl_inserts": int64(0),
|
"repl_inserts": int64(0),
|
||||||
"repl_inserts_per_sec": int64(0),
|
"repl_inserts_per_sec": int64(0),
|
||||||
"repl_queries": int64(0),
|
"repl_queries": int64(0),
|
||||||
"repl_queries_per_sec": int64(0),
|
"repl_queries_per_sec": int64(0),
|
||||||
"repl_updates": int64(0),
|
"repl_updates": int64(0),
|
||||||
"repl_updates_per_sec": int64(0),
|
"repl_updates_per_sec": int64(0),
|
||||||
"repl_lag": int64(0),
|
"repl_lag": int64(0),
|
||||||
"resident_megabytes": int64(0),
|
"resident_megabytes": int64(0),
|
||||||
"updates": int64(0),
|
"updates": int64(0),
|
||||||
"updates_per_sec": int64(0),
|
"updates_per_sec": int64(0),
|
||||||
"uptime_ns": int64(0),
|
"uptime_ns": int64(0),
|
||||||
"vsize_megabytes": int64(0),
|
"vsize_megabytes": int64(0),
|
||||||
"ttl_deletes": int64(0),
|
"ttl_deletes": int64(0),
|
||||||
"ttl_deletes_per_sec": int64(0),
|
"ttl_deletes_per_sec": int64(0),
|
||||||
"ttl_passes": int64(0),
|
"ttl_passes": int64(0),
|
||||||
"ttl_passes_per_sec": int64(0),
|
"ttl_passes_per_sec": int64(0),
|
||||||
"jumbo_chunks": int64(0),
|
"jumbo_chunks": int64(0),
|
||||||
"total_in_use": int64(0),
|
"total_in_use": int64(0),
|
||||||
"total_available": int64(0),
|
"total_available": int64(0),
|
||||||
"total_created": int64(0),
|
"total_created": int64(0),
|
||||||
"total_refreshing": int64(0),
|
"total_refreshing": int64(0),
|
||||||
"cursor_timed_out": int64(0),
|
"cursor_timed_out": int64(0),
|
||||||
"cursor_timed_out_count": int64(0),
|
"cursor_timed_out_count": int64(0),
|
||||||
"cursor_no_timeout": int64(0),
|
"cursor_no_timeout": int64(0),
|
||||||
"cursor_no_timeout_count": int64(0),
|
"cursor_no_timeout_count": int64(0),
|
||||||
"cursor_pinned": int64(0),
|
"cursor_pinned": int64(0),
|
||||||
"cursor_pinned_count": int64(0),
|
"cursor_pinned_count": int64(0),
|
||||||
"cursor_total": int64(0),
|
"cursor_total": int64(0),
|
||||||
"cursor_total_count": int64(0),
|
"cursor_total_count": int64(0),
|
||||||
"document_deleted": int64(0),
|
"document_deleted": int64(0),
|
||||||
"document_inserted": int64(0),
|
"document_inserted": int64(0),
|
||||||
"document_returned": int64(0),
|
"document_returned": int64(0),
|
||||||
"document_updated": int64(0),
|
"document_updated": int64(0),
|
||||||
"connections_current": int64(0),
|
"connections_current": int64(0),
|
||||||
"connections_available": int64(0),
|
"connections_available": int64(0),
|
||||||
"connections_total_created": int64(0),
|
"connections_total_created": int64(0),
|
||||||
|
"delete_command_total": int64(0),
|
||||||
|
"delete_command_failed": int64(0),
|
||||||
|
"find_command_total": int64(0),
|
||||||
|
"find_command_failed": int64(0),
|
||||||
|
"find_and_modify_command_total": int64(0),
|
||||||
|
"find_and_modify_command_failed": int64(0),
|
||||||
|
"get_more_command_total": int64(0),
|
||||||
|
"get_more_command_failed": int64(0),
|
||||||
|
"insert_command_total": int64(0),
|
||||||
|
"insert_command_failed": int64(0),
|
||||||
|
"update_command_total": int64(0),
|
||||||
|
"update_command_failed": int64(0),
|
||||||
}
|
}
|
||||||
acc.AssertContainsTaggedFields(t, "mongodb", fields, stateTags)
|
acc.AssertContainsTaggedFields(t, "mongodb", fields, stateTags)
|
||||||
}
|
}
|
||||||
|
|
|
@ -333,6 +333,7 @@ type MetricsStats struct {
|
||||||
TTL *TTLStats `bson:"ttl"`
|
TTL *TTLStats `bson:"ttl"`
|
||||||
Cursor *CursorStats `bson:"cursor"`
|
Cursor *CursorStats `bson:"cursor"`
|
||||||
Document *DocumentStats `bson:"document"`
|
Document *DocumentStats `bson:"document"`
|
||||||
|
Commands *CommandsStats `bson:"commands"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TTLStats stores information related to documents with a ttl index.
|
// TTLStats stores information related to documents with a ttl index.
|
||||||
|
@ -355,6 +356,21 @@ type DocumentStats struct {
|
||||||
Updated int64 `bson:"updated"`
|
Updated int64 `bson:"updated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CommandsStats stores information related to document metrics.
|
||||||
|
type CommandsStats struct {
|
||||||
|
Delete *CommandsStatsValue `bson:"delete"`
|
||||||
|
Find *CommandsStatsValue `bson:"find"`
|
||||||
|
FindAndModify *CommandsStatsValue `bson:"findAndModify"`
|
||||||
|
GetMore *CommandsStatsValue `bson:"getMore"`
|
||||||
|
Insert *CommandsStatsValue `bson:"insert"`
|
||||||
|
Update *CommandsStatsValue `bson:"update"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CommandsStatsValue struct {
|
||||||
|
Failed int64 `bson:"failed"`
|
||||||
|
Total int64 `bson:"total"`
|
||||||
|
}
|
||||||
|
|
||||||
// OpenCursorStats stores information related to open cursor metrics
|
// OpenCursorStats stores information related to open cursor metrics
|
||||||
type OpenCursorStats struct {
|
type OpenCursorStats struct {
|
||||||
NoTimeout int64 `bson:"noTimeout"`
|
NoTimeout int64 `bson:"noTimeout"`
|
||||||
|
@ -528,6 +544,14 @@ type StatLine struct {
|
||||||
// Document fields
|
// Document fields
|
||||||
DeletedD, InsertedD, ReturnedD, UpdatedD int64
|
DeletedD, InsertedD, ReturnedD, UpdatedD int64
|
||||||
|
|
||||||
|
//Commands fields
|
||||||
|
DeleteCommandTotal, DeleteCommandFailed int64
|
||||||
|
FindCommandTotal, FindCommandFailed int64
|
||||||
|
FindAndModifyCommandTotal, FindAndModifyCommandFailed int64
|
||||||
|
GetMoreCommandTotal, GetMoreCommandFailed int64
|
||||||
|
InsertCommandTotal, InsertCommandFailed int64
|
||||||
|
UpdateCommandTotal, UpdateCommandFailed int64
|
||||||
|
|
||||||
// Connection fields
|
// Connection fields
|
||||||
CurrentC, AvailableC, TotalCreatedC int64
|
CurrentC, AvailableC, TotalCreatedC int64
|
||||||
|
|
||||||
|
@ -740,6 +764,33 @@ func NewStatLine(oldMongo, newMongo MongoStatus, key string, all bool, sampleSec
|
||||||
returnVal.ReturnedD = newStat.Metrics.Document.Returned
|
returnVal.ReturnedD = newStat.Metrics.Document.Returned
|
||||||
returnVal.UpdatedD = newStat.Metrics.Document.Updated
|
returnVal.UpdatedD = newStat.Metrics.Document.Updated
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if newStat.Metrics.Commands != nil {
|
||||||
|
if newStat.Metrics.Commands.Delete != nil {
|
||||||
|
returnVal.DeleteCommandTotal = newStat.Metrics.Commands.Delete.Total
|
||||||
|
returnVal.DeleteCommandFailed = newStat.Metrics.Commands.Delete.Failed
|
||||||
|
}
|
||||||
|
if newStat.Metrics.Commands.Find != nil {
|
||||||
|
returnVal.FindCommandTotal = newStat.Metrics.Commands.Find.Total
|
||||||
|
returnVal.FindCommandFailed = newStat.Metrics.Commands.Find.Failed
|
||||||
|
}
|
||||||
|
if newStat.Metrics.Commands.FindAndModify != nil {
|
||||||
|
returnVal.FindAndModifyCommandTotal = newStat.Metrics.Commands.FindAndModify.Total
|
||||||
|
returnVal.FindAndModifyCommandFailed = newStat.Metrics.Commands.FindAndModify.Failed
|
||||||
|
}
|
||||||
|
if newStat.Metrics.Commands.GetMore != nil {
|
||||||
|
returnVal.GetMoreCommandTotal = newStat.Metrics.Commands.GetMore.Total
|
||||||
|
returnVal.GetMoreCommandFailed = newStat.Metrics.Commands.GetMore.Failed
|
||||||
|
}
|
||||||
|
if newStat.Metrics.Commands.Insert != nil {
|
||||||
|
returnVal.InsertCommandTotal = newStat.Metrics.Commands.Insert.Total
|
||||||
|
returnVal.InsertCommandFailed = newStat.Metrics.Commands.Insert.Failed
|
||||||
|
}
|
||||||
|
if newStat.Metrics.Commands.Update != nil {
|
||||||
|
returnVal.UpdateCommandTotal = newStat.Metrics.Commands.Update.Total
|
||||||
|
returnVal.UpdateCommandFailed = newStat.Metrics.Commands.Update.Failed
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if newStat.OpcountersRepl != nil && oldStat.OpcountersRepl != nil {
|
if newStat.OpcountersRepl != nil && oldStat.OpcountersRepl != nil {
|
||||||
|
|
Loading…
Reference in New Issue