Perché i registri CloudWatch possono essere ritardati (cioè non "in tempo reale" di una precisa definizione) si analizza gli eventi precedenti per l'ultima ora e data e avvia l'iterazione successiva c'è:
#!/bin/bash
group_name='<log-group-name>'
stream_name='<log-stream-name>'
start_seconds_ago=300
start_time=$((($(date -u +"%s") - $start_seconds_ago) * 1000))
while [[ -n "$start_time" ]]; do
loglines=$(aws --output text logs get-log-events --log-group-name "$group_name" --log-stream-name "$stream_name" --start-time $start_time)
[ $? -ne 0 ] && break
next_start_time=$(sed -nE 's/^EVENTS.([[:digit:]]+).+$/\1/ p' <<< "$loglines" | tail -n1)
[ -n "$next_start_time" ] && start_time=$(($next_start_time + 1))
echo "$loglines"
sleep 15
done
Oppure, se si desidera la coda di un tutto il gruppo di registro, utilizzare filter-log-events
senza un nome di flusso:
#!/bin/bash
group_name='<log-group-name>'
start_seconds_ago=300
start_time=$((($(date -u +"%s") - $start_seconds_ago) * 1000))
while [[ -n "$start_time" ]]; do
loglines=$(aws --output text logs filter-log-events --log-group-name "$group_name" --interleaved --start-time $start_time)
[ $? -ne 0 ] && break
next_start_time=$(sed -nE 's/^EVENTS.([^[:blank:]]+).([[:digit:]]+).+$/\2/ p' <<< "$loglines" | tail -n1)
[ -n "$next_start_time" ] && start_time=$(($next_start_time + 1))
echo "$loglines"
sleep 15
done
ho anche messo gli script che uso come GIST GitHub: https://gist.github.com/tekwiz/964a3a8d2d84ff4c8b5288d9a703fbce.
Attenzione: il codice sopra riportato & script sono scritti per il mio sistema macOS che è personalizzato (bastardizzato ??) con coreutils Homebrew e GNU, quindi alcune opzioni di comando potrebbero dover essere ottimizzate per il sistema. Le modifiche sono benvenute :)
fonte
2016-06-27 12:24:24
Il pacchetto 'awslogs' è fantastico. Risolto un problema che ho avuto questa mattina in cui un membro del team aziendale voleva semplicemente "fare il grep dei log per trovare le cose". Sicuramente la strada da percorrere per soluzioni semplici. –