Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Оповещения

На основе метрик можно настроить оповещения и получать уведомления о проблемах. В этом разделе приведены примеры настройки с использованием правил Prometheus. Полный файл alerts.yml доступен в репозитории tarantool/grafana-dashboard на GitHub.

Метрики Tarantool

С помощью внутренних метрик Tarantool можно отслеживать детальное потребление оперативной памяти, состояние репликации, статус движка базы данных, выявлять проблемы бизнес-логики (например, HTTP-ответы 4xx и 5xx или низкую частоту запросов) и статистику внешних модулей (например, ошибки CRUD). Таймауты расчета, уровни важности и пороговые значения (особенно для бизнес-логики) приведены здесь как пример: для конкретного приложения их, возможно, потребуется увеличить или уменьшить. Также задайте корректные временные интервалы для оценки частоты согласно конфигурации Prometheus.

Память Lua

Благодаря мониторингу метрики tnt_info_memory_lua можно предотвратить переполнение памяти и выявить некорректные практики работы с Lua-кодом.

- alert: HighLuaMemoryWarning  expr: tnt_info_memory_lua >= (512 * 1024 * 1024)  for: 1m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') Lua runtime warning"    description: "'{{ $labels.alias }}' instance of job '{{ $labels.job }}' uses too much Lua memory      and may hit threshold soon."- alert: HighLuaMemoryAlert  expr: tnt_info_memory_lua >= (1024 * 1024 * 1024)  for: 1m  labels:    severity: page  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') Lua runtime alert"    description: "'{{ $labels.alias }}' instance of job '{{ $labels.job }}' uses too much Lua memory      and likely to hit threshold soon."

Память для memtx Arena

При достижении лимитов экземпляр Tarantool станет недоступен для операций записи. Чтобы вовремя это отследить, можно использовать статистику распределения slab. Она покажет, сколько свободной оперативной памяти осталось для хранения кортежей и индексов memtx на экземпляре. С помощью такого оповещения можно понять, когда необходимо увеличить лимит memtx_memory или добавить новое хранилище в кластер vshard.

- alert: LowMemtxArenaRemainingWarning  expr: (tnt_slab_quota_used_ratio >= 80) and (tnt_slab_arena_used_ratio >= 80)  for: 1m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') low arena memory remaining"    description: "Low arena memory (tuples and indexes) remaining for '{{ $labels.alias }}' instance of job '{{ $labels.job }}'.      Consider increasing memtx_memory or number of storages in case of sharded data."- alert: LowMemtxArenaRemaining  expr: (tnt_slab_quota_used_ratio >= 90) and (tnt_slab_arena_used_ratio >= 90)  for: 1m  labels:    severity: page  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') low arena memory remaining"    description: "Low arena memory (tuples and indexes) remaining for '{{ $labels.alias }}' instance of job '{{ $labels.job }}'.      You are likely to hit limit soon.      It is strongly recommended to increase memtx_memory or number of storages in case of sharded data."- alert: LowMemtxItemsRemainingWarning  expr: (tnt_slab_quota_used_ratio >= 80) and (tnt_slab_items_used_ratio >= 80)  for: 1m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') low items memory remaining"    description: "Low items memory (tuples) remaining for '{{ $labels.alias }}' instance of job '{{ $labels.job }}'.      Consider increasing memtx_memory or number of storages in case of sharded data."- alert: LowMemtxItemsRemaining  expr: (tnt_slab_quota_used_ratio >= 90) and (tnt_slab_items_used_ratio >= 90)  for: 1m  labels:    severity: page  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') low items memory remaining"    description: "Low items memory (tuples) remaining for '{{ $labels.alias }}' instance of job '{{ $labels.job }}'.      You are likely to hit limit soon.      It is strongly recommended to increase memtx_memory or number of storages in case of sharded data."

Состояние движка Vinyl

Оповещения о производительности регулятора vinyl укажут на возможные проблемы с планировщиком или диском.

- alert: LowVinylRegulatorRateLimit  expr: tnt_vinyl_regulator_rate_limit < 100000  for: 1m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') have low vinyl regulator rate limit"    description: "Instance '{{ $labels.alias }}' of job '{{ $labels.job }}' have low vinyl engine regulator rate limit.      This indicates issues with the disk or the scheduler."

Ошибки транзакций Vinyl могут вызывать ошибки при обработке пользовательских запросов.

- alert: HighVinylTxConflictRate  expr: rate(tnt_vinyl_tx_conflict[5m]) / rate(tnt_vinyl_tx_commit[5m]) > 0.05  for: 1m  labels:    severity: critical  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') have high vinyl tx conflict rate"    description: "Instance '{{ $labels.alias }}' of job '{{ $labels.job }}' have      high vinyl transactions conflict rate. It indicates that vinyl is not healthy."

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

- alert: HighVinylSchedulerFailedTasksRate  expr: rate(tnt_vinyl_scheduler_tasks{status="failed"}[5m]) > 0.1  for: 1m  labels:    severity: critical  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') have high vinyl scheduler failed tasks rate"    description: "Instance '{{ $labels.alias }}' of job '{{ $labels.job }}' have      high vinyl scheduler failed tasks rate."

Состояние репликации

Если значение tnt_replication_status равно 0, статус репликации экземпляра не равен follows, а значит, репликация либо еще не готова, либо остановлена по какой-то причине.

- alert: ReplicationNotRunning  expr: tnt_replication_status == 0  for: 1m  labels:    severity: critical  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') {{ $labels.stream }} (id {{ $labels.id }})      replication is not running"    description: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') {{ $labels.stream }} (id {{ $labels.id }})      replication is not running."

Даже если асинхронная репликация находится в состоянии "follows", о её неисправности может свидетельствовать слишком высокий лаг. Это также может влиять на работу сборщика мусора Tarantool (см. описание функции box.info.gc()).

- alert: HighReplicationLag  expr: tnt_replication_lag > 1  for: 1m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') have high replication lag (id {{ $labels.id }})"    description: "Instance '{{ $labels.alias }}' of job '{{ $labels.job }}' have high replication lag      (id {{ $labels.id }}), check up your network and cluster state."

Событийный цикл

Высокое время событийного цикла fiber приводит к снижению производительности приложения, таймаутам и различным предупреждениям. Причиной может быть большое количество работающих файберов или файберы, которые слишком долго работают без передачи управления (yield) или сна.

- alert: HighEVLoopTime  expr: tnt_ev_loop_time > 0.1  for: 1m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') event loop has high cycle duration"    description: "Instance '{{ $labels.alias }}' of job '{{ $labels.job }}' event loop has high cycle duration.      Some high loaded fiber has too little yields. It may be the reason of 'Too long WAL write' warnings."

Состояние конфигурации

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

- alert: ConfigWarningAlerts  expr: tnt_config_alerts{level="warn"} > 0  for: 1m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') has configuration 'warn' alerts"    description: "Instance '{{ $labels.alias }}' of job '{{ $labels.job }}' has configuration 'warn' alerts.                  Please, check config:info() for detailed info."- alert: ConfigErrorAlerts  expr: tnt_config_alerts{level="error"} > 0  for: 1m  labels:    severity: page  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') has configuration 'error' alerts"    description: "Instance '{{ $labels.alias }}' of job '{{ $labels.job }}' has configuration 'error' alerts.                  Latest configuration has not been applied.                  Please, check config:info() for detailed info."- alert: ConfigStatusNotReady  expr: tnt_config_status{status="ready"} == 0  for: 5m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') configuration is not ready"    description: "Instance '{{ $labels.alias }}' of job '{{ $labels.job }}' configuration is not ready.                  Please, check config:info() for detailed info."

Статистика HTTP-сервера

Модуль metrics отслеживает обработчики tarantool/http, см. раздел Сбор HTTP-метрик. Здесь используется коллектор summary с именем по умолчанию и вычислением 0.99 квантиля.

Большое количество ответов с кодами ошибок обычно указывает на проблемы с API или некорректную работу приложения.

- alert: HighInstanceHTTPClientErrorRate  expr: sum by (job, instance, method, path, alias) (rate(http_server_request_latency_count{ job="tarantool", status=~"^4\d{2}$" }[5m])) > 10  for: 1m  labels:    severity: page  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') high rate of client error responses"    description: "Too many {{ $labels.method }} requests to {{ $labels.path }} path       on '{{ $labels.alias }}' instance of job '{{ $labels.job }}' get client error (4xx) responses."- alert: HighHTTPClientErrorRate  expr: sum by (job, method, path) (rate(http_server_request_latency_count{ job="tarantool", status=~"^4\d{2}$" }[5m])) > 20  for: 1m  labels:    severity: page  annotations:    summary: "Job '{{ $labels.job }}' high rate of client error responses"    description: "Too many {{ $labels.method }} requests to {{ $labels.path }} path      on instances of job '{{ $labels.job }}' get client error (4xx) responses."- alert: HighHTTPServerErrorRate  expr: sum by (job, instance, method, path, alias) (rate(http_server_request_latency_count{ job="tarantool", status=~"^5\d{2}$" }[5m])) > 0  for: 1m  labels:    severity: page  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') server error responses"    description: "Some {{ $labels.method }} requests to {{ $labels.path }} path       on '{{ $labels.alias }}' instance of job '{{ $labels.job }}' get server error (5xx) responses."

Ответы с высокой задержкой указывают на недостаточную производительность. Это может быть вызвано некорректной работой приложения либо недостаточным количеством роутеров в кластере.

- alert: HighHTTPLatency  expr: http_server_request_latency{ job="tarantool", quantile="0.99" } > 0.1  for: 5m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') high HTTP latency"    description: "Some {{ $labels.method }} requests to {{ $labels.path }} path with {{ $labels.status }} response status      on '{{ $labels.alias }}' instance of job '{{ $labels.job }}' are processed too long."

Низкая частота запросов в периоды, когда они ожидаются, может свидетельствовать о проблемах с балансировщиком, внешним клиентом или сетью.

- alert: LowRouterHTTPRequestRate  expr: sum by (job, instance, alias) (rate(http_server_request_latency_count{ job="tarantool", alias=~"^.*router.*$" }[5m])) < 10  for: 5m  labels:    severity: warning  annotations:    summary: "Router '{{ $labels.alias }}' ('{{ $labels.job }}') low activity"    description: "Router '{{ $labels.alias }}' instance of job '{{ $labels.job }}' gets too little requests.      Please, check up your balancer middleware."

Статистика модуля CRUD

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

- alert: HighCRUDErrorRate  expr: rate(tnt_crud_stats_count{ job="tarantool", status="error" }[5m]) > 0.1  for: 1m  labels:    severity: critical  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') too many CRUD {{ $labels.operation }} errors."    description: "Too many {{ $labels.operation }} CRUD requests for '{{ $labels.name }}' space on      '{{ $labels.alias }}' instance of job '{{ $labels.job }}' get module error responses."

Статистика модуля также укажет на проблемы с производительностью запросов. Слишком высокая задержка запросов приводит к высокой задержке ответов клиентам. Это может быть вызвано проблемами с сетью или диском. Запросы на чтение с некорректными условиями (относительно индексов спейса и схемы шардирования) могут приводить к полному сканированию или операциям map-reduce, что также может быть причиной высокой задержки.

- alert: HighCRUDLatency  expr: tnt_crud_stats{ job="tarantool", quantile="0.99" } > 0.1  for: 1m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') too high CRUD {{ $labels.operation }} latency."    description: "Some {{ $labels.operation }} {{ $labels.status }} CRUD requests for '{{ $labels.name }}' space on      '{{ $labels.alias }}' instance of job '{{ $labels.job }}' are processed too long."

Статистика модуля также покажет количество операций map-reduce и частоту сканирований.

- alert: HighCRUDMapReduceRate  expr: rate(tnt_crud_map_reduces{ job="tarantool" }[5m]) > 0.1  for: 1m  labels:    severity: warning  annotations:    summary: "Instance '{{ $labels.alias }}' ('{{ $labels.job }}') too many CRUD {{ $labels.operation }} map reduces."    description: "There are too many {{ $labels.operation }} CRUD map reduce requests for '{{ $labels.name }}' space on      '{{ $labels.alias }}' instance of job '{{ $labels.job }}'.      Check your request conditions or consider changing sharding schema."

Мониторинг на стороне сервера

Без метрик Tarantool можно пропустить критические состояния. Prometheus предоставляет метрику up для мониторинга состояния своих целей.

- alert: InstanceDown  expr: up == 0  for: 1m  labels:    severity: page  annotations:    summary: "Instance '{{ $labels.instance }}' ('{{ $labels.job }}') down"    description: "'{{ $labels.instance }}' of job '{{ $labels.job }}' has been down for more than a minute."

Отслеживайте состояние CPU, диска и оперативной памяти сервера с помощью подходящих инструментов. Например, при высокой нагрузке на CPU экземпляр Tarantool может перестать отправлять метрики - такие сбои можно отследить только извне.