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
🔎 每一行的意思:
行號 | 語法 | 功能說明 |
---|---|---|
1 | fields @timestamp, @message | 顯示欄位:這裡選擇顯示時間與原始訊息欄位。@ 是內建欄位的前綴。 |
2 | filter @message like /error/ | 篩選條件:只顯示內容中包含 “error” 的訊息,使用正則表示法。 |
3 | sort @timestamp desc | 排序:按照時間欄位由新到舊排列。 |
4 | limit 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 名稱 |
@log | Log Group 名稱 |
@ingestionTime | AWS 接收到日誌的時間 |
進階應用範例
在實務中,我們使用 CloudWatch Log Insights 不只是查幾筆資料,更多的是排除錯誤、監控異常行為、分析趨勢變化、追蹤使用者行為。
以下提供三種最常見的進階應用場景,並搭配實際語法與說明。
找出 Lambda 錯誤訊息
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 50
✅ 使用情境:
當你的 AWS Lambda 函式發生錯誤時,錯誤訊息通常會以 ERROR
或 Exception
出現在 @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)!