K6 負載測試完整指南:搭配 Grafana 與 InfluxDB 實現即時監控
K6 負載測試完整指南:搭配 Grafana 與 InfluxDB 實現即時監控
專案概述
本專案展示如何使用 K6 進行 API 負載測試,並透過 InfluxDB 儲存測試數據,最後在 Grafana 上建立視覺化儀表板,實現即時監控測試結果。
架構說明
1 | |
核心元件
- K6: 開源負載測試工具,使用 JavaScript 編寫測試腳本
- InfluxDB: 時序資料庫,儲存測試過程中產生的指標數據
- Grafana: 資料視覺化平台,建立即時監控儀表板
一、測試腳本生成器
腳本自動生成
專案使用 Node.js 動態生成 K6 測試腳本,主要優勢:
- 參數化測試: 自動組合多個商店、日期區間和 API 端點
- 批量生成: 一次生成所有測試場景組合
- 易於維護: 集中管理測試配置
核心配置
1 | |
測試場景組合
透過三層迴圈自動生成所有測試組合:
1 | |
計算範例: 4 個店鋪 × 3 個日期區間 × 3 個端點 = 36 種測試場景
二、K6 負載測試配置
測試策略
專案採用 恆定到達率 (Constant Arrival Rate) 策略:
1 | |
關鍵指標
自定義指標追蹤:
1 | |
測試邏輯
每個虛擬用戶執行流程:
- 隨機選擇場景: 從 36 種組合中隨機選擇一個測試場景
- 發送請求: 向目標 API 發送 GET 請求
- 驗證響應: 檢查狀態碼和響應內容
- 記錄指標: 追蹤響應時間和成功/失敗次數
1 | |
三、Docker 環境配置
Docker Compose 架構
使用 Docker Compose 快速啟動監控環境:
1 | |
服務說明
| 服務 | 端口 | 用途 | 資料持久化 |
|---|---|---|---|
| InfluxDB | 8086 | 儲存測試指標數據 | ./influxdb |
| Grafana | 3000 | 視覺化儀表板 | ./grafana |
四、執行流程
1. 啟動監控環境
1 | |
輸出結果:
1 | |
2. 生成測試腳本
1 | |
生成 load-test.js 文件,包含所有測試場景。
3. 執行負載測試
1 | |
參數說明:
--out influxdb: 將測試數據輸出到 InfluxDBhttp://localhost:8086/k6: InfluxDB 連接字串(資料庫名稱為 k6)
4. 查看測試結果
在終端中會即時顯示:
1 | |
五、Grafana 儀表板配置
首次登入設定
- 訪問
http://localhost:3000 - 使用預設帳密登入:
admin/admin - 首次登入會要求修改密碼
添加 InfluxDB 數據源
步驟:
- 點擊左側齒輪圖示 → Configuration → Data Sources
- 點擊 Add data source → 選擇 InfluxDB
- 配置連接參數:
1
2URL: http://influxdb:8086
Database: k6 - 點擊 Save & Test 驗證連接
建立監控面板
關鍵指標面板
請求速率 (Requests Per Second)
- Query:
SELECT mean("value") FROM "http_reqs" WHERE $timeFilter GROUP BY time(1s) - 圖表類型: Graph
- 監控每秒請求數是否達到目標(200 RPS)
- Query:
響應時間分佈
- Query:
SELECT mean("value") FROM "http_req_duration" WHERE $timeFilter GROUP BY time(1s) - 圖表類型: Graph
- 顯示 P95, P99 百分位數
- Query:
錯誤率
- Query:
SELECT sum("value") FROM "custom_errors" WHERE $timeFilter - 圖表類型: Stat
- 監控失敗請求數量
- Query:
成功率
- Query:
1
2SELECT (sum("custom_success") / (sum("custom_success") + sum("custom_errors"))) * 100
FROM "k6" WHERE $timeFilter - 圖表類型: Gauge
- 顯示成功率百分比
- Query:
進階面板
虛擬用戶數 (VUs)
- 監控當前活躍的虛擬用戶數量
- 驗證是否達到預期並發數
數據傳輸量
- 顯示發送/接收的數據量
- 評估網路頻寬使用
六、測試結果分析
關鍵性能指標 (KPI)
| 指標 | 目標值 | 說明 |
|---|---|---|
| RPS | 200/秒 | 每秒請求數 |
| P95 延遲 | < 100ms | 95% 請求的響應時間 |
| 錯誤率 | < 1% | 失敗請求比例 |
| 成功率 | > 99% | 成功請求比例 |
效能瓶頸識別
透過 Grafana 儀表板觀察:
- 響應時間突增 → 可能是資料庫查詢慢或 API 處理邏輯問題
- 錯誤率上升 → 檢查錯誤日誌,識別失敗原因(超時、5xx 錯誤等)
- VU 數量達到上限 → 系統可能無法承受更高並發
- 檢查點失敗 → 特定驗證條件未通過(如響應格式錯誤)
七、最佳實踐建議
測試設計
- 漸進式加壓: 先從低負載開始,逐步增加到目標負載
- 場景多樣化: 模擬真實用戶行為,混合不同 API 端點
- 設定合理閾值: 根據業務需求定義可接受的性能指標
數據保存
1 | |
持續監控
- 基線測試: 建立效能基線,用於後續比較
- 回歸測試: 每次部署後執行負載測試,確保性能未退化
- 告警設定: 在 Grafana 設定告警規則,當指標異常時自動通知
八、故障排除
常見問題
Q: K6 無法連接到 InfluxDB
1 | |
Q: Grafana 無法查詢數據
- 確認數據源配置正確(URL 使用容器名稱
influxdb) - 檢查資料庫名稱是否為
k6 - 驗證時間範圍設定
Q: 測試過程中大量錯誤
- 檢查目標 API 是否可訪問
- 驗證認證 headers 是否正確
- 降低負載(減少
rate參數)重新測試
總結
本專案提供了一套完整的負載測試解決方案:
✅ 自動化: 腳本自動生成,減少手動配置
✅ 可擴展: 輕鬆添加新的測試場景
✅ 即時監控: Grafana 儀表板實時顯示性能指標
✅ 數據持久化: InfluxDB 保存歷史數據用於分析
✅ 容器化: Docker Compose 一鍵啟動環境
透過這套工具,團隊可以:
- 在開發階段及早發現性能問題
- 評估系統在高負載下的穩定性
- 為容量規劃提供數據支撐
- 建立持續的性能監控體系
參考資源
K6 負載測試完整指南:搭配 Grafana 與 InfluxDB 實現即時監控
https://shengshengyang.github.io/2025/11/17/k6-test/