我可以使用以下命令查看日志。
aws logs get-log-events --log-group-name groupName --log-stream-name streamName --limit 100
什么是获得像tail -f
这样的功能的命令,以便我可以看到日志实时
我对awslogs
和cwtail
感到非常失望所以我创建了自己的工具Saw,可以有效地将CloudWatch日志传输到控制台(并将JSON输出着色):
您可以在MacOS上安装它:
brew tap TylerBrock/saw
brew install saw
它有一些很好的功能,比如能够自动扩展(缩进)JSON输出(尝试使用--expand
运行该工具):
saw watch my_log_group --expand
有一个Lambda,你想看到错误日志?没问题:
saw watch /aws/lambda/my_func --filter error
Saw非常棒,因为输出很容易读取,您可以从整个日志组中流式传输日志,而不仅仅是组中的单个流。过滤和观看具有特定前缀的流也同样容易!
我刚刚发现了cwtail并且运行良好(观看lambda函数的CloudWatch日志)。
安装:
npm install -g cwtail
列出日志组:
cwtail -l
然后,一旦你选择了哪个日志组为'tail':
cwtail -f /aws/lambda/ExampleFunction
由于CloudWatch日志可以延迟(即通过精确定义不是“实时”),因此您将解析上一个时间戳的先前事件并在那里开始下一次迭代:
#!/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
或者,如果要拖尾整个日志组,请使用不带流名称的filter-log-events
:
#!/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
我还提出了我用作GitHub gists的脚本:https://gist.github.com/tekwiz/964a3a8d2d84ff4c8b5288d9a703fbce。
警告:上面的代码和脚本是为我的macOS系统编写的,它是用Homebrew和GNU coreutils定制的(bastardized ??),因此可能需要为你的系统调整一些命令选项。欢迎编辑:)
我创建了一个JetBrains plugin called awstail来做这个:)
您可以使用awslogs,一个python包来拖尾日志。
安装它
pip install awslogs
列出所有组
awslogs groups
然后选择一个流并观看它
awslogs get staging-cluster --watch
您还可以使用匹配的模式过滤日志。
# 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"
有关使用awslogs的更多信息,请参阅project readme。
aws cli不提供实时tail -f选项。
上面提到的那些其他工具确实提供了拖尾功能,但是,我尝试了所有这些工具,awslogs,cwtail,并发现它们令人沮丧。它们下载事件的速度很慢,通常不可靠,在显示JSON日志数据方面没有帮助,并且具有查询选项的原始功能。
我想要一个非常快速,简单的日志查看器,它可以让我立即轻松地查看应用程序错误和状态。 CloudWatch日志查看器很慢,CloudWatch Insights可能需要大于1米才能完成一些非常基本的查询。
所以我创建了SenseLogs,一个完全在浏览器中运行的免费AWS CloudWatch Logs查看器。不需要服务器端服务。 SenseLogs透明地下载日志数据并将事件存储在浏览器应用程序缓存中,以便立即查看,平滑无限滚动和全文查询。 SenseLogs具有无限后滚动的活尾。有关详细信息,请参阅https://github.com/sensedeep/senselogs/blob/master/README.md。
这当前不是CLI的一项功能,因为它只公开了CloudWatch Logs的HTTP API。您可以通过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
免责声明:这不适用于Windows,并且可能有更好的方法以毫秒为单位获得时间。