mirror of
https://github.com/prometheus/prometheus.git
synced 2025-01-13 14:57:40 -08:00
Allow metric and label names to begin with underscores (#2961)
While this is not recommended, it is allowed in our data model (https://prometheus.io/docs/concepts/data_model/). Fixes https://github.com/prometheus/prometheus/issues/2959
This commit is contained in:
parent
931f2705f2
commit
c6f41ce391
|
@ -39,7 +39,7 @@ const (
|
||||||
// the end of the file.
|
// the end of the file.
|
||||||
func (l *lexer) Lex() int {
|
func (l *lexer) Lex() int {
|
||||||
l.state = lstateInit
|
l.state = lstateInit
|
||||||
|
|
||||||
if l.i >= len(l.b) {
|
if l.i >= len(l.b) {
|
||||||
return eof
|
return eof
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,6 @@ func (l *lexer) Lex() int {
|
||||||
%}
|
%}
|
||||||
|
|
||||||
D [0-9]
|
D [0-9]
|
||||||
S [a-zA-Z]
|
|
||||||
L [a-zA-Z_]
|
L [a-zA-Z_]
|
||||||
M [a-zA-Z_:]
|
M [a-zA-Z_:]
|
||||||
|
|
||||||
|
@ -69,7 +68,7 @@ M [a-zA-Z_:]
|
||||||
#[^\r\n]*\n l.mstart = l.i
|
#[^\r\n]*\n l.mstart = l.i
|
||||||
[\r\n \t]+ l.mstart = l.i
|
[\r\n \t]+ l.mstart = l.i
|
||||||
|
|
||||||
{S}({M}|{D})* l.state = lstateName
|
{M}({M}|{D})* l.state = lstateName
|
||||||
l.offsets = append(l.offsets, l.i)
|
l.offsets = append(l.offsets, l.i)
|
||||||
l.mend = l.i
|
l.mend = l.i
|
||||||
|
|
||||||
|
@ -85,7 +84,7 @@ M [a-zA-Z_:]
|
||||||
<lstateLabels>(,?[ \t]*) l.state = lstateLName
|
<lstateLabels>(,?[ \t]*) l.state = lstateLName
|
||||||
l.offsets = append(l.offsets, l.i)
|
l.offsets = append(l.offsets, l.i)
|
||||||
|
|
||||||
<lstateLName>{S}({L}|{D})* l.offsets = append(l.offsets, l.i)
|
<lstateLName>{L}({L}|{D})* l.offsets = append(l.offsets, l.i)
|
||||||
<lstateLName>[ \t]*= l.state = lstateLValue
|
<lstateLName>[ \t]*= l.state = lstateLValue
|
||||||
|
|
||||||
<lstateLValue>[ \t]+
|
<lstateLValue>[ \t]+
|
||||||
|
@ -110,7 +109,7 @@ M [a-zA-Z_:]
|
||||||
}
|
}
|
||||||
l.state = lstateTimestamp
|
l.state = lstateTimestamp
|
||||||
|
|
||||||
<lstateTimestamp>[ \t]+ l.tstart = l.i
|
<lstateTimestamp>[ \t]+ l.tstart = l.i
|
||||||
<lstateTimestamp>{D}+ ts, err := strconv.ParseInt(yoloString(l.b[l.tstart:l.i]), 10, 64)
|
<lstateTimestamp>{D}+ ts, err := strconv.ParseInt(yoloString(l.b[l.tstart:l.i]), 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.err = err
|
l.err = err
|
||||||
|
@ -119,8 +118,8 @@ M [a-zA-Z_:]
|
||||||
l.ts = &ts
|
l.ts = &ts
|
||||||
<lstateTimestamp>[\r\n]+ l.nextMstart = l.i
|
<lstateTimestamp>[\r\n]+ l.nextMstart = l.i
|
||||||
return 1
|
return 1
|
||||||
<lstateTimestamp>\0 return 1
|
<lstateTimestamp>\0 return 1
|
||||||
|
|
||||||
%%
|
%%
|
||||||
l.err = fmt.Errorf("no token found")
|
l.err = fmt.Errorf("no token found")
|
||||||
return -1
|
return -1
|
||||||
|
|
|
@ -83,12 +83,12 @@ yystart1:
|
||||||
goto yyabort
|
goto yyabort
|
||||||
case c == '#':
|
case c == '#':
|
||||||
goto yystate4
|
goto yystate4
|
||||||
|
case c == ':' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
|
||||||
|
goto yystate6
|
||||||
case c == '\t' || c == '\n' || c == '\r' || c == ' ':
|
case c == '\t' || c == '\n' || c == '\r' || c == ' ':
|
||||||
goto yystate3
|
goto yystate3
|
||||||
case c == '\x00':
|
case c == '\x00':
|
||||||
goto yystate2
|
goto yystate2
|
||||||
case c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z':
|
|
||||||
goto yystate6
|
|
||||||
}
|
}
|
||||||
|
|
||||||
yystate2:
|
yystate2:
|
||||||
|
@ -327,7 +327,7 @@ yystart26:
|
||||||
goto yystate28
|
goto yystate28
|
||||||
case c == '\t' || c == ' ':
|
case c == '\t' || c == ' ':
|
||||||
goto yystate27
|
goto yystate27
|
||||||
case c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z':
|
case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
|
||||||
goto yystate29
|
goto yystate29
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,7 +436,7 @@ yyrule3: // [\r\n \t]+
|
||||||
l.mstart = l.i
|
l.mstart = l.i
|
||||||
goto yystate0
|
goto yystate0
|
||||||
}
|
}
|
||||||
yyrule4: // {S}({M}|{D})*
|
yyrule4: // {M}({M}|{D})*
|
||||||
{
|
{
|
||||||
l.state = lstateName
|
l.state = lstateName
|
||||||
l.offsets = append(l.offsets, l.i)
|
l.offsets = append(l.offsets, l.i)
|
||||||
|
@ -469,7 +469,7 @@ yyrule9: // (,?[ \t]*)
|
||||||
l.offsets = append(l.offsets, l.i)
|
l.offsets = append(l.offsets, l.i)
|
||||||
goto yystate0
|
goto yystate0
|
||||||
}
|
}
|
||||||
yyrule10: // {S}({L}|{D})*
|
yyrule10: // {L}({L}|{D})*
|
||||||
{
|
{
|
||||||
l.offsets = append(l.offsets, l.i)
|
l.offsets = append(l.offsets, l.i)
|
||||||
goto yystate0
|
goto yystate0
|
||||||
|
@ -543,7 +543,6 @@ yyrule20: // [\r\n]+
|
||||||
yyrule21: // \0
|
yyrule21: // \0
|
||||||
{
|
{
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
}
|
}
|
||||||
panic("unreachable")
|
panic("unreachable")
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,9 @@ go_gc_duration_seconds_count 99
|
||||||
some:aggregate:rate5m{a_b="c"} 1
|
some:aggregate:rate5m{a_b="c"} 1
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
# HELP go_goroutines Number of goroutines that currently exist.
|
||||||
# TYPE go_goroutines gauge
|
# TYPE go_goroutines gauge
|
||||||
go_goroutines 33 123123`
|
go_goroutines 33 123123
|
||||||
|
_metric_starting_with_underscore 1
|
||||||
|
testmetric{_label_starting_with_underscore="foo"} 1`
|
||||||
input += "\nnull_byte_metric{a=\"abc\x00\"} 1"
|
input += "\nnull_byte_metric{a=\"abc\x00\"} 1"
|
||||||
|
|
||||||
int64p := func(x int64) *int64 { return &x }
|
int64p := func(x int64) *int64 { return &x }
|
||||||
|
@ -103,6 +105,14 @@ go_goroutines 33 123123`
|
||||||
v: 33,
|
v: 33,
|
||||||
t: int64p(123123),
|
t: int64p(123123),
|
||||||
lset: labels.FromStrings("__name__", "go_goroutines"),
|
lset: labels.FromStrings("__name__", "go_goroutines"),
|
||||||
|
}, {
|
||||||
|
m: "_metric_starting_with_underscore",
|
||||||
|
v: 1,
|
||||||
|
lset: labels.FromStrings("__name__", "_metric_starting_with_underscore"),
|
||||||
|
}, {
|
||||||
|
m: "testmetric{_label_starting_with_underscore=\"foo\"}",
|
||||||
|
v: 1,
|
||||||
|
lset: labels.FromStrings("__name__", "testmetric", "_label_starting_with_underscore", "foo"),
|
||||||
}, {
|
}, {
|
||||||
m: "null_byte_metric{a=\"abc\x00\"}",
|
m: "null_byte_metric{a=\"abc\x00\"}",
|
||||||
v: 1,
|
v: 1,
|
||||||
|
|
Loading…
Reference in a new issue