☰
AWS CLI 实战:用 `aws logs tail` 查找并实时跟踪服务器日志
2026/10/4 1:56:54 网站建设 项目流程
  • 文档
  • 教程
  • 知识库

【免费下载链接】til

:memo: Today I Learned

项目地址:https://gitcode.com/gh_mirrors/ti/til
点击查看免费下载

本篇技术指南讲解如何在已配置好 AWS CLI 凭据的前提下,用纯命令行方式定位 CloudWatch Logs 日志组,并实时跟踪 Rails 等生产服务输出的日志流。读完你将掌握aws logs tail的核心参数、用aws logs describe-log-groups从 CLI 侧反查日志组名,以及组合--follow、--no-cli-pager、--query等选项让日志排查更高效——全程无需打开 AWS Web 控制台。

前置条件:认证、权限与日志组

使用aws logs tail前需要满足两个基本前提:

  1. CLI 已认证:AWS CLI 已配置可用的凭证(Access Key 或 SSO),可以通过aws configure list-profiles查看本机已有的配置文件,并借助--profile参数或AWS_PROFILE环境变量切换目标账号(详见仓库文档 use-specific-aws-profile-with-cli.md)。
  2. 具备 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

小结

完整的排查链路可以总结为三步:

  1. aws logs tail help确认命令参数(必填group_name,可选--follow);
  2. aws logs describe-log-groups从 CLI 侧查日志组名,必要时配合--query过滤、--no-cli-pager关分页、--output table切换格式;
  3. aws logs tail <group_name> --follow实时跟踪目标服务的日志流。

这套流程完全在终端内完成,不依赖 AWS Web 控制台,非常适合 SSH 进服务器后快速排查生产问题,也可以进一步封装进运维脚本(例如先describe-log-groups抓取组名,再自动tail --follow),作为服务上线后日志巡检的起点。

  • 文档
  • 教程
  • 知识库

【免费下载链接】til

:memo: Today I Learned

项目地址:https://gitcode.com/gh_mirrors/ti/til
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询