Je peux afficher le journal à l'aide de la commande suivante.
aws logs get-log-events --log-group-name groupName --log-stream-name streamName --limit 100
quelle est la commande pour obtenir une fonctionnalité comme tail -f
afin que je puisse voir le journal en temps réel
awslogs
et cwtail
m'ont vraiment déçu; j'ai donc créé mon propre outil appelé Saw qui diffuse efficacement les journaux CloudWatch sur la console (et colorise la sortie JSON):
Vous pouvez l'installer sur MacOS avec:
brew tap TylerBrock/saw
brew install saw
Il a un tas de fonctionnalités intéressantes comme la possibilité de développer automatiquement (indenter) la sortie JSON (essayez d'exécuter l'outil avec --expand
):
saw watch my_log_group --expand
Vous avez un Lambda pour lequel vous voulez voir les journaux d’erreurs? Aucun problème:
saw watch /aws/lambda/my_func --filter error
Saw est génial, car la sortie est facilement lisible et vous pouvez diffuser des journaux à partir de tout le groupe de journaux, et pas seulement d'un flux dans le groupe. Filtrer et regarder des flux avec un certain préfixe est tout aussi facile!
Parce que les journaux CloudWatch peuvent être retardés (c'est-à-dire pas "en temps réel" par définition précise), vous analysez les événements précédents pour le dernier horodatage et démarrez la prochaine itération à cet endroit:
#!/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 souhaitez personnaliser tout un groupe de journaux, 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 également mis en place les scripts que j'utilise comme graphistes GitHub: https://Gist.github.com/tekwiz/964a3a8d2d84ff4c8b5288d9a703fbce .
Attention: le code et les scripts ci-dessus sont écrits pour mon système macOS qui est personnalisé (bastardisé ??) avec Homebrew et GNU coreutils. Il est donc possible que certaines options de commande doivent être modifiées pour votre système. Les modifications sont les bienvenues :)
Je viens de découvrir cwtail et cela fonctionne bien (regarder les journaux CloudWatch d’une fonction lambda).
À installer:
npm install -g cwtail
Pour lister les groupes de journaux:
cwtail -l
Ensuite, une fois que vous avez choisi le groupe de journaux à «suivre»:
cwtail -f /aws/lambda/ExampleFunction
J'ai créé un JetBrains plugin appelé awstail pour le faire :)
Pour adapter efficacement CloudWatch Logs, j'ai créé un outil appelé cw .
Il est très facile à installer (prend en charge l’injection, l’instantané et le scoop), rapide (il cible l’architecture matérielle spécifique, pas d’exécution intermédiaire) et offre un ensemble de fonctionnalités qui facilitent la vie.
Votre exemple avec cw serait:
cw tail -f groupName:streamName
Vous pouvez utiliser awslogs , un package python pour rédiger les journaux de surveillance de journal aws.
Installez-le avec
pip install awslogs
Lister tous les groupes avec
awslogs groups
Puis sélectionnez un flux et regardez-le avec
awslogs get staging-cluster --watch
Vous pouvez également filtrer les journaux avec des modèles correspondants.
# tail logs of a cluster
awslogs get staging-cluster --watch
# tail logs of a lambda function
awslogs get /aws/lambda/some-service --watch
# print all logs containg "error"
awslogs get staging-cluster --watch --filter-pattern="error"
# print all logs *not* containg "error"
awslogs get staging-cluster --watch --filter-pattern="-error"
Voir project readme pour plus d'informations sur l'utilisation de awslogs.