Here is the PR that updates the 
docs https://github.com/prometheus/alertmanager/pull/4157

On Friday, December 6, 2024 at 1:22:08 PM UTC George Robinson wrote:

> Just to wrap this up, one of the reasons for this is to be consistent.
>
> If you have a matcher like applicationid=~"^SNSVC\d{7}$" and you ask 
> Alertmanager to write it back to a file, it will do it as 
> applicationid=~"^SNSVC\\d{7}$" (note the double escape). This is because 
> again it follows the Go escaping rules for strings when encoding it.
>
> By enforcing double quotes in the new parser, we now have consistency 
> between what you the user can write and what you see output from 
> Alertmanager. The behavior though is unchanged.
>
> I hope this makes sense
>
> George
>
> On Friday, December 6, 2024 at 12:58:54 PM UTC George Robinson wrote:
>
>> I just checked the code, and the reason `"\d"` needs to be escaped is we 
>> call strconv.Unquote <https://pkg.go.dev/strconv#Unquote> to unquote the 
>> right hand side of the expression. In other words, to turn `"\d"` into 
>> just `\d`.
>>
>> That means while the lexer accepts `"\d"`,  it is not a valid double 
>> quoted string that follows the Go escaping rules, and so it is rejected. 
>> However `"\\d"` is because when it is unquoted the second backslash is 
>> treated as an escape character and we end up with `\d`.
>>
>> The tl;dr here is that when using double quotes you need to follow Go's 
>> rules in double quoted strings.
>>
>> As Brian mentioned, this is separate from YAML escape rules.
>>
>> We can update the docs to make this clear.
>> On Friday, December 6, 2024 at 11:56:11 AM UTC George Robinson wrote:
>>
>>> I believe Brian is correct. In the new parser, backslash is an escape 
>>> character, so to write a literal backslash (for \d) it would need to be 
>>> escaped as \\. You'll find the same behavior in languages like Go where 
>>> "^SNSVC\d{7}$" is not a valid string (unknown escape sequence) and must 
>>> be written as "^SNSVC\\d{7}$".
>>>
>>> The suggestion in the log line gave you the correct matcher, but the 
>>> wrong explanation.
>>>
>>> We can add this to the documentation to make it clear.
>>>
>>> George
>>>
>>> On Friday, December 6, 2024 at 10:56:46 AM UTC Brian Candler wrote:
>>>
>>>> I checked at 
>>>> https://prometheus.io/docs/alerting/latest/configuration/#matcher
>>>>
>>>> AFAICS, it doesn't explicitly mention the behaviour of backslashes in 
>>>> UTF-8 matches. There is a specific note about the fallback behaviour of 
>>>> classic 
>>>> matchers 
>>>> <https://prometheus.io/docs/alerting/latest/configuration/#classic-matchers>
>>>>  though:
>>>>
>>>> "However, literal line feed characters are tolerated, as are single \ 
>>>> characters 
>>>> not followed by \, n, or ". They act as a literal backslash in that 
>>>> case."
>>>>
>>>> Assuming that UTF-8 matchers strictly require literal backslashes to be 
>>>> doubled (\\), this would explain why your expression was accepted by 
>>>> classic matchers but not UTF-8 matchers. The warning message "To make this 
>>>> input compatible with the UTF-8 matchers parser please make sure all 
>>>> regular expressions and values are double-quoted" could perhaps be 
>>>> improved 
>>>> to mention this possibility.
>>>>
>>>> On Friday, 6 December 2024 at 10:45:32 UTC Brian Candler wrote:
>>>>
>>>>> A bit more context would be helpful. Did you write:
>>>>>
>>>>> matchers:
>>>>>   - applicationid=~"^SNSVC\d{7}$"
>>>>>
>>>>> or something else?
>>>>>
>>>>> Testing with alertmanager 0.27, I think the problem is around handling 
>>>>> of the backslash. The following is accepted by amtool check-config:
>>>>>
>>>>> matchers:
>>>>>   - applicationid=~"^SNSVC\\d{7}$"
>>>>>
>>>>> but I've not checked if it matches as expected - you don't want to 
>>>>> match a literal backslash and d!
>>>>>
>>>>> This is also what the "suggestion" was telling you from the error 
>>>>> message, but then it's also having to escape things for logfmt logging, 
>>>>> which means double-quotes are preceded by backslash, and backslashes are 
>>>>> doubled. When it says:
>>>>> suggestion="applicationid=~\"^SNSVC\\\\d{7}$\""
>>>>> I think what it's actually suggesting is:
>>>>> applicationid=~"^SNSVC\\d{7}$"
>>>>>
>>>>> Unfortunately, YAML also has its own rules for backslashes. Because of 
>>>>> this complexity, I avoid backslashes in regexps where possible, for 
>>>>> example 
>>>>> using [.] instead of \. to match a literal dot.  In your case, you could 
>>>>> write:
>>>>>
>>>>> matchers:
>>>>>   - applicationid=~"^SNSVC[0-9]{7}$"
>>>>>
>>>>> and there would be no ambiguity.
>>>>>
>>>>> On Friday, 6 December 2024 at 09:58:28 UTC Chris Burke wrote:
>>>>>
>>>>>> Can someone please help explain the following Alertmanager warning.
>>>>>> I know it's trying to tell me that my value needs to be 
>>>>>> double-quoted, but it already is, so I do not understand what it is 
>>>>>> complaining about.
>>>>>> My config: applicationid=~"^SNSVC\d{7}$"
>>>>>>
>>>>>> Thanks for any help
>>>>>>
>>>>>> ts=2024-12-06T00:44:13.964Z caller=parse.go:176 level=warn 
>>>>>> msg="Alertmanager is moving to a new parser for labels and matchers, and 
>>>>>> this input is incompatible. Alertmanager has instead parsed the input 
>>>>>> using 
>>>>>> the classic matchers parser as a fallback. To make this input compatible 
>>>>>> with the UTF-8 matchers parser please make sure all regular expressions 
>>>>>> and 
>>>>>> values are double-quoted. If you are still seeing this message please 
>>>>>> open 
>>>>>> an issue." input="applicationid=~\"^SNSVC\\d{7}$\"" origin=config 
>>>>>> err="15:29: \"^SNSVC\\d{7}$\": invalid input" 
>>>>>> suggestion="applicationid=~\"^SNSVC\\\\d{7}$\""
>>>>>>
>>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"Prometheus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/prometheus-users/d5826655-5e9f-4158-9585-9f7af0378df0n%40googlegroups.com.

Reply via email to