在現代雲端應用中,日誌(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 等),若每個服務的日誌都散落各處,會非常難以統一追蹤或除錯。
✅ 常見日誌來源:
🔧 簡單流程圖:
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-abc1234567890i-def9876543210i-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🔎 每一行的意思:
這段語法很適合用來「快速找出最近的錯誤訊息」。
常用關鍵字與語法功能
Log Insights 查詢語法是以管線 | 為主體,每一段都是一個資料處理步驟。
以下是常用的指令與功能說明:
內建欄位(@ 開頭)
Log Insights 會自動提供一些欄位給你使用,不需要手動解析:
進階應用範例
在實務中,我們使用 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」按鈕後,查詢結果會顯示在下方區塊。
🔹 額外功能提示:
搭配 IAM 權限設定(最小權限原則)
為了讓使用者能夠執行 Log Insights 查詢,需要賦予以下 IAM 權限。
若沒有這些權限,使用者將無法開啟查詢頁面或看到結果。
📄 建議權限設定範本:
{
"Effect": "Allow",
"Action": [
"logs:StartQuery", // 啟動查詢
"logs:StopQuery", // 停止查詢(若需要中斷)
"logs:GetQueryResults", // 取得查詢結果
"logs:DescribeLogGroups", // 查看可用的 log group
"logs:DescribeLogStreams" // 查看 log stream 詳情
],
"Resource": "*"
}🧠 權限說明:
🔒 安全性與角色建議
延伸補充:用 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)!