- 文档
- 教程
- 知识库
【免费下载链接】til
:memo: Today I Learned
本篇技术指南讲解如何在已配置好 AWS CLI 凭据的前提下,用纯命令行方式定位 CloudWatch Logs 日志组,并实时跟踪 Rails 等生产服务输出的日志流。读完你将掌握aws logs tail的核心参数、用aws logs describe-log-groups从 CLI 侧反查日志组名,以及组合--follow、--no-cli-pager、--query等选项让日志排查更高效——全程无需打开 AWS Web 控制台。
前置条件:认证、权限与日志组
使用aws logs tail前需要满足两个基本前提:
- CLI 已认证:AWS CLI 已配置可用的凭证(Access Key 或 SSO),可以通过
aws configure list-profiles查看本机已有的配置文件,并借助--profile参数或AWS_PROFILE环境变量切换目标账号(详见仓库文档 use-specific-aws-profile-with-cli.md)。 - 具备 CloudWatch 日志权限:当前身份需要拥有对应日志组的读取权限(例如
logs:DescribeLogGroups与logs:TailLogEvents),才能在后续步骤中列出日志组并跟踪日志。
场景通常是这样的:生产环境运行着若干服务,每个服务都有对应的 CloudWatch Logs 日志组,其中一个是 Rails 服务器。我们希望像本地开发时tail -f日志一样,实时观察生产日志。
第一步:用aws logs tail help了解命令能力
在动手执行之前,先查看aws logs tail的用法,确认它支持哪些参数:
$ aws logs tail help从帮助输出可以看到大量选项,但唯一必填的参数是group_name,其含义为 "The name of the CloudWatch Logs group."(要跟踪的 CloudWatch 日志组名称)。此外还有一个值得注意的--follow标志——加上它之后命令会持续输出新产生的日志,而不会在打印完现有日志后退出,这正是"跟随(follow)"日志流的关键。
小提示:如果执行
aws logs tail help时报Could not find executable named 'groff',说明本机缺少渲染 man 帮助文档所需的groff可执行文件(macOS Ventura 等新系统上尤其常见,AWS CLI 官方曾通过回退到mandoc修复此问题)。两个解决办法:用brew install groff安装该依赖,或升级 AWS CLI 到内置mandoc回退逻辑的版本(pip install --upgrade awscli或brew upgrade awscli),详见仓库文档 aws-cli-requires-groff-executable.md。
第二步:用aws logs describe-log-groups定位日志组名
aws logs tail要求提供日志组名称,而生产环境中我们往往不记得准确的组名。此时不必打开 Web 控制台翻找,直接用 CLI 查询即可:
$ aws logs describe-log-groups输出是一份 JSON 数组,每个元素描述一个日志组,例如:
{ "logGroups": [ { "logGroupName": "/aws/codebuild/fc-rails-app-abcefg-123456", "creationTime": 1739476650823, "metricFilterCount": 0, "arn": "arn:aws:logs:us-east-2:123456789:log-group:/aws/codebuild/fc-rails-app-abcefg-123456:*", "storedBytes": 65617, "logGroupClass": "STANDARD", "logGroupArn": "arn:aws:logs:us-east-2:123456789:log-group:/aws/codebuild/fc-rails-app-abcefg-123456" }, ... ] }对排查日志而言,最有用的几个字段是:
logGroupName:日志组的名字,aws logs tail直接使用它作为参数。creationTime:日志组的创建时间(Unix 毫秒时间戳)。storedBytes:当前已存储的日志字节数,可用来判断该组是否正在产生日志。arn/logGroupArn:日志组的 ARN,用于 IAM 权限策略与跨账号访问。logGroupClass:日志组的存储类别(如STANDARD)。
在这个例子中,日志组名/aws/codebuild/fc-rails-app-abcefg-123456本身就足够有描述性,一眼就能辨认出它是我们要跟踪的 Rails 服务(属于 CodeBuild 关联的日志组)。
第三步:aws logs tail <group_name> --follow实时跟踪
确定日志组名后,直接执行跟踪命令:
$ aws logs tail /aws/codebuild/fc-rails-app-abcefg-123456 --follow- 不带
--follow时,命令只输出日志组中已有的日志后结束,适合"看一眼最近日志"的场景; - 加上
--follow后,命令会持续挂起,实时打印新到达的日志行,行为类似 Unix 的tail -f,适合排查线上问题时边操作边观察日志输出。
让日志排查更顺手的三个组合技巧
以下技巧都来自本仓库aws/目录下同主题的实操笔记,可与aws logs tail组合使用:
1. 用--query精确过滤日志组
describe-log-groups在日志组很多时输出很长。参考 list-rds-snapshots-with-matching-identifier-prefix.md 中--query的用法(其通过?starts_with(...)按前缀筛选快照),我们可以类似地只挑出名称含fc-rails的日志组:
$ aws logs describe-log-groups \ --query "logGroups[?contains(logGroupName, 'fc-rails')].logGroupName"2. 用--no-cli-pager直接输出到终端
日志组多时,AWS CLI 默认会把结果交给分页器(如less)。如果确定输出不多,可以加--no-cli-pager让结果直接打印到 stdout,方便后续 grep 或回看终端历史(详见 turn-off-output-pager-for-a-command.md)。
3. 用--output切换输出格式
默认输出格式是json,可通过--output table或--output text临时切换(详见 output-cli-results-in-different-formats.md)。例如把日志组列表渲染成表格,更直观地对比storedBytes:
$ aws logs describe-log-groups --output table --no-cli-pager小结
完整的排查链路可以总结为三步:
aws logs tail help确认命令参数(必填group_name,可选--follow);aws logs describe-log-groups从 CLI 侧查日志组名,必要时配合--query过滤、--no-cli-pager关分页、--output table切换格式;aws logs tail <group_name> --follow实时跟踪目标服务的日志流。
这套流程完全在终端内完成,不依赖 AWS Web 控制台,非常适合 SSH 进服务器后快速排查生产问题,也可以进一步封装进运维脚本(例如先describe-log-groups抓取组名,再自动tail --follow),作为服务上线后日志巡检的起点。
- 文档
- 教程
- 知识库
【免费下载链接】til
:memo: Today I Learned
相关推荐
使用 AWS SDK for Java 2.x 操作 AWS CloudTrail:跟踪创建、事件查询与日志管理实战
使用 AWS SDK for Java 2.x 操作 AWS CloudTrail:跟踪创建、事件查询与日志管理实战 导读 本文基于 AWS Code Exam
示例工程教程后端AWS SDK for Rust CloudWatch Logs 实战:日志组、日志流、事件读取与大规模查询
AWS SDK for Rust CloudWatch Logs 实战:日志组、日志流、事件读取与大规模查询 本指南以 rustv1/examples/clou
示例工程教程后端如何使用Vue.Draggable实现高效的AWS CloudWatch Logs Insights拖拽日志查询
如何使用Vue.Draggable实现高效的AWS CloudWatch Logs Insights拖拽日志查询 Vue.Draggable是一款基于Sorta
前端UI组件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考