web-dev-qa-db-fra.com

comment afficher le journal des aws en temps réel (comme tail -f)

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

22
LynAs

Regardez awslogs .

Si vous travaillez avec Lambda/API Gateway en particulier, jetez un coup d’œil à apilogs .

17
RyanG

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!

46
Tyler Brock

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 :)

6
Travis Warlick

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
4
Greg Sadetsky

J'ai créé un JetBrains plugin appelé awstail pour le faire :)

4
godzsa

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
1
Luca Grulla

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.

0
ChillarAnand