Skip to content

Commit 7d69b5f

Browse files
committed
Modify pika exporter
1 parent 5c44d38 commit 7d69b5f

3 files changed

Lines changed: 41 additions & 10 deletions

File tree

tools/pika_exporter/exporter/client.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ func (c *client) InfoAllCommandList() (string, error) {
155155
"COMMAND_EXEC_COUNT": InfoConf.Execcount,
156156
"COMMANDSTATS": InfoConf.Commandstats,
157157
"ROCKSDB": InfoConf.Rocksdb,
158+
"BIGKEYS": InfoConf.BigKeys,
158159
}
159160
for section, flag := range sectionsMap {
160161
if flag {

tools/pika_exporter/exporter/metrics/bigkeys.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ func RegisterBigKeys() {
1111
var collectBigKeysMetrics = map[string]MetricConfig{
1212
"bigkeys_string": {
1313
Parser: &regexParser{
14-
name: "bigkeys_string",
15-
reg: regexp.MustCompile(
16-
`Type: string, key: (?P<key>[^,]+), key_length: (?P<key_length>\d+), value_length: (?P<value_length>\d+)`,
14+
name: "bigkeys_string",
15+
source: "bigkeys_output",
16+
reg: regexp.MustCompile(
17+
`(?s).*?#\s*String.*?Big\s+Keys\s+number:\s*\d+.*?Type:\s*string,\s*key:\s*(?P<key>[^,]+),\s*key_length:\s*(?P<key_length>\d+),\s*value_length:\s*(?P<value_length>\d+)`,
1718
),
1819
},
1920
MetricMeta: MetaDatas{
2021
{
21-
Name: "bigkeys_key_length",
22+
Name: "bigkeys_string_key_length",
2223
Help: "Big key length for string type",
2324
Type: metricTypeGauge,
2425
Labels: []string{LabelNameAddr, LabelNameAlias, "type", "key"},
@@ -35,9 +36,10 @@ var collectBigKeysMetrics = map[string]MetricConfig{
3536
},
3637
"bigkeys_complex": {
3738
Parser: &regexParser{
38-
name: "bigkeys_complex",
39-
reg: regexp.MustCompile(
40-
`Type: (?P<type>\w+), key: (?P<key>[^,]+), value_length: (?P<value_length>\d+), member_size: (?P<member_size>\d+)`,
39+
name: "bigkeys_complex",
40+
source: "bigkeys_output",
41+
reg: regexp.MustCompile(
42+
`(?s).*?#\s*(Hash|List|Set|ZSet).*?Big\s+Keys\s+number:\s*\d+.*?Type:\s*(?P<type>hash|list|set|zset),\s*key:\s*(?P<key>[^,]+),\s*key_length:\s*(?P<key_length>\d+),\s*member_size:\s*(?P<member_size>\d+)`,
4143
),
4244
},
4345
MetricMeta: MetaDatas{
@@ -49,11 +51,11 @@ var collectBigKeysMetrics = map[string]MetricConfig{
4951
ValueName: "member_size",
5052
},
5153
{
52-
Name: "bigkeys_value_length",
53-
Help: "Big key value length",
54+
Name: "bigkeys_complex_key_length",
55+
Help: "Big key length for complex type",
5456
Type: metricTypeGauge,
5557
Labels: []string{LabelNameAddr, LabelNameAlias, "type", "key"},
56-
ValueName: "value_length",
58+
ValueName: "key_length",
5759
},
5860
},
5961
},

tools/pika_exporter/exporter/parser.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,36 @@ func parseInfo(info string) (*semver.Version, map[string]string, error) {
2828
return version, extracts, nil
2929
}
3030

31+
func parseInfoBigkey(s string) string {
32+
scanner := bufio.NewScanner(strings.NewReader(s))
33+
var bigKeysContent strings.Builder
34+
isBigKeysSection := false
35+
36+
for scanner.Scan() {
37+
line := scanner.Text()
38+
39+
if strings.Contains(line, "# BigKeys statistics") {
40+
isBigKeysSection = true
41+
bigKeysContent.WriteString(line)
42+
bigKeysContent.WriteString("\n")
43+
continue
44+
}
45+
46+
if isBigKeysSection {
47+
bigKeysContent.WriteString(line)
48+
bigKeysContent.WriteString("\n")
49+
}
50+
}
51+
52+
return bigKeysContent.String()
53+
}
54+
3155
func extractInfo(s string) (map[string]string, error) {
3256
m := make(map[string]string)
57+
bigkeysOutput := parseInfoBigkey(s)
58+
if len(bigkeysOutput) > 0 {
59+
m["bigkeys_output"] = bigkeysOutput
60+
}
3361
scanner := bufio.NewScanner(strings.NewReader(s))
3462
for scanner.Scan() {
3563
line := scanner.Text()

0 commit comments

Comments
 (0)