Примеры шаблонов меток и аннотаций

Шаблонизация позволяет добавлять динамические данные из запросов в метки и аннотации оповещений. Динамические данные улучшают контекст оповещения, облегчая дежурным быструю оценку и устранение проблемы.

Эта страница содержит распространённые примеры шаблонизации меток и аннотаций. Дополнительные сведения о шаблонизации см. в:

Пример аннотации

Аннотации добавляют дополнительные детали к экземплярам оповещений и часто используются, чтобы предоставить полезную информацию для идентификации проблемы и руководства по реагированию.

Распространённый сценарий использования аннотаций — отобразить конкретное значение запроса или порог, вызвавшие срабатывание оповещения.

Например, вы можете отобразить значение запроса из переменной $values, чтобы сообщить о значении CPU, вызвавшем срабатывание оповещения.

CPU usage has exceeded 80% ({{ $values.A.value }}) for the last 5 minutes.

В качестве альтернативы вы можете использовать функцию index() для получения значения запроса следующим образом.

CPU usage has exceeded 80% ({{ index $values "A" }}) for the last 5 minutes.
template_output
CPU usage has exceeded 80% (81.2345) for the last 5 minutes.

Включение меток для дополнительных деталей

Чтобы предоставить дополнительный контекст, вы можете включить метки из запроса с помощью переменной $labels.

Например, предыдущий случай также может включать затронутый instance.

CPU usage for {{ $labels.instance }} has exceeded 80% ({{ $values.A.Value }}) for the last 5 minutes.
template_output
CPU usage for Instance 1 has exceeded 80% (81.2345) for the last 5 minutes.

Вы можете включить любые метки, возвращаемые запросом, в шаблон. Например, следующий шаблон включает информацию о среде и регионе, где произошло оповещение.

Alert triggered in {{ $labels.environment }} on {{ $labels.region }} region.
template_output
Alert triggered in production on AMER region.

Чтобы вывести значение instant-запроса, вы можете вывести его Ref ID с помощью функции index или переменной $values:

{{ $values.A.Value }}

Для range-запросов приведите их от временной серии к instant vector с помощью выражения reduce. Затем вы можете вывести результат, ссылаясь на его Ref ID. Например, если выражение reduce усредняет A с Ref ID B, вы затем выведите $values.B:

{{ $values.B.Value }}

Гуманизация значения запроса

Чтобы вывести гуманизированное (человекочитаемое) значение instant-запроса, используйте функцию humanize:

{{ humanize $values.A.Value }}

В качестве альтернативы:

{{ humanize (index $values "A").Value }}
template_output
554.9

Чтобы вывести значение instant-запроса в процентах, используйте функцию humanizePercentage:

{{ humanizePercentage $values.A.Value }}
template_output
10%

Дополнительные функции для отображения или форматирования данных см. в:

Пример метки

Метки определяют, как оповещения маршрутизируются и управляются, обеспечивая доставку уведомлений нужным командам в нужное время. Если метки, возвращаемые вашими запросами, не полностью отражают необходимый контекст, вы можете создать новую метку и задать её значение на основе данных запроса.

На основе значения запроса

Вот пример создания метки severity на основе значения запроса:

Go
{{- if (gt $values.A.Value 90.0) -}}critical
{{- else if (gt $values.A.Value 80.0) -}}high
{{- else if (gt $values.A.Value 60.0) -}}medium
{{- else -}}low
{{- end -}}

В этом примере метка severity определяется значением запроса:

  • critical для значений выше 90,
  • high для значений выше 80,
  • medium для значений выше 60,
  • и low для всего, что ниже.

Затем вы можете использовать метку severity, чтобы управлять тем, как обрабатываются оповещения. Например, вы можете отправлять оповещения critical немедленно, а оповещения серьёзности low маршрутизировать команде для дальнейшего расследования.

Примечание: Экземпляр оповещения уникально идентифицируется своим набором меток.

  • Избегайте отображения значений запроса в метках, так как это может создать множество экземпляров оповещений — по одному на каждый отдельный набор меток. Вместо этого используйте аннотации для значений запроса.
  • Если значение шаблонизированной метки меняется, оно сопоставляется с другим экземпляром оповещения, а предыдущий экземпляр считается устаревшим. Все детали см. в этом примере использования динамических меток.

На основе метки запроса

Вы можете использовать метки, чтобы различать оповещения, приходящие из разных сред (например, production, staging, dev). Например, вы можете захотеть добавить метку, задающую среду на основе метки экземпляра. Вот как её можно шаблонизировать:

Go
{{- if eq $labels.instance "prod-server-1" -}}
production
{{- else if eq $labels.instance "staging-server-1" -}}
staging
{{- else -}}
development
{{- end -}}

Это выведет:

  • Для экземпляра prod-server-1 метка будет production.
  • Для staging-server-1 метка будет staging.
  • Все остальные экземпляры будут помечены development.

Чтобы сделать этот шаблон более гибким, вы можете использовать регулярное выражение, сопоставляющее имя экземпляра с префиксом имени экземпляра, с помощью функции match():

Go
{{- if match "^prod-server-.*" $labels.instance -}}
production
{{- else if match "^staging-server-.*" $labels.instance -}}
staging
{{- else -}}
development
{{- end -}}