webentwicklung-frage-antwort-db.com.de

wie man AWS-Protokoll in Echtzeit anzeigt (wie tail -f)

Ich kann das Protokoll mit dem folgenden Befehl anzeigen.

aws logs get-log-events --log-group-name groupName --log-stream-name streamName --limit 100

wie lautet der Befehl, um die Funktion tail -f zu erhalten, damit ich das Protokoll in Echtzeit sehen kann

22
LynAs

Schau mal unter awslogs .

Wenn Sie gerade mit Lambda/API Gateway arbeiten, werfen Sie einen Blick auf apilogs .

17
RyanG

Ich war wirklich enttäuscht von awslogs und cwtail, also habe ich mein eigenes Werkzeug namens Saw entwickelt, das CloudWatch-Protokolle effizient an die Konsole überträgt (und die JSON-Ausgabe farbig macht):

Sie können es unter MacOS installieren mit:

brew tap TylerBrock/saw
brew install saw

Es verfügt über eine Reihe von Nice-Funktionen wie die Möglichkeit, die JSON-Ausgabe automatisch zu erweitern (einzurücken) (versuchen Sie, das Tool mit --expand auszuführen):

saw watch my_log_group --expand

Haben Sie eine Lambda, für die Sie Fehlerprotokolle anzeigen möchten? Kein Problem:

saw watch /aws/lambda/my_func --filter error 

Saw ist großartig, da die Ausgabe leicht lesbar ist und Sie Protokolle von der gesamten Protokollgruppe streamen können, nicht nur von einem einzelnen Stream in der Gruppe. Das Filtern und Ansehen von Streams mit einem bestimmten Präfix ist ebenso einfach!

46
Tyler Brock

Da CloudWatch-Protokolle verzögert werden können (d. H. Durch präzise Definition nicht "Echtzeit"), analysieren Sie die vorherigen Ereignisse für den letzten Zeitstempel und beginnen dort mit der nächsten Iteration:

#!/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

Wenn Sie eine gesamte Protokollgruppe abschließen möchten, verwenden Sie filter-log-events ohne einen Streamnamen:

#!/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

Ich habe auch die Skripte erstellt, die ich als GitHub-Gists verwende: https://Gist.github.com/tekwiz/964a3a8d2d84ff4c8b5288d9a703fbce .

Achtung: Der obige Code und die Skripts wurden für mein macOS-System geschrieben, das mit Homebrew- und GNU -Kernutilen angepasst (bastardisiert ??) ist. Daher müssen einige Befehlsoptionen für Ihr System angepasst werden. Änderungen sind willkommen :)

6
Travis Warlick

Beachten Sie, dass das Verfolgen eines aws-Protokolls nun eine unterstützte Funktion der offiziellen awscli ist, allerdings nur in awscli v2, die noch nicht veröffentlicht wurde. Das Aufzeichnen und Verfolgen der Protokolle (wie tail -f) Kann jetzt folgendermaßen erfolgen:

aws logs tail $group_name --follow

Informationen zum Installieren der Version 2 finden Sie in den Anweisungen auf dieser Seite . Es wurde in diesem PR implementiert. Um zu sehen, wie es auf der letzten Konferenz zu re: Invent demonstriert wurde, siehe dieses Video .

Zusätzlich zum Tailing der Protokolle können die Protokolle mithilfe des Parameters --since, Der eine absolute oder relative Zeit dauern kann, bis zu einem bestimmten Zeitpunkt angezeigt werden

aws logs tail $group_name --since 5d

Um die Versionen v1 und v2 von awscli getrennt zu halten, habe ich awscli v2 in einer separaten python= virtuellen Umgebung installiert und nur aktiviert, wenn awscli v2 verwendet werden muss.

4
Anton I. Sipos

Ich habe gerade cwtail entdeckt und es funktioniert gut (um die CloudWatch-Protokolle einer Lambda-Funktion zu sehen).

Installieren:

npm install -g cwtail

Protokollgruppen auflisten:

cwtail -l

Sobald Sie ausgewählt haben, welche Protokollgruppe "Schwanz" ist:

cwtail -f /aws/lambda/ExampleFunction
4
Greg Sadetsky

Ich habe ein JetBrains Plugin namens awstail erstellt, um dies zu tun :)

4
godzsa

Um CloudWatch Logs effektiv zu überwachen, habe ich ein Tool namens cw erstellt.

Es ist extrem einfach zu installieren (es unterstützt Brew, Snap und Scoop), schnell (zielt auf die spezifische Hardwarearchitektur ab, keine Zwischenlaufzeit) und es verfügt über eine Reihe von Funktionen , die das Leben erleichtern.

Dein Beispiel mit cw wäre:

cw tail -f groupName:streamName
1
Luca Grulla

Die aws cli bietet keine live tail -f Option.

Die anderen oben genannten Tools bieten eine Tailing-Funktion. Ich habe jedoch all diese Tools ausprobiert, awslogs und cwtail, und fand sie frustrierend. Sie luden Ereignisse nur langsam herunter, waren oft unzuverlässig und bei der Anzeige von JSON-Protokolldaten nicht hilfreich und hatten primitive Abfrageoptionen.

Ich wollte einen extrem schnellen und einfachen Protokoll-Viewer, mit dem ich Anwendungsfehler und -status sofort und einfach erkennen kann. Die Anzeige der CloudWatch-Protokolle ist langsam und CloudWatch Insights kann für einige grundlegende Abfragen> 1 m dauern.

Deshalb habe ich SenseLogs erstellt, einen kostenlosen AWS CloudWatch Logs-Viewer, der vollständig in Ihrem Browser ausgeführt wird. Es sind keine serverseitigen Dienste erforderlich. SenseLogs lädt auf transparente Weise Protokolldaten herunter und speichert Ereignisse in Ihrem Browser-Anwendungs-Cache, um sie sofort anzuzeigen, einen reibungslosen unendlichen Bildlauf durchzuführen und Volltextabfragen durchzuführen. SenseLogs hat einen lebenden Schwanz mit unendlichem Rückwärtsscrollen. Weitere Informationen finden Sie unter https://github.com/sensedeep/senselogs/blob/master/README.md .

0
SenseDeep

Sie können awslogs verwenden, ein Python-Paket, um aws-Logwatch-Protokolle zu beenden.

Installiere es mit

pip install awslogs

Listen Sie alle Gruppen mit auf

awslogs groups        

Wählen Sie dann einen Stream aus und sehen Sie ihn mit an

awslogs get staging-cluster --watch

Sie können Protokolle auch mit übereinstimmenden Mustern filtern.

# 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"

Weitere Informationen zur Verwendung von awslogs finden Sie in project readme .

0
ChillarAnand