Thanks for this, really appreciate it.
Was a bit thrown by the warning message focusing on the double quotes even 
though the value had them.
This clarifies thing nicely.
Thanks again!

On Saturday, December 7, 2024 at 2:44:13 AM UTC+13 George Robinson wrote:

> 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/815b97a8-7e93-43b7-ae36-f8f6f058901cn%40googlegroups.com.

Reply via email to