юмор
March 22, 2022

"Нейронка" для определения ответственного за сервис

Недавно в одном из разговоров я упоминал, что на Prometheus-based стеке смог каждый алерт ассоциировать с командой, которая обслуживает сервис и в случае критических событий эта самая команда меншенится в Slack, чтобы привлечь её внимание. Что ж, показываю как это выглядит в реальности.

Суровая реальность такова – заводится вот такая вот структура (крутите по горизонтали, там 500+ символов):

owner_team:
  - &owner_team_by_labels_exported_namespace |
      {{if (match "finance" $labels.exported_namespace)}}finance_duty{{else if (match "storage|warehouse" $labels.exported_namespace)}}warehouse_duty{{else if (match "sso" $labels.exported_namespace)}}sso_duty{{else if (match "crm|bff-self-service-form|bff-offers" $labels.exported_namespace)}}crm_duty{{else if (match "loyalty-bonus" $labels.exported_namespace)}}finance_duty{{else if (match "loyalty" $labels.exported_namespace)}}crm_duty{{else if (match "communications-gateway|sms-sender|contractor-app-bff" $labels.exported_namespace)}}infogate_duty{{else}}-{{end -}}

В массиве, на самом деле, множество записей, чтобы определять команду по тому или иному признаку. После этого в лейблы алерта добавляем признак команды:

owner_team: *owner_team_by_labels_exported_namespace

В конфигурации ресивера включаем линк по именам:

slack_configs:
  - channel: "#alerts"
    link_names: true

В качестве шаблона футера определяем следующее:

{{ define "slack.default.footer" }}{{ if .CommonLabels.owner_team }}{{ if not (eq .CommonLabels.owner_team "-") }}Команда: @{{ .CommonLabels.owner_team }}{{ end }}{{ end }}{{ end }}

Easy-peasy.