Skip to content

Commit c921d58

Browse files
committed
Modify pika exporter
1 parent 5c44d38 commit c921d58

3 files changed

Lines changed: 39 additions & 6 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: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ var collectBigKeysMetrics = map[string]MetricConfig{
1212
"bigkeys_string": {
1313
Parser: &regexParser{
1414
name: "bigkeys_string",
15+
source: "bigkeys_output",
1516
reg: regexp.MustCompile(
16-
`Type: string, key: (?P<key>[^,]+), key_length: (?P<key_length>\d+), value_length: (?P<value_length>\d+)`,
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
),
19+
Parser: &normalParser{},
1820
},
1921
MetricMeta: MetaDatas{
2022
{
21-
Name: "bigkeys_key_length",
23+
Name: "bigkeys_string_key_length",
2224
Help: "Big key length for string type",
2325
Type: metricTypeGauge,
2426
Labels: []string{LabelNameAddr, LabelNameAlias, "type", "key"},
@@ -36,9 +38,11 @@ var collectBigKeysMetrics = map[string]MetricConfig{
3638
"bigkeys_complex": {
3739
Parser: &regexParser{
3840
name: "bigkeys_complex",
41+
source: "bigkeys_output",
3942
reg: regexp.MustCompile(
40-
`Type: (?P<type>\w+), key: (?P<key>[^,]+), value_length: (?P<value_length>\d+), member_size: (?P<member_size>\d+)`,
43+
`(?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+)`,
4144
),
45+
Parser: &normalParser{},
4246
},
4347
MetricMeta: MetaDatas{
4448
{
@@ -49,11 +53,11 @@ var collectBigKeysMetrics = map[string]MetricConfig{
4953
ValueName: "member_size",
5054
},
5155
{
52-
Name: "bigkeys_value_length",
53-
Help: "Big key value length",
56+
Name: "bigkeys_complex_key_length",
57+
Help: "Big key length for complex type",
5458
Type: metricTypeGauge,
5559
Labels: []string{LabelNameAddr, LabelNameAlias, "type", "key"},
56-
ValueName: "value_length",
60+
ValueName: "key_length",
5761
},
5862
},
5963
},

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)