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 :)
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.
Creé un plugin de JetBrains llamado awstail para hacer esto :)