feat(inputs.redis): Support of redis 6.2 ERRORSTATS (#13723)

This commit is contained in:
kell0gg 2023-08-09 06:39:57 +09:00 committed by GitHub
parent d259081c2e
commit 3fe151b28d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 0 deletions

View File

@ -164,6 +164,12 @@ and the elapsed time since the last rdb save (rdb\_last\_save\_time\_elapsed).
- lag(int, number) - lag(int, number)
- offset(int, number) - offset(int, number)
- redis_errorstat
- tags:
- err
- fields:
- total (int, number)
### Tags ### Tags
- All measurements have the following tags: - All measurements have the following tags:
@ -217,3 +223,9 @@ redis_command:
```text ```text
redis_cmdstat,command=publish,host=host,port=6379,replication_role=master,server=localhost calls=68113i,usec=325146i,usec_per_call=4.77 1559227136000000000 redis_cmdstat,command=publish,host=host,port=6379,replication_role=master,server=localhost calls=68113i,usec=325146i,usec_per_call=4.77 1559227136000000000
``` ```
redis_error:
```text
redis_errorstat,err=MOVED,host=host,port=6379,replication_role=master,server=localhost total=4284 1691119309000000000
```

View File

@ -419,6 +419,11 @@ func gatherInfoOutput(
gatherReplicationLine(name, kline, acc, tags) gatherReplicationLine(name, kline, acc, tags)
continue continue
} }
if section == "Errorstats" {
kline := strings.TrimSpace(parts[1])
gatherErrorstatsLine(name, kline, acc, tags)
continue
}
metric = name metric = name
} }
@ -597,6 +602,30 @@ func gatherReplicationLine(
acc.AddFields("redis_replication", fields, tags) acc.AddFields("redis_replication", fields, tags)
} }
// Parse the special Errorstats lines.
// Example:
//
// errorstat_ERR:count=37
// errorstat_MOVED:count=3626
func gatherErrorstatsLine(
name string,
line string,
acc telegraf.Accumulator,
globalTags map[string]string,
) {
tags := make(map[string]string, len(globalTags)+1)
for k, v := range globalTags {
tags[k] = v
}
tags["err"] = strings.TrimPrefix(name, "errorstat_")
kv := strings.Split(line, "=")
ival, err := strconv.ParseInt(kv[1], 10, 64)
if err == nil {
fields := map[string]interface{}{"total": ival}
acc.AddFields("redis_errorstat", fields, tags)
}
}
func init() { func init() {
inputs.Add("redis", func() telegraf.Input { inputs.Add("redis", func() telegraf.Input {
return &Redis{} return &Redis{}

View File

@ -277,6 +277,11 @@ func TestRedis_ParseMetrics(t *testing.T) {
} }
acc.AssertContainsTaggedFields(t, "redis_replication", replicationFields, replicationTags) acc.AssertContainsTaggedFields(t, "redis_replication", replicationFields, replicationTags)
errorStatsTags := map[string]string{"host": "redis.net", "replication_role": "master", "err": "MOVED"}
errorStatsFields := map[string]interface{}{"total": int64(3628)}
acc.AssertContainsTaggedFields(t, "redis_errorstat", errorStatsFields, errorStatsTags)
} }
func TestRedis_ParseFloatOnInts(t *testing.T) { func TestRedis_ParseFloatOnInts(t *testing.T) {
@ -514,6 +519,17 @@ cluster_enabled:0
cmdstat_set:calls=261265,usec=1634157,usec_per_call=6.25 cmdstat_set:calls=261265,usec=1634157,usec_per_call=6.25
cmdstat_command:calls=1,usec=990,usec_per_call=990.00 cmdstat_command:calls=1,usec=990,usec_per_call=990.00
# Errorstats
errorstat_CLUSTERDOWN:count=8
errorstat_CROSSSLOT:count=3
errorstat_ERR:count=172
errorstat_LOADING:count=4284
errorstat_MASTERDOWN:count=102
errorstat_MOVED:count=3628
errorstat_NOSCRIPT:count=4
errorstat_WRONGPASS:count=2
errorstat_WRONGTYPE:count=30
# Keyspace # Keyspace
db0:keys=2,expires=0,avg_ttl=0 db0:keys=2,expires=0,avg_ttl=0