無痛入門Prometheus:一個強大的開源監控和告警系統,安裝使用
一、前生今世
Prometheus 是完全開源的系統監控和告警工具包,它受 Google 內部的 BorgMon 監控系統啟發,由前Google 工程師從 2012 年開始在 SoundCloud 以開源軟件的形式進行研發,自此以后,許多公司和組織都采用了Prometheus 作為監控告警工具。Prometheus 的開發者和用戶社區非常活躍,它現在是一個獨立的開源項目,可以獨立于任何公司進行維護。
自2012年推出以來,許多公司和組織都采用了Prometheus,該項目擁有非常活躍的開發者和用戶社區。它現在是一個獨立的開源項目,獨立于任何公司進行維護。為了強調這一點,并明確項目的治理結構,Prometheus 于 2016 年加入 云原生計算基金會,成為繼Kubernetes之后的第二個托管項目。
Prometheus的主要特點是:
- 多維數據模型,其中時間序列數據由指標名稱和鍵/值對標識。
- PromQL,一種 利用此維度的靈活查詢語言。
- 不依賴分布式存儲;單個服務器節點是自治的。
- 時間序列收集通過 HTTP 上的拉模型進行。
- 通過中間網關支持推送時間序列。
- 通過服務發現或靜態配置發現目標。
- 多種圖形和儀表板支持模式。
二、架構圖
下圖說明了 Prometheus 的架構及其一些生態系統組件:
三、安裝
開啟內核路由轉發。
echo -e "net.ipv4.ip_forward = 1\nnet.ipv4.conf.default.rp_filter = 0 \nnet.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.conf sysctl -p
創建配置文件。
vim prometheus.yml
# my global config
global:
scrape_interval: 15s # 采集被監控段指標的一個周期
evaluation_interval: 15s # 告警評估的一個周期
# 告警的配置文件
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 告警規則配置
rule_files:
# - "first_rules.yml"
# 被監控端的配置,目前只有一個節點,就是prometheus本身
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
啟動鏡像,將主配置文件掛載到容器內。
docker run -d -p 9090:9090 \
--name prometheus \
--restart on-failure \
-v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
執行后需要下載鏡像文件,需要等待一會。
完全啟動后可以,訪問Prometheus自帶的UI:http://xx.xx.xx.xx:9090/。
自帶的WEB UI比較簡單,后面會說到功能比較全面dashboard grafana。
四、使用
cAdvisor 是 Google 開源的容器監控工具,它可以收集容器的資源使用情況、網絡流量、文件系統使用情況等指標數據。cAdvisor 可以部署在 Kubernetes 集群中的每個節點上,以收集集群中所有容器的監控數據。
cAdvisor 部署的目的如下:
- 監控容器的運行狀態:cAdvisor 可以收集容器的資源使用情況、網絡流量、文件系統使用情況等指標數據,這些數據可以幫助我們了解容器的運行狀態,并及時發現異常情況。
- 分析容器的性能瓶頸:通過分析 cAdvisor 收集的監控數據,我們可以分析容器的性能瓶頸,并采取措施進行優化。
- 提高容器的資源利用率:通過監控容器的資源使用情況,我們可以合理分配資源,提高容器的資源利用率。
cAdvisor 是 Kubernetes 集群中必不可少的監控工具,它可以幫助我們更好地了解和管理容器。
cAdvisor 的優勢
- 開源:cAdvisor 是完全開源的,可以免費使用。
- 輕量級:cAdvisor 是一個輕量級的應用程序,不會給集群帶來太大的負載。
- 易用:cAdvisor 的配置和使用都非常簡單。
cAdvisor 的缺點
- 數據存儲能力有限:cAdvisor 默認會將監控數據存儲在內存中,如果數據量較大,可能會導致內存溢出。
- 可視化能力有限:cAdvisor 本身沒有提供可視化工具,需要使用第三方工具來可視化監控數據。
cAdvisor 的部署
- 使用 Helm 部署:Helm 是一個 Kubernetes 包管理工具,可以使用 Helm 來部署 cAdvisor。
- 使用 Docker 部署:cAdvisor 可以作為 Docker 容器運行,可以使用 Docker 來部署 cAdvisor。
- 手動部署:可以下載 cAdvisor 的二進制文件,并手動部署到 Kubernetes 集群中。
下面介紹docker部署cAdvisor:
docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
訪問該地址,就能看到實時采集到的數據:http://xx.xx.xx.xx:8080/containers/。
http://xx.xx.xx.xx:8080/metrics/ 就是cAdvisor提供的數據接口。
然后修改prometheus.yml。
vim /data/prometheus/prometheus.yml
修改prometheus的配置文件,復制一個job文件,job_name 指名稱,targets為cAdvisor服務器地址ip和端口。
# global config
global:
scrape_interval: 15s # 采集被監控段指標的一個周期
evaluation_interval: 15s # 告警評估的一個周期
# 告警的配置文件
alerting:
alertmanagers:
- static_configs:
- targets:
# 告警規則配置
rule_files:
# - "first_rules.yml"
# 被監控端的配置,目前只有一個節點,就是prometheus本身
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'prometheus docker'
static_configs:
- targets: ['10.9.2.50:8080']
修改完成重啟prometheus。
docker restart prometheus
http://xx.xx.xx.xx:9090/targets 可以看到監控指標說明獲取數據成功。
五、監控界面
Grafana 是一個開源的監控和可視化工具,它可以連接到各種數據源,并以圖表、儀表盤和報表的形式展示數據。Grafana 可以用于監控任何類型的系統,包括 Kubernetes 集群、Web 應用程序、IoT 設備等。
Grafana 的功能
- 連接到各種數據源:Grafana 支持連接到各種數據源,包括 Prometheus、InfluxDB、Elasticsearch、MySQL、PostgreSQL 等。
- 以圖表、儀表盤和報表的形式展示數據:Grafana 提供了豐富的圖表類型,可以滿足不同的數據展示需求。
- 支持自定義儀表盤:Grafana 允許用戶自定義儀表盤,以滿足特定的監控需求。
- 支持報警:Grafana 可以將報警通知發送到 Slack、郵件等方式。
Grafana 的優勢
- 開源:Grafana 是完全開源的,可以免費使用。
- 靈活:Grafana 可以連接到各種數據源,并以各種方式展示數據。
- 易用:Grafana 的配置和使用都非常簡單。
Grafana 的缺點
- 數據存儲能力有限:Grafana 本身沒有提供數據存儲功能,需要使用第三方工具來存儲數據。
- 可視化能力有限:Grafana 提供的圖表類型有限,可能無法滿足復雜的監控需求。
Grafana 的部署
- 使用 Docker 部署:Grafana 可以作為 Docker 容器運行,可以使用 Docker 來部署 Grafana。
- 手動部署:可以下載 Grafana 的二進制文件,并手動部署到服務器上。
下面是docker方式部署grafana。
docker run -d --name=grafana -p 3000:3000 grafana/grafana
執行后,下載鏡像并啟動。http://xx.xx.xx.xx:3000,默認用戶名/密碼:admin/admin。
選擇 "Add your first data source"。
進入后選擇Prometheus。
填寫相關信息。
添加Prometheus模板。
輸入id號,193。
下拉,選擇Prometheus,然后Import。
成功展示來由Prometheus數據。