Passa al contenuto principale

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 sipp deployato dal Mac verso akira-sipp-01-staging.
  • sipp installato sull'host target dal ruolo.
  • /opt/akira/sipp/scenarios/load_pilot.xml presente.
  • /opt/akira/sipp/load_pilot_targets.csv presente con 10000 target.
  • /opt/akira/sipp/run_load_pilot.sh eseguibile.

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:5060
  • LOCAL_IP=100.64.0.51
  • CPS=10
  • RATE_PERIOD_MS=1000
  • DURATION_SECONDS=3600
  • MAX_CONCURRENT=900
  • STAT_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.