prometheus與grafana如何搭建容器化應用監控體系?1.使用docker compose部署prometheus,配置prometheus.yml文件指定抓取目標如prometheus自身、node_exporter等;2.部署grafana并配置prometheus為數據源,導入現成dashboard查看指標;3.在應用中使用prometheus_client暴露指標,配置prometheus抓取該端點;4.通過promql查詢并在grafana創建可視化圖表;5.結合各類exporter如node exporter、cadvisor等監控不同服務性能。
容器化應用的性能監控,用Prometheus + Grafana 幾乎是標配。它們倆加起來,能讓你對應用的運行狀態了如指掌,排查問題也方便很多。
Prometheus負責收集各種指標數據,Grafana負責把這些數據可視化,讓你一眼就能看出問題所在。
Prometheus + Grafana 如何搭建一套完整的容器化應用監控體系?
解決方案
-
Prometheus 的部署和配置:
首先,你需要一個運行 Prometheus 的地方。可以直接在服務器上部署,也可以用 docker 容器化部署。推薦后者,方便管理和擴展。
- Docker 部署: 直接用 Docker Compose 文件搞定。 創建一個 docker-compose.yml 文件,內容如下:
version: '3.7' services: prometheus: image: prom/prometheus:latest ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml restart: always
- 配置 Prometheus: 創建一個 prometheus.yml 文件,告訴 Prometheus 去哪里抓取數據。
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter' static_configs: - targets: ['node-exporter:9100']
這個配置里,Prometheus 會每 15 秒抓取一次自己的數據(localhost:9090),還會抓取 node_exporter 的數據(node-exporter:9100)。 node_exporter 用來收集服務器的硬件和操作系統指標。
- 啟動 Prometheus: 在 docker-compose.yml 文件所在的目錄運行 docker-compose up -d。
-
Grafana 的部署和配置:
Grafana 也是用 Docker 部署,和 Prometheus 類似。
- Docker 部署: 修改 docker-compose.yml 文件,添加 Grafana 的配置:
version: '3.7' services: prometheus: image: prom/prometheus:latest ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml restart: always grafana: image: grafana/grafana:latest ports: - 3000:3000 depends_on: - prometheus restart: always
-
監控容器化應用:
要監控容器化應用,需要在應用中暴露 Prometheus 格式的指標。 有很多現成的庫可以做到這一點,比如 python 的 prometheus_client。
-
暴露指標: 在你的應用中,用 prometheus_client 收集各種指標,比如 HTTP 請求數量、響應時間等等。 然后,暴露一個 HTTP 端點,讓 Prometheus 可以抓取這些指標。
-
配置 Prometheus: 修改 prometheus.yml 文件,添加一個 job,指向你的應用的 HTTP 端點。
scrape_configs: - job_name: 'my_app' static_configs: - targets: ['my-app:8000']
-
重啟 Prometheus: 讓 Prometheus 重新加載配置。
-
在 Grafana 中可視化: 在 Grafana 中,創建新的 Dashboard,用 Prometheus 的查詢語言 PromQL 查詢你的應用的指標,然后把它們可視化出來。
-
Prometheus Exporter 有哪些?
Prometheus Exporter 相當于一個適配器,它負責把各種數據源的數據轉換成 Prometheus 可以理解的格式。 種類很多,常見的有:
- Node Exporter: 監控服務器的硬件和操作系統指標,比如 CPU 使用率、內存占用、磁盤 I/O 等等。
- cadvisor: 監控 Docker 容器的資源使用情況,比如 CPU、內存、網絡 I/O 等等。
- mysql Exporter: 監控 MySQL 數據庫的性能指標,比如連接數、查詢速度、慢查詢等等。
- redis Exporter: 監控 Redis 數據庫的性能指標,比如內存使用、鍵的數量、QPS 等等。
- HAProxy Exporter: 監控 HAProxy 負載均衡器的性能指標,比如連接數、請求數量、響應時間等等。
Prometheus 的指標類型有哪些?
Prometheus 的指標類型主要有四種:
- Counter: 計數器,只能增加,不能減少。 比如 HTTP 請求總數、錯誤數量等等。 重啟后會清零。
- Gauge: 儀表盤,可以增加也可以減少。 比如 CPU 使用率、內存占用、溫度等等。
- Histogram: 直方圖,用于統計數據的分布情況。 比如 HTTP 請求的響應時間分布。
- Summary: 摘要,和直方圖類似,但是它會直接計算分位數,比如 95% 響應時間。
Prometheus 的 PromQL 查詢語言怎么用?
PromQL 是 Prometheus 的查詢語言,功能很強大。
- 基本查詢: 直接輸入指標的名稱,就可以查詢該指標的當前值。 比如 node_cpu_seconds_total。
- 時間范圍查詢: 用 [] 指定時間范圍。 比如 node_cpu_seconds_total[5m] 表示查詢過去 5 分鐘的 CPU 使用率。
- 聚合查詢: 用 sum(), avg(), max(), min() 等函數進行聚合。 比如 sum(node_cpu_seconds_total) 表示計算所有 CPU 的總使用率。
- 過濾查詢: 用 {} 指定過濾條件。 比如 node_cpu_seconds_total{cpu=”0″} 表示查詢 CPU 0 的使用率。
- 速率查詢: 用 rate() 函數計算指標的變化速率。 比如 rate(node_cpu_seconds_total[5m]) 表示計算過去 5 分鐘的 CPU 使用率的變化速率。
Prometheus 和 Grafana 的最佳實踐有哪些?
- 監控所有關鍵指標: CPU、內存、磁盤 I/O、網絡 I/O、HTTP 請求數量、響應時間等等。
- 設置合理的告警: 當指標超過閾值時,及時發出告警。
- 使用現成的 Dashboard: Grafana 有很多現成的 Dashboard 可以直接使用,可以省去很多配置工作。
- 自定義 Dashboard: 根據自己的需求,自定義 Dashboard,把關鍵指標放在一起展示。
- 定期檢查和優化: 定期檢查 Prometheus 和 Grafana 的配置,優化查詢語句,提高性能。
- 做好數據備份: 定期備份 Prometheus 的數據,防止數據丟失。