Операційні вимоги для «Як налаштувати alerts та сповіщення для валідатора» перевірено 2 серпня 2026 року. Для production використовуйте тільки реліз Agave, рекомендований для конкретного кластера, і звіряйте параметри з agave-validator --help . Офіційні вимоги Anza на цю дату орієнтують операторів на Ubuntu 24.04, щонайменше 12 ядер/24 потоки, 256 ГБ RAM, окремі швидкі NVMe та симетричний канал від 2 Гбіт/с; це рекомендації, а не гарантія достатньої продуктивності.
Сповіщення — це єдиний міст між вашим валідатором і вами в моменти, коли щось іде не так. Нижче наведено повний цикл: від вибору подій до робочої конфігурації Prometheus Alertmanager з перевіркою кожного правила.
Чому alerts критичні для валідатора
Валідатор Solana не прощає простоїв. Пропущений перехід у статус delinquent означає втрату голосів, зниження stake-attraction і прямі фінансові втрати делегаторів. Моніторинг без alerts — це просто дашборд, який ніхто не дивиться о третій ночі. Алерти перетворюють пасивне спостереження на проактивну реакцію: ви дізнаєтесь про проблему до того, як вона вплине на репутацію ноди.
Ключове правило: кожен alert має вести до конкретної дії. Якщо ви отримуєте сповіщення, але не знаєте, що з ним робити — це не alert, а шум.
Ключові події для сповіщення
Середовище: клієнт Agave (колишній agave-validator), mainnet-beta, Ubuntu 24.04 LTS. Метрики надходять від вбудованого Prometheus-експортера валідатора та node_exporter. Перевірте актуальність назв метрик у вашій версії клієнта перед застосуванням конфігурації.
Delinquent status
Валідатор стає delinquent, коли пропускає занадто багато епох без голосування. Це критичний стан, який вимагає негайного втручання. Метрика: solana_delinquent (значення 1 означає проблеми). Поріг: будь-яке значення, відмінне від 0.
Skip rate перевищення
Skip rate показує частку пропущених слотів. Різкий стрибок сигналізує про проблеми з мережею, дисковою підсистемою або навантаженням на CPU. Метрика: solana_vote_skip_rate. Рекомендований поріг попередження: 0.03 (3%), критичний: 0.08 (8%). Встановлюйте пороги на основі базової лінії вашої ноди — деякі інстанси стабільно працюють з skip rate 0.01, інші — з 0.04.
Диск > 90% заповнений
Валідатор постійно пише snapshot-и та ledger-дані. Заповнений диск призводить до зупинки процесу без можливості відновлення без ручного втручання. Метрика від node_exporter: node_filesystem_avail_bytes з фільтром по точці монтування ledger-розділу. Обчислюйте відсоток: (1 - available / total) * 100. Поріг: 90% для попередження, 95% для критичного alert.
Валідатор зупинився
Процес agave-validator впав або був зупинений. Метрика: up з міткою job, що відповідає вашому валідатору (значення 0 означає, що таргет недоступний). Цей alert має мати найвищий пріоритет — нода не голосує взагалі.
Невдале оновлення
Автоматичне оновлення через systemd-timer або кастомний скрипт може завершитися помилкою. Моніторте exit code процесу оновлення або наявність файлу-маркера невдалого оновлення. Альтернатива: відстежуйте розрив між очікуваною та фактичною версією через метрику solana_version, якщо ваш експортер її надає.
Канали сповіщень: Telegram, email, Slack
Кожен канал має своє місце в операційному ланцюзі. Не обирайте один — комбінуйте залежно від критичності.
- Telegram — найкращий канал для критичних alerts. Миттєва доставка, підтримка markdown, можливість пінгу конкретних осіб через @mention. Підходить для мобільної реакції о будь-якій порі.
- Email — резервний канал та архів. Корисний для некритичних попереджень та пост-інцидентного аналізу. Налаштуйте окрему папку або фільтр, щоб alerts не загубилися серед іншої пошти.
- Slack — основний канал для командної роботи. Підходить для alerts, що вимагають координації: обговорення, призначення відповідального, прив'язка runbook-ів. Інтегрується з PagerDuty або Opsgenie для ескалації.
Практична рекомендація: критичні події (delinquent, зупинка процесу) надсилайте одночасно в Telegram та Slack. Попередження (skip rate, диск) — лише в Slack з відповідним тегом severity.
Налаштування через Prometheus Alertmanager
Передумови: працюючий Prometheus із налаштованим scrape валідатора та node_exporter; встановлений Alertmanager (версію перевірте у вашому середовищі); бот Telegram з токеном та chat_id.
Очікуваний результат: Alertmanager обробляє правила з Prometheus і надсилає сповіщення у вказані канали з правильним severity та анотаціями.
Ризики: помилка в YAML-синтаксисі призведе до непрацездатності всього Alertmanager. Завжди перевіряйте конфігурацію перед перезапуском.
Відкат: збережіть поточний робочий файл alertmanager.yml перед зміною:
cp /etc/alertmanager/alertmanager.yml /etc/alertmanager/alertmanager.yml.bak.$(date +%Y%m%d%H%M)
Файл правил Prometheus (solana_alerts.yml):
groups:
- name: agave-validator
rules:
- alert: SolanaValidatorDown
expr: up{job="agave-validator"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Валідатор недоступний"
description: "Процес валідатора не відповідає понад 1 хвилину"
runbook: "Перевірте статус systemd: systemctl status agave-validator"
- alert: SolanaDelinquent
expr: solana_delinquent > 0
for: 0m
labels:
severity: critical
annotations:
summary: "Валідатор у статусі delinquent"
description: "Валідатор пропускає голосування та позначений як delinquent"
- alert: SolanaHighSkipRate
expr: solana_vote_skip_rate > 0.05
for: 5m
labels:
severity: warning
annotations:
summary: "Skip rate перевищує 5%"
description: "Поточне значення: {{ $value | printf \"%.4f\" }}"
- alert: SolanaDiskFull
expr: (1 - node_filesystem_avail_bytes{mountpoint="/mnt/ledger"} / node_filesystem_size_bytes{mountpoint="/mnt/ledger"}) * 100 > 90
for: 2m
labels:
severity: warning
annotations:
summary: "Ledger-диск заповнений на {{ $value | printf \"%.1f\" }}%"
description: "Залишиться місця для snapshot-ів обмежено"
Заменіть /mnt/ledger на фактичну точку монтування вашого ledger-розділу. Заменіть job="agave-validator" на ваш фактичний job name із конфігурації Prometheus scrape.
Файл alertmanager.yml з Telegram-каналом:
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'telegram-critical'
routes:
- match:
severity: critical
receiver: 'telegram-critical'
- match:
severity: warning
receiver: 'slack-warnings'
receivers:
- name: 'telegram-critical'
telegram_configs:
- bot_token: 'ВАШ_ТОКЕН_БОТА'
chat_id: 'ВАШ_CHAT_ID'
send_resolved: true
parse_mode: 'HTML'
- name: 'slack-warnings'
slack_configs:
- api_url: 'ВАШ_SLACK_WEBHOOK_URL'
send_resolved: true
channel: '#validator-alerts'
Перевірка конфігурації перед застосуванням:
amtool check-config /etc/alertmanager/alertmanager.yml
promtool check rules /etc/prometheus/solana_alerts.yml
Обидві команди мають завершитися без помилок. Тільки після цього перезапускайте сервіси.
Застосування змін:
systemctl reload alertmanager
systemctl reload prometheus
Перевірте, що правила завантажено: відкрийте інтерфейс Prometheus (зазвичай http://ваш-сервер:9090/alerts) і переконайтеся, що всі правила з групи agave-validator відображаються зі станом INACTIVE.
Тестування alerts
Налаштовані alerts необхідно перевірити до того, як реальна проблема застане вас зненацька.
Тест SolanaValidatorDown: зупиніть процес валідатора на 2 хвилини:
sudo systemctl stop agave-validator
Попередження: ця дія зупиняє вашу ноду. Виконуйте лише в тестовому середовищі або за наявності резервного плану. Після отримання alert негайно запустіть:
sudo systemctl start agave-validator
Тест SolanaHighSkipRate: тимчасово знизьте поріг у правилі до значення, яке поточний skip rate гарантовано перевищує (наприклад, 0.001). Зачекайте 5 хвилин (значення for). Після отримання сповіщення поверніть оригінальний поріг і виконайте reload.
Тест через Alertmanager API: найбезпечніший спосіб, що не впливає на валідатор:
curl -X POST http://localhost:9093/api/v1/alerts -H "Content-Type: application/json" -d '[{"labels":{"alertname":"TestAlert","severity":"warning"},"annotations":{"summary":"Тестове сповіщення"}}]'
Це надішле штучний alert без залучення Prometheus чи валідатора. Якщо сповіщення прийшло у всі канали — інтеграція працює.
Тихі години та пріоритети
Не всі alerts однаково термінові. Якщо ви налаштуєте всі сповіщення з однаковим пріоритетом, виникне втома від alert-ів і пропущені критичні події.
Рекомендована матриця пріоритетів:
| Подія | Severity | Канали | Repeat interval |
|---|---|---|---|
| Валідатор зупинився | critical | Telegram + Slack | 15 хв |
| Delinquent status | critical | Telegram + Slack | 30 хв |
| Skip rate > 5% | warning | Slack | 4 год |
| Диск > 90% | warning | Slack + email | 4 год |
Для налаштування тихих годин (mute intervals) додайте секцію mute_time_intervals в alertmanager.yml. Наприклад, щоб заглушити warning-и з 23:00 до 07:00 за київським часом:
mute_time_intervals:
- name: night-warnings
time_intervals:
- times:
- start_time: 23:00
end_time: 07:00
route:
...
routes:
- match:
severity: warning
receiver: 'slack-warnings'
mute_time_intervals:
- night-warnings
Критичні alerts ніколи не mute-яться. Тихі години застосовуються лише до non-critical подій, щоб уникнути безсонних ночей через попередження про skip rate, які ви все одно не зможете оперативно вирішити до ранку.
Після налаштування всіх alerts наступний логічний крок — перевірка стабільності збору даних та діагностика проблем із snapshot-ами. Дивіться детальніше у матеріалі Як діагностувати snapshot failures.