AWS CloudWatch Log Insights 完整入門指南

更新日期: 2025 年 6 月 10 日

在現代雲端應用中,日誌(Logs) 是開發、監控、除錯與維運不可或缺的工具。

但隨著系統日誌量暴增,如何有效分析與查詢日誌成為一大挑戰。

這就是 AWS CloudWatch Log Insights 登場的時刻!

CloudWatch Log Insights 是 AWS 提供的一項 互動式日誌查詢工具,能夠快速分析來自 EC2、Lambda、ECS、API Gateway 等服務的日誌資料。

透過簡潔的查詢語法,使用者可以即時找出錯誤、追蹤事件、分析效能瓶頸,大幅提高開發與維運效率。

Log Insights 的核心概念

在開始學習 CloudWatch Log Insights 之前,我們先要理解幾個基礎概念:

什麼是 CloudWatch Logs?什麼是 Log Group 和 Log Stream?

這些是理解 Log Insights 查詢架構的根本。

什麼是 CloudWatch Logs?

CloudWatch Logs 是 AWS 提供的一項服務,主要用來集中儲存與管理系統日誌(Log)

你可以把來自不同服務的日誌,統一送到 CloudWatch Logs 中查看、分析、設定警示與建立圖表。

這在實務上非常重要,因為雲端架構往往涉及多個服務與資源(如 EC2、Lambda、API Gateway 等),若每個服務的日誌都散落各處,會非常難以統一追蹤或除錯。

✅ 常見日誌來源:

服務名稱日誌內容備註
EC2 實例系統 log、應用程式 log需搭配 CloudWatch Agent 安裝與設定
Lambda 函式console.log() 輸出、自動錯誤日誌AWS 自動整合,無需額外設定
ECS / Fargate容器內部標準輸出與錯誤輸出(STDOUT / STDERR)需設定日誌驅動為 awslogs
API Gateway訪問請求日誌、錯誤訊息、執行階段追蹤可透過選項啟用整合
VPC Flow Logs網路封包流向資料常用於安全監控與流量分析
RDS(關聯式資料庫)資料庫操作與錯誤記錄需開啟對應的 log 類型

🔧 簡單流程圖:

flowchart TD
    A[應用程式 / AWS 服務] --> B[日誌輸出]
    B --> C[CloudWatch Logs 統一收集]
    C --> D[CloudWatch Log Insights 查詢分析]

什麼是 Log Group 與 Log Stream?

CloudWatch Logs 中的日誌並不是毫無組織地堆在一起,它使用「Log Group」和「Log Stream」的結構,幫助你分類與查找。

📁 Log Group(日誌群組)

  • 定義:Log Group 是一個邏輯分類的容器,用來儲存同一類型的日誌。例如:
  • /myapp/production:你的正式環境應用程式日誌
  • /lambda/my-function:某個 Lambda 函式的執行日誌
  • 應用:你可以針對 Log Group 設定:
  • 保留天數(自動刪除過期日誌)
  • IAM 權限(限制誰可以讀取或查詢)
  • 建立告警(如當錯誤訊息出現次數過多時通知你)

Log Stream(日誌串流)

  • 定義:Log Stream 是 日誌的實際紀錄單元,通常與某一台伺服器、容器實例或某次 Lambda 執行綁定。
  • 範例
  • EC2 實例的 Log Stream 名稱可能是 i-1234567890abcdef0
  • Lambda 的 Log Stream 可能是以執行時間為名,例如 2025/06/07/[$LATEST]abcdef1234567890
  • 特性:Log Stream 是不可修改的追加式紀錄,你只能往裡面寫新資料,不能刪除或編輯。

舉例說明

假設你有一個 EC2 執行中的 Web Server:

  • Log Group:你建立一個 /myapp/web-server 的 Log Group 來儲存所有伺服器的日誌
  • Log Stream:當你啟動三台 EC2,每台都會產生自己的 Log Stream:
  • i-abc1234567890
  • i-def9876543210
  • i-ghi0000000000

你就可以在 Log Insights 中針對 /myapp/web-server 查詢所有伺服器的錯誤日誌,或只篩選特定實例。

Log Insights 的查詢語法介紹(詳細解析)

CloudWatch Log Insights 提供一套類似 SQL 的查詢語法,但設計上更貼近日誌格式的需求。

讓你能用簡潔語法快速分析大量資料,找出錯誤、統計事件、追蹤流程、甚至建立儀表板。

與傳統 SQL 不同的是,Log Insights 更偏向資料探索與文字解析導向,支援 JSON 字段解析、正則表達式篩選、欄位聚合分析等常見日誌分析需求。

基本查詢語法結構說明

以下是一段最常見的查詢語法範例:

fields @timestamp, @message
| filter @message like /error/
| sort @timestamp desc
| limit 20

🔎 每一行的意思:

行號語法功能說明
1fields @timestamp, @message顯示欄位:這裡選擇顯示時間與原始訊息欄位。@ 是內建欄位的前綴。
2filter @message like /error/篩選條件:只顯示內容中包含 “error” 的訊息,使用正則表示法。
3sort @timestamp desc排序:按照時間欄位由新到舊排列。
4limit 20限制只顯示前 20 筆結果,避免大量資料灌出來。

這段語法很適合用來「快速找出最近的錯誤訊息」。

常用關鍵字與語法功能

Log Insights 查詢語法是以管線 | 為主體,每一段都是一個資料處理步驟。

以下是常用的指令與功能說明:

指令功能說明
fields選擇要顯示的欄位。可搭配內建欄位(如 @timestamp, @message),或自己解析出來的欄位。
filter設定條件來篩選資料,可搭配 =, !=, like, in, > 等運算子。也可搭配正則表達式。
sort排序資料,常搭配 @timestamp desc 來顯示最新資料在前。
limit限制回傳的筆數,預設為 10000,建議查詢時搭配 limit 降低負擔。
parse拆解原始文字訊息,將未結構化的 log 字串轉為可查詢欄位。
stats做資料統計與聚合運算,如 count(), avg(), sum(), min(), max()。
display只顯示指定欄位(類似 fields,但不影響後續計算欄位)。
limit指定最多回傳幾筆結果。

內建欄位(@ 開頭)

Log Insights 會自動提供一些欄位給你使用,不需要手動解析:

欄位名稱說明
@timestamp日誌的時間戳記
@message日誌的原始訊息內容
@logStream來源 Log Stream 名稱
@logLog Group 名稱
@ingestionTimeAWS 接收到日誌的時間

進階應用範例

在實務中,我們使用 CloudWatch Log Insights 不只是查幾筆資料,更多的是排除錯誤、監控異常行為、分析趨勢變化、追蹤使用者行為

以下提供三種最常見的進階應用場景,並搭配實際語法與說明。

找出 Lambda 錯誤訊息

fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 50

✅ 使用情境:

當你的 AWS Lambda 函式發生錯誤時,錯誤訊息通常會以 ERRORException 出現在 @message 中。

這段查詢可以幫你快速「撈出最近的錯誤」,協助你第一時間掌握問題發生時間與內容。

🔍 查詢說明:

  • fields @timestamp, @message:顯示時間與訊息內容,方便追蹤發生時間與錯誤訊息。
  • filter @message like /ERROR/:使用正規表達式 /ERROR/ 來找出包含「ERROR」字樣的訊息,不區分大小寫。
  • sort @timestamp desc:時間倒序排列,讓你看到最新的錯誤。
  • limit 50:只顯示前 50 筆,避免一次載入過多資料。

🛠 提示:

  • 可根據實際錯誤關鍵字調整,如:/Exception//Timeout//Unhandled/
  • 若你的 log 使用 JSON 格式輸出,可以搭配 parse 抓出錯誤類型與訊息欄位。

統計某段時間內的錯誤數量

filter @message like /ERROR/
| stats count() by bin(5m)

✅ 使用情境:

這個查詢適合用來觀察錯誤事件是否有集中爆發,例如:

  • 是否在某個時間區段突然出現大量錯誤?
  • 系統是否因高流量或外部依賴失效導致故障?

🔍 查詢說明:

  • filter @message like /ERROR/:先選出包含錯誤訊息的 log。
  • stats count() by bin(5m)
  • stats count():對每個時間區段統計錯誤筆數。
  • bin(5m):表示「以 5 分鐘為一單位」來分組時間區段。

📈 延伸應用:

這類資料可以直接在 Log Insights 內「視覺化為折線圖」,也能匯入 CloudWatch Dashboard。

解析 JSON 結構中的欄位

假設你的日誌格式為:

{"level": "error", "userId": "abc123", "msg": "Unauthorized"}

你可以這樣查詢特定使用者的日誌:

parse @message '"userId": "*"' as userId
| filter userId = "abc123"
| display userId, @message

✅ 使用情境:

當你想追蹤某個使用者的行為軌跡、錯誤紀錄、登入狀況等,這類查詢就非常有用。

🔍 查詢說明:

  • parse @message '"userId": "*"' as userId:透過簡易的樣板語法,把 message 中的 userId 值解析出來成為一個獨立欄位。
  • filter userId = "abc123":過濾出這個使用者相關的所有 log。
  • display userId, @message:只顯示你關注的欄位,讓查詢結果更清晰。

🛠 補充技巧:

  • 如果你的訊息是標準 JSON(非純字串),也可以使用 @message.userId 的方式存取。
  • 想一次解析多個欄位,也可使用逗號分隔:
  parse @message '"level": "*", "userId": "*", "msg": "*"' as level, userId, msg

如何開始使用 Log Insights?

CloudWatch Log Insights 是 AWS 提供的互動式日誌查詢工具,只要幾個步驟就能開始分析 log 資料。

以下將分為「使用 AWS Console 操作」與「權限設定要求」兩大部分說明,讓你不論是新手還是有經驗的工程師都能順利上手。

透過 AWS Console 使用(介面操作教學)

🔹 步驟一:登入 AWS 管理控制台

前往 https://console.aws.amazon.com/,輸入你的帳號與密碼登入 AWS 控制台。

🔹 步驟二:開啟 CloudWatch 服務

在上方搜尋列輸入「CloudWatch」,或從左側選單中點選「CloudWatch」,進入監控與日誌管理服務。

🔹 步驟三:進入 Log Insights 頁面

在 CloudWatch 左側選單中,找到 「Log Insights」 選項並點擊。

這裡就是你進行查詢的主畫面。

🔹 步驟四:選擇 Log Group

在畫面上方的「Log Group」下拉選單中,選擇你想分析的日誌來源。

範例如下:

  • /aws/lambda/my-function:某個 Lambda 函式的 log group
  • /ecs/my-app:ECS container 的 log group
  • /myapp/production:自訂應用程式的 log group

你可以同時選擇多個 Log Group 查詢(支援跨來源搜尋)。

🔹 步驟五:設定時間範圍

在查詢區塊上方,選擇要查詢的時間範圍(例如:最近 30 分鐘、1 小時、昨天、過去 7 天…)。

建議初期查詢先縮小範圍以加快回應速度。

🔹 步驟六:撰寫查詢語法並執行

在文字框內輸入你的查詢語法,例如:

fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20

點擊「Run query」按鈕後,查詢結果會顯示在下方區塊。

🔹 額外功能提示:

功能說明
🧩 儲存查詢點擊右上角「Save」可儲存常用查詢語法
📈 建立圖表結果支援折線圖、直條圖等視覺化,適合加到 Dashboard
📤 輸出結果可將查詢結果複製、下載、或透過 API 使用
📅 支援自訂時間區間精確查詢特定時間點的系統行為

搭配 IAM 權限設定(最小權限原則)

為了讓使用者能夠執行 Log Insights 查詢,需要賦予以下 IAM 權限。

若沒有這些權限,使用者將無法開啟查詢頁面或看到結果。

📄 建議權限設定範本:

{
  "Effect": "Allow",
  "Action": [
    "logs:StartQuery",         // 啟動查詢
    "logs:StopQuery",          // 停止查詢(若需要中斷)
    "logs:GetQueryResults",    // 取得查詢結果
    "logs:DescribeLogGroups",  // 查看可用的 log group
    "logs:DescribeLogStreams"  // 查看 log stream 詳情
  ],
  "Resource": "*"
}

🧠 權限說明:

權限名稱功能用途
logs:StartQuery啟動一次查詢
logs:GetQueryResults把查詢的結果顯示出來
logs:StopQuery強制中止正在執行的查詢(選擇性)
logs:DescribeLogGroups查詢有哪些 log group 可用
logs:DescribeLogStreams用於深入查詢 log stream(非必要,但建議加入)

🔒 安全性與角色建議

建議項目說明
✅ 最小權限原則只給需要用 Log Insights 的人使用,避免無意中查詢到敏感資料
🔐 使用 IAM Role 指派可透過 IAM 群組設定權限,避免單一帳號管理困難
👨‍💻 角色建議DevOps、工程師、SRE 等具除錯責任的角色可以授權使用

延伸補充:用 CLI 或 SDK 操作 Log Insights

如果你想透過程式來執行查詢(例如在 CI/CD 中整合 log 分析),也可以使用:

  • AWS CLI:aws logs start-query
  • SDK(如 boto3、AWS SDK for JavaScript)

例如使用 CLI 查詢:

aws logs start-query \
  --log-group-name "/aws/lambda/my-function" \
  --start-time 1622505600 \
  --end-time 1622592000 \
  --query-string "fields @timestamp, @message | limit 10"

結語:Log Insights 能為你做什麼?

無論你是開發人員、維運工程師、還是 DevOps 實踐者,CloudWatch Log Insights 都能協助你:

  • 快速查找錯誤與異常
  • 分析系統趨勢與流量模式
  • 建立自動化告警與儀表板

善用 Log Insights,不僅讓你更了解自己的系統,也能大幅提升問題解決效率與系統可觀測性(Observability)!

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *