Коли все йде по пизді — відкривай цей документ.
Структурований план дій для типових інцидентів GeoSync.
| Level | Response Time | Description |
|---|---|---|
| SEV1 - CRITICAL | 5 хвилин | Втрата грошей, повна зупинка, kill-switch спрацював |
| SEV2 - HIGH | 30 хвилин | Деградація сервісу, часткова втрата функціональності |
| SEV3 - MEDIUM | 4 години | Незначні проблеми, workaround існує |
| SEV4 - LOW | 24 години | Косметичні проблеми, оптимізації |
Симптоми:
- Alert:
KillSwitchEngaged - Metric:
geosync_risk_kill_switch == 1 - Всі ордери блокуються
Перші дії (< 5 хв):
-
Перевір причину в логах:
grep -i "kill.switch.trigger" /var/log/geosync/*.log | tail -20
Або в Kibana:
event: "kill_switch_triggered" -
Перевір метрики:
- Grafana → GeoSync Risk Dashboard
- Подивись
geosync_risk_rejections_total— що саме блокувалось? geosync_drawdown_percent— чи є drawdown breach?
-
Визнач root cause:
- Position limit exceeded?
- Notional cap breached?
- Drawdown limit hit?
- Rate limit violations?
Рішення:
| Причина | Дія |
|---|---|
| Position limit | Перевір відкриті позиції, закрий якщо потрібно |
| Drawdown | Зачекай або reset equity tracking |
| Rate limit | Перевір логіку throttling |
| False positive | Reset kill-switch через admin API |
Reset Kill-Switch:
# Через CLI
geosync-admin kill-switch reset --reason "Manual reset after investigation"
# Або через API
curl -X POST http://localhost:8080/admin/kill-switch/reset \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-d '{"reason": "Investigated, false positive"}'Postmortem trigger: ОБОВ'ЯЗКОВО якщо SEV1/SEV2.
Симптоми:
rate(geosync_orders_placed_total[5m]) == 0- Alert:
NoOrdersPlaced - Стратегія "мовчить"
Diagnosis:
-
Перевір чи сервіс живий:
curl http://localhost:8080/health/ready
-
Перевір data feed:
# Чи приходять тики? grep "tick.processed" /var/log/geosync/data.log | tail -5
Metric:
geosync_ticks_processed_total— чи зростає? -
Перевір signal generation:
grep "signal.generated" /var/log/geosync/strategy.log | tail -5
Metric:
geosync_signal_generation_total -
Перевір risk-engine:
# Чи все блокується? grep "risk_validation.*rejected" /var/log/geosync/execution.log | tail -10
-
Перевір exchange connectivity:
geosync-admin exchange status
Decision Tree:
Тики не приходять?
→ Restart data feed service
→ Перевір API keys exchange
Сигнали не генеруються?
→ Перевір strategy configuration
→ Перевір warmup period
Все блокується risk-engine?
→ Дивись "Kill-Switch Спрацював" вище
Exchange не відповідає?
→ Перевір network/firewall
→ Перевір exchange status page
Симптоми:
- Spike в
geosync_risk_rejections_total - Alert:
RiskRejectionsSpike - Ордери створюються, але не йдуть на exchange
Diagnosis:
-
Подивись reasons:
# Grafana: Risk Rejections by Reason # Або в логах: grep "risk_validation.*rejected" /var/log/geosync/*.log | \ grep -oP 'reason="[^"]+"' | sort | uniq -c
-
Типові причини:
| Reason | Що робити |
|---|---|
position_limit |
Перевір поточні позиції, можливо вже на max |
notional_limit |
Exposure занадто великий |
rate_limit |
Занадто багато ордерів, throttle працює |
kill_switch |
Kill-switch активний |
circuit_breaker |
Circuit breaker open |
- Перевір ліміти:
geosync-admin risk limits show
Рішення:
- Якщо ліміти коректні → це працює як треба, нічого не робити
- Якщо ліміти занадто жорсткі → update через config
- Якщо помилка в position tracking → reset state
Симптоми:
- Alert:
ModelLatencyHighабоModelErrorRateHigh - Metric:
geosync_model_inference_error_ratio > 0.01 - Логи:
model_inference.*error
Diagnosis:
-
Перевір model serving:
curl http://model-server:8501/v1/models/trading_model
-
Перевір latency:
- Grafana → MLSDM Health Dashboard
geosync_model_inference_latency_seconds
-
Перевір ресурси:
# GPU utilization nvidia-smi # CPU/Memory top -b -n1 | head -20
Рішення:
| Симптом | Дія |
|---|---|
| Model server down | Restart model service |
| High latency | Scale up, check batch size |
| OOM | Reduce batch size, add memory |
| GPU issues | Check CUDA, restart GPU process |
Fallback:
# Переключити на fallback model
geosync-admin model switch --to fallbackСимптоми:
- Alert:
MetricsMissing - Grafana dashboards empty
- Kibana no recent logs
Diagnosis:
-
Чи сервіс працює?
systemctl status geosync ps aux | grep geosync -
Чи /metrics endpoint відповідає?
curl http://localhost:8080/metrics | head -20 -
Чи Prometheus scrape працює?
- Prometheus UI → Targets → перевір geosync target
-
Чи логи пишуться?
tail -f /var/log/geosync/app.log # Якщо disk full: df -h
Рішення:
| Причина | Дія |
|---|---|
| Service down | Restart service |
| Prometheus can't reach | Check network, firewall |
| Disk full | Clean old logs, expand disk |
| Metrics endpoint broken | Check for errors in startup logs |
Симптоми:
- Alert:
HighOrderLatency - p95 > 2 seconds
- Metric:
geosync_order_placement_duration_seconds
Diagnosis:
-
Де саме затримка?
geosync_order_ack_latency_quantiles_seconds— exchange slow?- Signal generation slow?
- Risk validation slow?
-
Перевір exchange status:
curl https://api.exchange.com/status
-
Перевір internal queues:
- Metric:
geosync_api_queue_depth
- Metric:
Рішення:
| Причина | Дія |
|---|---|
| Exchange slow | Wait, nothing to do |
| Internal queue backed up | Scale up workers |
| Network issues | Check connectivity |
| CPU saturation | Scale up, reduce load |
🚨 INCIDENT DETECTED
Severity: SEV[1-4]
Time: [UTC timestamp]
Component: [affected component]
Impact: [what users see]
Status: INVESTIGATING
Current on-call: @name
📊 INCIDENT UPDATE
Time: [UTC timestamp]
Status: [INVESTIGATING | IDENTIFIED | MONITORING | RESOLVED]
RCA: [brief root cause if known]
Next steps: [what's being done]
ETA to resolution: [if known]
✅ INCIDENT RESOLVED
Time: [UTC timestamp]
Duration: [total time]
Root cause: [brief summary]
Resolution: [what fixed it]
Postmortem: [scheduled for X / not required]
On-call Engineer (5 min)
↓ not resolved in 30 min
Tech Lead (notify)
↓ not resolved in 1 hour
Engineering Manager
↓ SEV1 lasting > 2 hours
VP Engineering / CTO
| Role | Contact | When to Use |
|---|---|---|
| On-call Engineer | PagerDuty | First responder |
| Tech Lead | Slack @techlead | Escalation |
| Infrastructure | Slack #infra-oncall | Infra issues |
| Security | security@company.com | Security incidents |
- Document timeline в Slack/incident channel
- Create postmortem якщо SEV1/SEV2
- File follow-up tickets для preventive measures
- Update runbook якщо знайшов нові патерни
Last updated: 2025-12-02 Owner: Principal Observability & Incident Engineer