log_summary.sh en Bash
Un triaje de logs en puro shell: categorías, rutas top, la cola lenta.
#!/usr/bin/env bash
# log_summary: grupos de estado, rutas más pedidas y líneas de error de un log
set -euo pipefail
log=$(mktemp)
trap 'rm -f "$log"' EXIT
cat > "$log" <<'EOF'
GET /api/users 200 45
POST /api/login 401 12
GET /api/users 200 38
GET /static/app.js 200 5
POST /api/orders 500 220
GET /api/users 304 9
EOF
echo "== status buckets =="
awk '{ print substr($3, 1, 1) "xx" }' "$log" | sort | uniq -c
echo "== top paths =="
awk '{ print $2 }' "$log" | sort | uniq -c | sort -rn | head -3
echo "== slowest =="
sort -k4 -rn "$log" | head -1
errors=$(awk '$3 >= 500 { print $2 }' "$log")
echo "5xx on: ${errors:-none}"
Cómo funciona
awkagrupa los estados en 2xx/4xx/5xx con substr.sort | uniq -c | sort -rnclasifica las rutas.sort -k4 -rnencuentra la petición más lenta por columna.
Palabras clave y builtins usados aquí
echosettrap
El intento, en números
- Líneas
- 26
- Caracteres a escribir
- 628
- Tokens
- 85
- Ritmo de tres estrellas
- 80 tpm
Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 64 segundos.
Paso 1 de 2 en Bis; paso 25 de 26 en Fundamentos del lenguaje.