目前已經理解了 LINE Messaging API 的核心功能,包括如何接收訊息、串接第三方服務,以及發送多種類型的訊息。接下來,我們將把原本架設在 ngrok 的後端伺服器,透過 GitHub 自動化部署到 Render 平台上線。
在正式部署到生產環境之前,完善的日誌系統至關重要。本文將先完成 Grafana Cloud Loki 的申請與配置,透過 Postman 測試 HTTP API 推送日誌的流程,為後續整合 NestJS 與 Pino 日誌庫做好準備,確保系統上線後具備完整的可觀測性。
Grafana Cloud Loki 是基於開源專案的日誌系統,專為雲端原生應用設計。其核心特色在於僅對日誌的元數據標籤(labels)建立索引,並且將日誌數據本身壓縮後儲存在 Object Storage
中,透過小型索引和高度壓縮的資料塊大幅降低營運成本。同時與 Grafana Dashboard 高度整合,可以供統一的日誌查詢和相關模板視覺化介面。
雖然 Loki 主要透過 Agent 進行日誌收集,但為了簡化部署架構,本文將採用 HTTP API 的方式讓應用程式直接傳送日誌數據,使 NestJS 應用結合 Pino 日誌庫能夠快速整合至 Loki 服務中。
【 使用 HTTP API 方式需要完成以下準備工作】:
【 Grafana Cloud Loki free plan 限制 】
Step 1:註冊並登入 Grafana 官網後,即可看到此畫面
Step 2:進入 Grafana 帳戶管理頁面
再次前往 Grafana 官網,點選右上角的
My Account
進入帳戶管理。
Grafana 免費方案提供了多種雲端服務工具可供試用,包含 Loki(日誌管理)、k6(效能測試)等實用工具,適合入門學習使用。
Step 3:點選 Grafana Cloud Stack 下方的灰色按鈕「Details」
Step 4:找到 Loki 日誌系統,點選藍色按鈕「Send Logs」
Step 5:產生 API Token
點選
Password
欄位旁的Generate now
按鈕以產生 API Token
- URL 及 User 的部分會在後續 HTTP 測試中使用!!!(先貼到記事本)
- Generate 產生的 API Token 也會在後續 HTTP 測試中使用!!!(先貼到記事本)
Step 6:建立 HTTP 請求 Loki 所需的 API Toke
建立 API Token 時,預設 Scope 僅有讀取權限,我們還需要新增寫入權限才能將日誌推送到 Loki
請留意 Token 的名稱設定,稍後需要用它來調整權限。
Step 7:調整 API Token 權限
點選左側選單的 Access Policies,找到剛才建立的 Policy(可透過名稱比對),點選進入編輯。
Step 8:設定 Policy 僅保留日誌讀取權限
進入 Access Policies 後,找到剛才建立的 Policy,將權限調整為僅保留日誌讀取權限,其他暫時用不到的權限可以關閉。
Step 9:建立日誌寫入權限的 Access Policy
點選 Create access policy 建立第二個 Policy,這次僅設定日誌寫入權限。
- 讀取 Policy:允許透過 Grafana 介面查詢和檢視 Loki 中的日誌
- 寫入 Policy:允許應用程式透過 HTTP 請求將日誌推送至 Loki
完成以上設定後,Grafana Cloud Loki 透過 HTTP 傳輸的相關配置就完成了。Retry
根據 Grafana Loki HTTP 官方文件,我們可以使用 /loki/api/v1/push
端點進行日誌推送測試。
【 Postman 測試設定 】
Step 1:設定當前時間戳至環境變數
若時間戳與當前時間差距過大,會回傳 400 錯誤
透過 Pre-request Script
在發送請求前取得當前時間戳,並設定為環境變數供 body
使用。
Step 2:設定 Postman 請求參數
/loki/api/v1/push
Basic Auth
raw
格式,類型為 JSON
{
"streams": [
{
"stream": {
"app": "nestjs",
"service": "nestjs-api"
},
"values": [
[ "{{now_ns}}", "Grafana Postman Test Message" ]
]
}
]
}
stream
中的標籤(如 app、service)可透過 Grafana Loki 的LogQL
進行查詢values
陣列格式為:[時間戳, 日誌訊息]
Step 3:發送測試請求
將上述 JSON 內容貼至 Postman 的 Body 欄位,點擊 Send 發送請求。
收到狀態碼 204 表示日誌已成功推送至 Grafana Loki
Step 1:進入 Grafana 儀表板
登入 Grafana Cloud 官網後,點擊 Launch
按鈕即可進入儀表板。
Step 2:選擇 Loki 資料源
點選左側選單的 Explore,然後選擇對應的 Loki 資料源。
Step 3:使用標籤選擇器篩選日誌
透過標籤選擇器篩選日誌,並確認時間區間內有相應的日誌資料。
完成以上步驟後,我們已成功透過 HTTP 將應用程式日誌推送至 Grafana Loki,並可使用標籤選擇器進行查詢。
今天完成了 Grafana Cloud Loki 的申請與配置,包括 API Token 建立、讀寫權限分離設定,並透過 Postman 成功測試日誌推送功能。
Grafana Loki 採用 LogQL 語法查詢日誌,透過標籤篩選資料並以 Pipeline 串接運算符處理,官方文件提供豐富範例可深入學習進階用法,目前我們先用基礎標籤選擇器確認日誌已成功寫入。