Parce que les journaux CloudWatch peuvent être retardés (et non « en temps réel » par définition précise) vous analysez les événements précédents pour la dernière horodatage et commencer la prochaine itération il:
#!/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
Ou si vous voulez une queue groupe entier journal, utilisez filter-log-events
sans nom de flux:
#!/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
J'ai aussi mis en place les scripts que j'utilise comme GIST GitHub: https://gist.github.com/tekwiz/964a3a8d2d84ff4c8b5288d9a703fbce.
Attention: les scripts ci-dessus sont écrits pour mon système macOS personnalisé (bastardisé ?? Les modifications sont les bienvenues :)
Le paquet 'awslogs' est incroyable. J'ai résolu un problème que j'ai rencontré ce matin où un membre de l'équipe de gestion voulait simplement "grep les logs pour trouver des trucs". Certainement le chemin à parcourir pour des solutions simples. –