VictoriaMetrics: vmalert та query() в алерті для різних $value
0 (0)

Автор |  26/03/2026
Click to rate this post!
[Total: 0 Average: 0]

Просто коротка замітка, бо доволі часто треба було щось подібне зробити – і тільки сьогодні дізнався, як це круто робиться з vmalert.

Отже, іноді в алерті хочеться вивести кілька $value, наприклад:

- alert: OpenAI Budget Usage
  expr: |
    openai_budget_used_usd / openai_budget_total_usd * 100 > 80
  ...
  annotations:
    summary: OpenAI Budget Usage
    description: |-
      OpenAI budget used amount is greater than 80% of the total budget
      *Budget used percentage*: < $value from the openai_budget_used_usd >
      *Budget used amount*: < $value from the expr: openai_budget_used_usd / openai_budget_total_usd * 100 >
      *Budget total amount*: < $value from the openai_budget_total_usd >

Але в дефолтних алертах для Prometheus у нас такої можливості нема.

Єдиний варіант там вивести $value не з expr – це використати valueFrom:

- alert: OpenAI Spending Too High Warning
  expr: (project_spending_current > project_spending_avg_3d * 1.3) > 3
  ...
  valueFrom:
    metric: project_spending_today
  annotations:
    summary: 'OpenAI Spending Too High'
    description: |-
      Current OpenAI project spending exceeds the 3-day average by 30%
      *Project*: `{{ $labels.project }}`
      *Spent today*: `{{ $value }}`

(правда, не знаю як це працювало, бо зараз ніде в документації valueFrom не можу знайти – але колись воно в мене працювало саме так)

В такому варіанті алерта – він спрацює на умову в expr: (project_spending_current > project_spending_avg_3d * 1.3) > 3, але в `*Spent today*: {{ $value }} буде значення метрики з valueFrommetric: project_spending_today.

Але vmalert має Template functions, де окрім “стандартних” функцій, які є і для Promethues, є власна для vmalert функція query(), яку можемо викликати прямо з алерту, наприклад:

- alert: OpenAI Budget Usage
  expr: |
    openai_budget_used_usd / openai_budget_total_usd * 100 > 80
  ...
  annotations:
    summary: OpenAI Budget Usage
    description: |-
      OpenAI budget used amount is greater than 80% of the total budget
      *Budget used percentage*: `{{ printf "%.0f" $value }}%`
      *Budget used amount*: `{{ printf "%.0f" (query "openai_budget_used_usd" | first | value) }}` USD
      *Budget total amount*: `{{ printf "%.0f" (query "openai_budget_total_usd" | first | value) }}` USD

І тут:

  • *Budget used percentage*: `{{ printf “%.0f” $value }}%`: значення з expr: openai_budget_used_usd / openai_budget_total_usd * 100
  • *Budget used amount*: `{{ printf “%.0f” (query “openai_budget_used_usd” | first | value) }}` USD: значення з openai_budget_used_usd, де first – “взяти перше (останнє) значення метрики”
  • *Budget total amount*: `{{ printf “%.0f” (query “openai_budget_total_usd” | first | value) }}` USD: аналогічно, але з метрики openai_budget_total_usd

І в результаті маємо алерт, в якому відразу бачимо всі необхідні дані:

Готово.

“Ви ще не користуєтесь VictoriaMetrics? Тоді ми йдемо до вас!” (с)

Ну і головний висновок: RTFM! Треба частіше читати мануали, тим більш у VictoriaMetrics чудова документація.

Loading