Alertmanager en Kubernetes rejette les webhooks envoyés par Prometheus

Posté par georges01 le 16/09/2024
RÉSOLU

georges01

Membre depuis le 03/05/2024

actif

yo la team ! j'ai un souci avec mon stack Prometheus/Alertmanager sur K8s. Prometheus envoie bien les alerts à Alertmanager mais celui-ci les rejette avec un 400 Bad Request et des logs qui disent `Failed to decode webhook request: invalid character 'p' looking for beginning of value`


# excerpt from alertmanager-config.yaml
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  receiver: 'slack-notifications'

receivers:
  - name: 'slack-notifications'
    webhook_configs:
      - url: 'https://hooks.slack.com/services/TXXXX/BXXXX/XXXXXX'

les deux sont dans le même namespace. j'ai checké les services et les endpoints tout a l'air ok. pourquoi il rejette le payload ?

Commentaires

louis-alves

Membre depuis le 01/08/2019

actif

salut le `invalid character 'p'` ça sent le json mal formé. prometheus envoie du json nickel d'habitude. t'es sûr que ton url de webhook dans Alertmanager c'est pas une url qui attend un format spécifique ? genre un endpoint Slack attends un payload spécifique

marty-renee

Membre depuis le 20/06/2024

actif secouriste

ouais des fois les proxys ou des reverse-proxies au milieu déforment le payload. t'as un ingress ou un service mesh entre Prometheus et Alertmanager ? genre istio ou linkerd qui ré-écrit des trucs ?

georges01

Membre depuis le 03/05/2024

actif

non pas de service mesh. c'est du direct service to service. l'URL slack est pour l'exemple mais j'ai le même souci avec un webhook custom que j'ai mis pour débugger qui log le request body. et le body c'est bien le json de prometheus

louis-alves

Membre depuis le 01/08/2019

actif

ah ok c pas le webhook slack qui est mal formaté alors. le message `invalid character 'p' looking for beginning of value` peut arriver si tu envoies à Alertmanager un POST request avec un Content-Type qui n'est pas `application/json` ou `text/plain`. des fois un client mal configuré envoie `application/x-www-form-urlencoded`

marty-renee

Membre depuis le 20/06/2024

actif secouriste

c'est clair Alertmanager attends du JSON. t'as checké les logs de Prometheus pour voir exactement ce qu'il envoie ? et la config de ton `alertmanager.url` dans Prometheus ? il faut bien que ça soit le endpoint `/api/v2/alerts` d'Alertmanager

georges01

Membre depuis le 03/05/2024

actif

j'ai bien `alertmanager.url: http://alertmanager.monitoring.svc:9093/api/v2/alerts` dans ma config Prometheus. je vais aller regarder les requêtes http exactes que Prometheus envoie. ptete un souci de header Content-Type

louis-alves

Membre depuis le 01/08/2019

actif

oui c'est ça un `Content-Type: text/plain` au lieu de `application/json` et boom, Alertmanager voit le 'p' de 'payload' (ou n'importe quel premier char) comme un début de valeur pour un JSON qu'il attendait. c'est un bug classique

georges01

Membre depuis le 03/05/2024

actif

bordel c'était ça ! j'avais un proxy débile qui ré-écrivait les headers et transformait le content-type en text/plain. une fois corrigé, les alerts tombent dans Alertmanager. merci les gars !

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire