aws-cli amazon-cloudwatch

aws cli - cómo ver el registro de aws en tiempo real(como tail-f)



aws-cli amazon-cloudwatch (7)

Acabo de descubrir cwtail y funciona bien (para ver los registros de CloudWatch de una función lambda).

Instalar:

npm install -g cwtail

Para listar los grupos de registro:

cwtail -l

Luego, una vez que hayas elegido qué grupo de registro "seguir":

cwtail -f /aws/lambda/ExampleFunction

Puedo ver el registro usando el siguiente comando.

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

¿Cuál es el comando para obtener una función como tail -f para que pueda ver el registro en tiempo real?


Actualmente, esta no es una característica de la CLI, ya que solo expone la API HTTP para los registros de CloudWatch. Usted podría emular la funcionalidad de forma bastante trivial con un script de shell:

#! /bin/sh end_time=$(($(date +"%s") * 1000)) aws logs get-log-events --log-group-name groupName --log-stream-name streamName --end-time $end_time while : do start_time=$end_time end_time=$(($(date +"%s") * 1000)) aws logs get-log-events --log-group-name groupName --log-stream-name streamName --start-time $start_time --end-time $end_time sleep 1 done

Descargo de responsabilidad: esto no funcionará en Windows, y puede haber una mejor manera de obtener el tiempo en milisegundos.


Debido a que los registros de CloudWatch se pueden retrasar (es decir, no "en tiempo real" por definición precisa), se analizan los eventos anteriores para la última marca de tiempo y se inicia la siguiente iteración allí:

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

O si desea realizar un seguimiento de un grupo de registro completo, use filter-log-events sin un nombre de secuencia:

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

También coloqué los scripts que uso como github gists: https://gist.github.com/tekwiz/964a3a8d2d84ff4c8b5288d9a703fbce .

Advertencia: el código y las secuencias de comandos anteriores están escritos para mi sistema macOS que está personalizado (¿bastardized?) Con Homebrew y GNU coreutils, por lo que es posible que deba ajustar algunas opciones de comando para su sistema. Las ediciones son bienvenidas :)


Echa un vistazo a los awslogs de awslogs .

Si está trabajando específicamente con Lambda / API Gateway, eche un vistazo a apilogs .


Me sentí realmente decepcionado con awslogs y cwtail así que hice mi propia herramienta llamada github.com/TylerBrock/saw que transmite eficientemente los registros de CloudWatch a la consola (y colorea la salida de JSON):

Puedes instalarlo en MacOS con:

brew tap TylerBrock/saw brew install saw

Tiene --expand como la capacidad de expandir (sangrar) automáticamente la salida JSON (intente ejecutar la herramienta con --expand ):

saw watch my_log_group --expand

¿Tienes un Lambda para el que quieres ver los registros de errores? No hay problema:

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

La sierra es excelente porque la salida es fácil de leer y puede transmitir registros de todo el grupo de registros, no solo una secuencia en el grupo. ¡Filtrar y mirar transmisiones con un prefijo determinado también es igual de fácil!


Puede usar awslogs , un paquete de Python para seguir los registros de aws logwatch.

Instalarlo con

pip install awslogs

Listar todos los grupos con

awslogs groups

Luego selecciona un stream y miralo con

awslogs get staging-cluster --watch

También puede filtrar registros con patrones coincidentes.

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

Consulte el archivo awslogs para obtener más información sobre el uso de awslogs.