TASK-237 Load Test Pilot
Scope
Questo runbook esegue il load test SIPp pilot da Mac utente via Tailscale,
dopo deploy del ruolo sipp su staging. Il runner code-only consegna scenario,
target CSV, wrapper e parser metriche; il run runtime da 1h resta manuale.
Target runtime:
- Rate: 10 calls/sec.
- Durata: 1h.
- Chiamate totali: 36000.
- Cap concorrenza: 900.
- Durata chiamata media attesa: circa 75s.
Prerequisiti
- Tailscale attivo sul Mac utente con accesso SSH agli host staging.
- Ruolo Ansible
sippdeployato dal Mac versoakira-sipp-01-staging. sippinstallato sull'host target dal ruolo./opt/akira/sipp/scenarios/load_pilot.xmlpresente./opt/akira/sipp/load_pilot_targets.csvpresente con 10000 target./opt/akira/sipp/run_load_pilot.sheseguibile.
Deploy
Dal Mac utente, nel repository Akira:
ansible-playbook -i infra/inventory/staging.yml infra/playbooks/deploy-sipp.yml
Se il playbook usato in staging ha nome diverso, eseguire il playbook standard
che applica infra/roles/sipp agli host SIPp.
Pre-Flight
ssh root@akira-sipp-01-staging '
set -e
cd /opt/akira/sipp
test -f scenarios/load_pilot.xml
test -f load_pilot_targets.csv
test -x run_load_pilot.sh
wc -l load_pilot_targets.csv
'
ssh root@akira-mgmt-01-staging '
grep -E "max_concurrent|cps_max" /opt/akira/.env /etc/kamailio/kamailio.cfg 2>/dev/null | head || true
'
ssh root@akira-rtp-01-staging '
grep -E "port-min|port-max" /etc/rtpengine/rtpengine.conf
'
Run
ssh root@akira-sipp-01-staging '
cd /opt/akira/sipp
./run_load_pilot.sh
'
Il wrapper usa questi default, sovrascrivibili via ambiente:
TARGET=100.64.0.21:5060LOCAL_IP=100.64.0.51CPS=10RATE_PERIOD_MS=1000DURATION_SECONDS=3600MAX_CONCURRENT=900STAT_FREQ_SECONDS=5
Monitor
Eseguire dal Mac durante il run:
for i in $(seq 1 12); do
echo "=== Sample $i - $(date) ==="
ssh root@akira-sipp-01-staging '
tail -2 /tmp/sipp_load.log
'
ssh root@akira-sip-01-staging '
kamcmd dispatcher.list | grep -E "FLAG|INACTIVE" | head || true
kamcmd htable.dump location | grep -c "::" || true
'
ssh root@akira-rtp-01-staging '
ngcli list | wc -l
'
ssh root@akira-mgmt-01-staging '
docker exec akira-backend curl -s http://localhost:8000/metrics |
grep -E "akira_cdr_ingested_total|akira_call_pdd_seconds_bucket" |
tail -5
'
sleep 300
done
Collect
ssh root@akira-sipp-01-staging '
cd /opt/akira/sipp
tail -30 /tmp/sipp_load.log
find reports -path "*/stat.csv" -type f -printf "%T@ %p\n" | sort -n | tail -1
'
Scaricare la directory report piu' recente:
scp -r root@akira-sipp-01-staging:/opt/akira/sipp/reports/load-pilot-YYYYmmdd-HHMMSS .
Metrics
Generare report Markdown dal CSV SIPp:
python tests/load/compute_metrics.py \
load-pilot-YYYYmmdd-HHMMSS/stat.csv \
--output LOAD-TEST-PILOT-$(date +%Y%m%d).md
Con cross-check DB via psql:
python tests/load/compute_metrics.py \
load-pilot-YYYYmmdd-HHMMSS/stat.csv \
--psql-dsn "postgresql://akira:***@akira-db-01-staging/akira" \
--output LOAD-TEST-PILOT-$(date +%Y%m%d).md
Outcome
Marcare GO solo se tutti gli acceptance runtime in
tests/load/expected_outcome.md sono soddisfatti.