Skip to content

Alertmanager Pushover HTML is not rendering #8152

@onedr0p

Description

@onedr0p

@heliapb This PR broke HTML rendering for me. I upgraded to 0.87.0 and changed none of my configs, now HTML will not render in my notifications.

You can see html is set to true, monospace is set to false in my applied config:

kubectl get alertmanagerconfigs.monitoring.coreos.com -n observability alertmanager -oyaml
apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
  creationTimestamp: "2025-11-01T17:05:04Z"
  generation: 3
  labels:
    kustomize.toolkit.fluxcd.io/name: kube-prometheus-stack
    kustomize.toolkit.fluxcd.io/namespace: observability
  name: alertmanager
  namespace: observability
  resourceVersion: "37268901"
  uid: 430cb801-8300-466f-addc-b844c14fbfd2
spec:
  inhibitRules:
  - equal:
    - alertname
    - namespace
    sourceMatch:
    - matchType: =
      name: severity
      value: critical
    targetMatch:
    - matchType: =
      name: severity
      value: warning
  receivers:
  - name: blackhole
  - name: buddy-heartbeat
    webhookConfigs:
    - httpConfig:
        bearerTokenSecret:
          key: BUDDY_HEARTBEAT_TOKEN
          name: alertmanager-secret
      urlSecret:
        key: BUDDY_HEARTBEAT_URL
        name: alertmanager-secret
  - name: pushover
    pushoverConfigs:
    - html: true
      message: |-
        {{- range .Alerts }}
          {{- if ne .Annotations.description "" }}
            {{ .Annotations.description }}
          {{- else if ne .Annotations.summary "" }}
            {{ .Annotations.summary }}
          {{- else if ne .Annotations.message "" }}
            {{ .Annotations.message }}
          {{- else }}
            Alert description not available
          {{- end }}
          {{- if gt (len .Labels.SortedPairs) 0 }}
            <small>
              {{- range .Labels.SortedPairs }}
                <b>{{ .Name }}:</b> {{ .Value }}
              {{- end }}
            </small>
          {{- end }}
        {{- end }}
      monospace: false
      priority: '{{ if eq .Status "firing" }}1{{ else }}0{{ end }}'
      sendResolved: true
      sound: gamelan
      title: '[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing
        | len }}{{ end }}] {{ .CommonLabels.alertname }}'
      token:
        key: ALERTMANAGER_PUSHOVER_TOKEN
        name: alertmanager-secret
      ttl: 86400s
      urlTitle: View in Alertmanager
      userKey:
        key: PUSHOVER_USER_KEY
        name: alertmanager-secret
  route:
    groupBy:
    - alertname
    - cluster
    - job
    groupInterval: 5m
    groupWait: 1m
    receiver: pushover
    repeatInterval: 12h
    routes:
    - matchers:
      - matchType: =
        name: alertname
        value: InfoInhibitor
      receiver: blackhole
    - groupInterval: 2m
      groupWait: 0s
      matchers:
      - matchType: =
        name: alertname
        value: Watchdog
      receiver: buddy-heartbeat
      repeatInterval: 2m30s
    - matchers:
      - matchType: =
        name: severity
        value: critical
      receiver: pushover

Originally posted by @onedr0p in #8018 (comment)

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions