> For the complete documentation index, see [llms.txt](https://philipzheng.gitbook.io/docker_practice/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://philipzheng.gitbook.io/docker_practice/observability.md).

# 容器監控與日誌

在生產環境中，容器化應用部署完成後，即時掌握容器的運行狀態以及應用日誌非常重要。本章將以 Docker/Compose 的場景為主，介紹容器監控與日誌管理的落地思路與最小實務閉環。

對於 Kubernetes 場景，可觀測性鏈路與元件選擇通常會有所不同（例如使用 Prometheus Operator、日誌採集 DaemonSet 等）。本章會在關鍵點給出遷移提示，但不會展開為完整的 Kubernetes 教學。

我們將重點探討以下內容：

* **容器監控**：以 Prometheus 為主，講解如何採集和展示容器效能指標。
* **日誌管理**：以 ELK (Elasticsearch, Logstash, Kibana) 套件為例，介紹集中式日誌收集平台。

為了讓讀者能夠在生產環境中真正用起來，本章會補齊以下“最小閉環”：

* 關鍵指標與日誌的驗證方法
* 常見故障排查路徑
* 最小告警閉環（Prometheus -> Alertmanager -> 接收端）
* 日誌容量治理的最小實務

## 本章內容

* [Prometheus 監控](/docker_practice/observability/prometheus.md)
  * 容器監控基礎、指標採集與告警設定。
* [ELK 日誌管理](/docker_practice/observability/elk.md)
  * 集中式日誌收集、儲存與檢索。
* [效能最佳化](/docker_practice/observability/performance-optimization.md)
  * 容器和應用效能最佳化實務。

## 本章總結

本章從三個維度介紹了容器可觀測性：

* **指標監控**：以 Prometheus + Grafana 為主，完成指標採集、儲存與視覺化。
* **日誌管理**：以 EFK/ELK 為例，完成容器日誌的集中採集、檢索與分析。
* **效能最佳化與故障診斷**：把觀測到的資料落到資源限制、瓶頸定位與線上排錯上。

生產環境中，建議將“可觀測性”當成一個完整閉環：**採集 -> 儲存 -> 展示 -> 告警 -> 排錯 -> 容量治理**。

## 擴展閱讀：Docker 日誌驅動

Docker 提供了多種日誌驅動 (Log Driver)，用於將容器標準輸出的日誌轉發到不同後端。

常見的日誌驅動包括：

* `json-file`：預設驅動，將日誌以 JSON 格式寫入本地檔案。
* `syslog`：將日誌轉發到 syslog 伺服器。
* `journald`：將日誌寫入 systemd journal。
* `fluentd`：將日誌轉發到 fluentd 收集器。
* `gelf`：支持 GELF 協定的日誌後端（如 Graylog）。
* `awslogs`：發送到 Amazon CloudWatch Logs。

生產建議：無論採用哪種驅動，都要明確日誌的保留週期、容量上限與傳輸可靠性，避免“日誌把磁碟寫滿”或“鏈路抖動導致丟日誌”。

## 19.4 日誌平台選型對比與注意事項

日誌平台通常由“採集/處理/儲存/查詢展示”幾個部分組成。常見選型包括：

* **EFK/ELK**：Elasticsearch + Fluentd/Logstash + Kibana，適合全文檢索與結構化查詢。
* **Loki + Grafana**：更偏“日誌像指標一樣儲存”的思路，部署與成本可能更友好，但查詢能力與使用習慣不同。

選型時建議關注：

* **寫入壓力與背壓**：當儲存端變慢時，採集端是否會緩衝、落盤、重試，是否會影響業務。
* **容量治理**：是否具備按天/按大小滾動、保留策略、生命週期管理 (ILM) 等能力。
* **安全與合規**：鑑權、TLS、稽核、敏感欄位脫敏。
* **可維運性**：升級策略、備份恢復、告警指標是否齊全。

## 19.5 上線前檢查清單

你可以用下面的清單快速檢查“是否具備最小生產可用性”：

* Prometheus 資料目錄已持久化，並設定了合理的保留週期。
* Prometheus Targets 全部為 `UP`，並且關鍵查詢（CPU/記憶體/容器指標）有資料。
* Grafana 已匯入面板並能定位到具體實例/容器；預設帳號密碼已修改。
* 至少有一條關鍵告警已打通 Alertmanager 的接收鏈路，並驗證告警能被正確發送與抑制。
* Elasticsearch 資料目錄已持久化，並有明確的日誌保留週期與容量上限策略。
* Kibana 能查詢到最新日誌；當 UI 異常時能用 Elasticsearch API 驗證入庫。
* 可觀測性元件未直接暴露到公網，存取已加鑑權或置於內網。

## 延伸閱讀

* [底層實作](/docker_practice/underly.md)：容器技術的核心基礎
* [Docker Compose](/docker_practice/compose.md)：容器應用編排
