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