Skip to content

Instantly share code, notes, and snippets.

@cdalvaro
Forked from gelldur/Grafana Alert Template.md
Created January 3, 2024 10:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cdalvaro/86f26d6aea89c43c44922daa00749593 to your computer and use it in GitHub Desktop.
Save cdalvaro/86f26d6aea89c43c44922daa00749593 to your computer and use it in GitHub Desktop.
How to use Grafana Alerts with the Telegram
  • Template name: telegram.message
  • Content:
    {{- /* Telegram message to use: {{ template "telegram.message2" . }} */ -}}
    {{ define "__alerts_list" -}}
    {{ range . }}
    {{if ne (index .Labels "alertname") "" -}}
    {{ if eq .Status "firing" }}πŸ”΄{{ else }}🟒{{ end }}
        {{- if ne (index .Labels "severity") "" -}}
            <u><b>P{{ index .Labels "severity" }}</b></u> {{ end -}}
    <b>{{ index .Labels "alertname" }}</b> πŸ•™ {{ .StartsAt.Format "15:04:05    πŸ—“οΈ 2006-01-02" }}{{ end -}}
    {{ if len .Annotations }}
    <i>Annotations:</i>
        {{ range .Annotations.SortedPairs -}}
        - {{ .Name }}: {{ .Value }}
        {{ end -}}
    {{ end }}
    {{ if len .Labels -}}
    <i>Labels:</i>
        {{ range .Labels.SortedPairs -}}
        - {{ .Name }}: {{ .Value }}
        {{ end -}}
    {{ end }}
    <i>Value:</i> <pre>{{ .ValueString }}</pre>
        {{- if gt (len .GeneratorURL) 0 }}<a href="{{ .GeneratorURL }}">source</a>  |  {{ end }}
        {{- if gt (len .SilenceURL) 0 }}<a href="{{ .SilenceURL }}">πŸ”• silence</a>  |  {{ end }}
        {{- if gt (len .DashboardURL) 0 }}πŸ“ <a href="{{ .DashboardURL }}">dashboard</a>  |  {{ end }}
        {{- if gt (len .PanelURL) 0 }}<a href="{{ .PanelURL }}">panel</a> {{- end -}}
        <pre>--------</pre>
    {{- end -}} {{- /* range */ -}}
    {{- end -}} {{- /* define __alerts_list */ -}}
    
    {{ define "__telegram.title" -}}
    {{ if ne (index .CommonLabels "severity") "" }} <u><b>P{{ index .CommonLabels "severity" }}</b></u> {{ end -}}
    {{ if ne (index .CommonLabels "alertname") "" -}}
        [{{ index .CommonLabels "alertname" }}]
    {{- end -}}
    {{- end -}}{{- /* define __telegram */ -}}
    
    {{ define "telegram.message" }}
        {{ if gt (len .Alerts.Firing) 0 }}
        🚨 <b>ALARM</b> (#{{ .Alerts.Firing | len }})
        {{- template "__alerts_list" .Alerts.Firing }}{{ end -}}
        {{ if gt (len .Alerts.Resolved) 0 }}
        βœ… <b>RESOLVED</b>{{ template "__telegram.title" . }} (#{{ .Alerts.Resolved | len }})
        {{- template "__alerts_list" .Alerts.Resolved }}{{ end }}
    
    <a href="{{ .ExternalURL }}">πŸ“² Grafana</a>
    {{- end -}}

- Contact point | Optional Telegram settings | Message: `{{ template "telegram.message" . }}`
- Add verbose annotations to your alerts. Example: `The <code>{{ $labels.host }}</code> host is low on free space! Used: {{ $values.display.Value }}%` (where `display` is one of the queries).
- I usually add the following queries: `data` (the datasource query), `metric` (the reduce expression), `condition`, and `display`, which is `round($metric)`. [Multi-dimensional rules documentation](https://grafana.com/docs/grafana/next/alerting/alerting-rules/create-grafana-managed-rule).



Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment