> It is basically possible by converting the message in a wildcard 
structure acceptable by Google Chat API

I don't know what you mean by a "wildcard structure".  Can you give an 
example, and/or point to documentation?  Is it using tags within the 
message field, or does it require a different JSON structure entirely?

On Wednesday, 14 June 2023 at 05:12:53 UTC+1 Near N wrote:

> Correct, that's same calert I was mentioning previously. I understand the 
> use case of default template, but thought it is possible to do highlighting 
> within the template. It is basically possible by converting the message in 
> a wildcard structure acceptable by Google Chat API, but I couldn't find any 
> options to do so with calert template, but thanks for suggestions
>
> понедельник, 12 июня 2023 г. в 19:43:10 UTC+6, Brian Candler: 
>
>> If we're talking about the same "calert 
>> <https://github.com/mr-karan/calert>" then it looks like it already 
>> supports user-supplied templating of the message content:
>>
>> https://github.com/mr-karan/calert/blob/main/internal/providers/google_chat/message.go#L18-L53
>>
>> The sample config shows how to configure it:
>> https://github.com/mr-karan/calert/blob/main/config.sample.toml#L13
>> https://github.com/mr-karan/calert/blob/main/static/message.tmpl
>>
>> If you want to do colours and highlighting, it would depend whether the 
>> Google Chat API accepts HTML tags, or some other way of marking up the 
>> content. You'll need to find that out.
>>
>> The variables available in the templates look to be very similar to those 
>> provided in Alertmanager templates:
>> https://prometheus.io/docs/alerting/latest/notifications/
>> https://prometheus.io/docs/alerting/latest/notification_examples/
>>
>> In fact, there's a test case which uses exactly the alertmanager code (an 
>> instance of alertmgrtmpl.Alert) to drive it:
>>
>> https://github.com/mr-karan/calert/blob/main/internal/providers/google_chat/google_chat_test.go#L27-L35
>>
>> On Monday, 12 June 2023 at 11:33:32 UTC+1 Near N wrote:
>>
>>> Brian, thanks for pointing to other integrations. The reason why I was 
>>> wondering about curling the messages is that the existing solution (Calert) 
>>> provides little information about templating options. Alerts are incoming, 
>>> but with tight information. I'd love to highlight severity in different 
>>> colors, add warning icons, e.g. something similar to Zabbix or at least 
>>> that can suit basic user-friendly message. 
>>>
>>> понедельник, 12 июня 2023 г. в 16:06:34 UTC+6, Brian Candler: 
>>>
>>>> I can't speak for the project, but my guess would be it's out of scope. 
>>>> There are many existing integrations which use the existing webhook 
>>>> mechanism:
>>>>
>>>> https://prometheus.io/docs/operating/integrations/#alertmanager-webhook-receiver
>>>> Doing it externally allows the request to be enriched with other data 
>>>> which wouldn't be available in a template, and to use a variety of 
>>>> outbound 
>>>> authentication mechanisms which Alertmanager itself doesn't implement, or 
>>>> even non-HTTP protocols like STOMP.
>>>>
>>>> In any case, text templating is a nasty and insecure way to create JSON 
>>>> or XML payloads.
>>>>
>>>> > it is possible to converse the receivable JSON on the hop and just 
>>>> send notifications via curl method
>>>>
>>>> You'd first have to *receive* the webhook payload from Alertmanager, 
>>>> which involves plugging your curl script into a webserver somehow. You 
>>>> could probably write one as a CGI script under Apache, for example.
>>>>
>>>> But why would you do that, when you have an existing tested and working 
>>>> solution?
>>>>
>>>> On Monday, 12 June 2023 at 08:13:50 UTC+1 Near N wrote:
>>>>
>>>>> Thanks for reply  Brian. I do realize, that Google Chat API requires a 
>>>>> particular JSON format, but was assuming Alertmanager is capable of doing 
>>>>> it by using particular template, which is wrong. Now the questions is 
>>>>> whether it is worth creating a PR to create such a feature or it is out 
>>>>> of 
>>>>> Alertmanager's standard scope?
>>>>>
>>>>> Another question is perhaps it is possible to converse the receivable 
>>>>> JSON on the hop and just send notifications via curl method? I mean if 
>>>>> the 
>>>>> endpoint contains the following alert "
>>>>> [{"annotations":{"server":"main","number_of_nodes":"1"},"endsAt":"2023-06-12T07:02:00.233Z","fingerprint":"b21bf244f87cd47f","receivers":[{"name":"my_alerts"}],"startsAt":"2023-06-12T06:44:00.233Z","status":{"inhibitedBy":[],"silencedBy":[],"state":"active"},"updatedAt":"2023-06-12T06:58:00.424Z","generatorURL":"
>>>>> http://app1:8880/vmalert/alert?group_id=71689142540802366","labels":{"alertgroup":"INFRA","alertname":"The
>>>>>  
>>>>> number of available Cassandra nodes has 
>>>>> changed","server":"main","severity":"Critical"}}]", would it be possible 
>>>>> to 
>>>>> retrieve this json and post it via curl? This, I assume, wouldn't solve 
>>>>> my 
>>>>> problem, cause I believe Google API expects something peculiar in terms 
>>>>> of 
>>>>> the message it receives.
>>>>>
>>>>> понедельник, 12 июня 2023 г. в 13:04:17 UTC+6, Brian Candler: 
>>>>>
>>>>>> > Invalid JSON payload received.
>>>>>>
>>>>>> Alertmanager's webhook sends a JSON message with a *fixed* payload 
>>>>>> format. See
>>>>>>
>>>>>> https://prometheus.io/docs/alerting/latest/configuration/#webhook_config
>>>>>> *"The Alertmanager will send HTTP POST requests in the following JSON 
>>>>>> format to the configured endpoint"*
>>>>>>
>>>>>> You can't override it with a template. The Alertmanager JSON format 
>>>>>> is different to what Google Chat requires, and therefore you can't send 
>>>>>> it 
>>>>>> directly.
>>>>>>
>>>>>> That's why you need a separate piece of software to do the conversion 
>>>>>> (Calert in your case) - it receives the Alertmanager webhook JSON 
>>>>>> payload, 
>>>>>> builds a new payload for the target, and then sends it there.
>>>>>>
>>>>>> On Monday, 12 June 2023 at 06:59:14 UTC+1 Near N wrote:
>>>>>>
>>>>>>> Good day. I was wondering if there is a way to configure 
>>>>>>> alertmanager to send notifications to google chat via a webhook. 
>>>>>>>
>>>>>>> The current setup that I use consists of vmalert (loaded with set of 
>>>>>>> promQL compatible rules) >> Alertmanager (to group them up) and Calert 
>>>>>>> (to 
>>>>>>> send them to google chat). Despite the flowchart is working fine, I 
>>>>>>> found 
>>>>>>> it difficult to amend proposed message template, so decided to simplify 
>>>>>>> it 
>>>>>>> by configuring alertmanager to send the alerts. It dawns on me that it 
>>>>>>> can 
>>>>>>> operate, but I seem to have failed to fine-tune it. Any help would be 
>>>>>>> appreciated. The alertmanager.yml is below:
>>>>>>>
>>>>>>> global:
>>>>>>> http_config:
>>>>>>> proxy_url: '{{ alertmanager_proxy_url }}'
>>>>>>>
>>>>>>> route:
>>>>>>> receiver: 'my_alerts'
>>>>>>> group_wait: 30s
>>>>>>> group_interval: 60s
>>>>>>> repeat_interval: 15m
>>>>>>> group_by: ['room', 'alertName']
>>>>>>>
>>>>>>> receivers:
>>>>>>> - name: 'my_alerts'
>>>>>>> webhook_configs:
>>>>>>> - url: '{{ alertmanager_chat_webhook }}'
>>>>>>> send_resolved: true
>>>>>>>
>>>>>>> templates:
>>>>>>> - '{{ alertmanager_working_directory }}/google-chat.tmpl'
>>>>>>>
>>>>>>>
>>>>>>> And here is the error of alertmanager trying to send an alert:
>>>>>>>
>>>>>>> Jun 12 05:26:00 app1-cp alertmanager[140337]: 
>>>>>>> ts=2023-06-12T05:26:00.599Z caller=dispatch.go:352 level=error 
>>>>>>> component=dispatcher msg="Notify for alerts failed" num_alerts=3 
>>>>>>> err="my_alerts/webhook[0]: notify retry canceled due to unrecoverable 
>>>>>>> error 
>>>>>>> after 1 attempts: unexpected status code 400: 
>>>>>>> https://chat.googleapis.com/v1/spaces/webook_token: {\n  \"error\": 
>>>>>>> {\n    \"code\": 400,\n    \"message\": \"Invalid JSON payload 
>>>>>>> received. 
>>>>>>> Unknown name \\\"receiver\\\" at 'message': Cannot find 
>>>>>>> field.\\nInvalid 
>>>>>>> JSON payload received. Unknown name \\\"status\\\" at 'message': Cannot 
>>>>>>> find field.\\nInvalid JSON payload received. Unknown name 
>>>>>>> \\\"alerts\\\" at 
>>>>>>> 'message': Cannot find field.\\nInvalid JSON payload received. Unknown 
>>>>>>> name 
>>>>>>> \\\"groupLabels\\\" at 'message': Cannot find field.\\nInvalid JSON 
>>>>>>> payload 
>>>>>>> received. Unknown name \\\"commonLabels\\\" at 'message': Cannot find 
>>>>>>> field.\\nInvalid JSON payload received. Unknown name 
>>>>>>> \\\"commonAnnotations\\\" at 'message': Cannot find field.\\nInvalid 
>>>>>>> JSON 
>>>>>>> payload received. Unknown name \\\"externalURL\\\" at 'message': Cannot 
>>>>>>> find field.\\nInvalid JSON payload received. Unknown name 
>>>>>>> \\\"version\\\" 
>>>>>>> at 'message': Cannot find field.\\nInvalid JSON payload received. 
>>>>>>> Unknown 
>>>>>>> name \\\"groupKey\\\" at 'message': Cannot find field.\\nInvalid JSON 
>>>>>>> payload received. Unknown name \\\"truncatedAlerts\\\" at 'message': 
>>>>>>> Cannot 
>>>>>>> find field.\",\n    \"status\": \"INVALID_ARGUMENT\",\n    \"details\": 
>>>>>>> [\n 
>>>>>>>      {\n        \"@type\": \"
>>>>>>> type.googleapis.com/google.rpc.BadRequest\ 
>>>>>>> <http://type.googleapis.com/google.rpc.BadRequest%5C>",\n       
>>>>>>>  \"fieldViolations\": [\n          {\n            \"field\": 
>>>>>>> \"message\",\n 
>>>>>>>            \"description\": \"Invalid JSON payload received. Unknown 
>>>>>>> name 
>>>>>>> \\\"receiver\\\" at 'message': Cannot find field.\"\n          },\n     
>>>>>>>     
>>>>>>>  {\n            \"field\": \"message\",\n            \"description\": 
>>>>>>> \"Invalid JSON payload received. Unknown name \\\"status\\\" at 
>>>>>>> 'message': 
>>>>>>> Cannot find field.\"\n          },\n          {\n            \"field\": 
>>>>>>> \"message\",\n            \"description\": \"Invalid JSON payload 
>>>>>>> received. 
>>>>>>> Unknown name \\\"alerts\\\" at 'message': Cannot find field.\"\n        
>>>>>>>  
>>>>>>>  },\n          {\n            \"field\": \"message\",\n           
>>>>>>>  \"description\": \"Invalid JSON payload received. Unknown name 
>>>>>>> \\\"groupLabels\\\" at 'message': Cannot find field.\"\n          },\n  
>>>>>>>    
>>>>>>>      {\n            \"field\": \"message\",\n            
>>>>>>> \"description\": 
>>>>>>> \"Invalid JSON payload received. Unknown name \\\"commonLabels\\\" at 
>>>>>>> 'message': Cannot find field.\"\n          },\n          {\n           
>>>>>>>  \"field\": \"message\",\n            \"description\": \"Invalid JSON 
>>>>>>> payload received. Unknown name \\\"commonAnnotations\\\" at 'message': 
>>>>>>> Cannot find field.\"\n          },\n          {\n            \"field\": 
>>>>>>> \"message\",\n            \"description\": \"Invalid JSON payload 
>>>>>>> received. 
>>>>>>> Unknown name \\\"externalURL\\\" at 'message': Cannot find field.\"\n   
>>>>>>>     
>>>>>>>    },\n          {\n            \"field\": \"message\",\n           
>>>>>>>  \"description\": \"Invalid JSON payload received. Unknown name 
>>>>>>> \\\"version\\\" at 'message': Cannot find field.\"\n          },\n      
>>>>>>>    
>>>>>>>  {\n            \"field\": \"message\",\n            \"description\": 
>>>>>>> \"Invalid JSON payload received. Unknown name \\\"groupKey\\\" at 
>>>>>>> 'message': Cannot find field.\"\n          },\n          {\n           
>>>>>>>  \"field\": \"message\",\n            \"description\": \"Invalid JSON 
>>>>>>> payload received. Unknown name \\\"truncatedAlerts\\\" at 'message': 
>>>>>>> Cannot 
>>>>>>> find field.\"\n          }\n        ]\n      }\n    ]\n  }\n}\n"
>>>>>>>
>>>>>>>

-- 
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 on the web visit 
https://groups.google.com/d/msgid/prometheus-users/698b1600-e78d-4df6-9884-f6a932270738n%40googlegroups.com.

Reply via email to