Prometheus完整的部署方案+實(shí)戰(zhàn)實(shí)例

Prometheus簡(jiǎn)介是一套開(kāi)源的系統(tǒng)監(jiān)控報(bào)警框架。Prometheus作為新一代的云原生監(jiān)控系統(tǒng),相比傳統(tǒng)監(jiān)控監(jiān)控系統(tǒng)(Nagios或者Zabbix)擁有如下優(yōu)點(diǎn)
易管理性:Prometheus核心部分只有一個(gè)單獨(dú)的二進(jìn)制文件,可直接在本地工作,不依賴于分布式存儲(chǔ)
高效性:?jiǎn)我籔rometheus可以處理數(shù)以百萬(wàn)的監(jiān)控指標(biāo);每秒處理數(shù)十萬(wàn)的數(shù)據(jù)點(diǎn)
易于伸縮性:通過(guò)使用功能分區(qū)(sharing)+聯(lián)邦集群(federation)可以對(duì)Prometheus進(jìn)行擴(kuò)展,形成一個(gè)邏輯集群
豐富的看板:多種可視化圖表及儀表盤(pán)支持
針對(duì)容器監(jiān)控:對(duì)docker,k8S監(jiān)控有成熟解決方案
Prometheus架構(gòu)圖

Prometheus Server: 收集指標(biāo)和存儲(chǔ)時(shí)間序列數(shù)據(jù),并提供查詢接口
ClientLibrary:客戶端庫(kù)
Push Gateway: 短期存儲(chǔ)指標(biāo)數(shù)據(jù)。主要用于臨時(shí)性的任務(wù)
Exporters:采集已有的第三方服務(wù)監(jiān)控指標(biāo)并暴露metrics
Alertmanager:告警
Web UI :簡(jiǎn)單的web控制臺(tái)
官方安裝說(shuō)明
https://prometheus.io/docs/prometheus/latest/installation/
準(zhǔn)備兩臺(tái)服務(wù)器
192.168.106.101 #Prometheus服務(wù)端
192.168.106.100 #被監(jiān)控服務(wù)器
101下載prometheus.yml主配置文件
# my global config
global:
scrape_interval: 15s # 采集被監(jiān)控段指標(biāo)的一個(gè)周期
evaluation_interval: 15s # 告警評(píng)估的一個(gè)周期
# 告警的配置文件
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 告警規(guī)則配置
rule_files:
# - "first_rules.yml"
#被監(jiān)控端的配置
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: "docker"
static_configs:
- targets: ['192.168.31.62:8080']
- job_name: "Linux"
static_configs:
- targets: ['192.168.31.62:9100']
下載鏡像
docker pull prom/prometheus
開(kāi)啟內(nèi)核路由轉(zhuǎn)發(fā)
echo -e "net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.conf
sysctl -p
啟動(dòng)鏡像,將主配置文件掛載到容器內(nèi)
docker run -d --name=prometheus -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
http://192.168.106.101:9090/ #訪問(wèn)該地址,出現(xiàn)一個(gè)簡(jiǎn)單ui界面,說(shuō)明部署成功

實(shí)戰(zhàn)一:監(jiān)控一個(gè)容器服務(wù)(常用的監(jiān)控指標(biāo)有: 內(nèi)存,CPU,硬盤(pán),網(wǎng)絡(luò),狀態(tài)
)
非交互獲取容器的監(jiān)控指標(biāo)
`docker stats --no-stream lnmp_nginx `

cAdvisor (Container Advisor) 用于收集正在允許的容器資源使用和性能信息。相當(dāng)于zabbix-agent一樣提供一個(gè)數(shù)據(jù)采集的接口
docker部署cAdvisor:
100被監(jiān)控服務(wù)器安裝
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
訪問(wèn)該地址,就能看到實(shí)時(shí)采集到的數(shù)據(jù)
http://192.168.106.100:8080/containers/


http://192.168.106.100:8080/metrics #該地址的數(shù)據(jù)為prometheus識(shí)別的數(shù)據(jù)的接口

去101上修改prometheus的配置文件,復(fù)制一個(gè)job文件,job_name 指名稱(chēng),targets為cAdvisor服務(wù)器地址ip和端口
vim /tmp/prometheus.yml

docker restart prometheus #重啟服務(wù)
http://192.168.106.101:9090/ 可以看到監(jiān)控指標(biāo)說(shuō)明獲取數(shù)據(jù)成功

101服務(wù)器上安裝grafana
docker run -d --name=grafana -p 3000:3000 grafana/grafana

http://192.168.106.101:3000/ #p配置數(shù)據(jù)源,配置完成點(diǎn)擊保存

https://grafana.com/grafana/download #該地址下載grafana模板

保存,選擇Prometheus數(shù)據(jù)源后可以看到如下圖所示


可以看到100上所有容器都被監(jiān)控到了,至此監(jiān)控容器完成!
實(shí)戰(zhàn)二:監(jiān)控Linux主機(jī)
編寫(xiě)了一個(gè)采集linux主機(jī)metrics的腳本
cat node_exporter.sh
#!/bin/bash
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar zxf node_exporter-0.17.0.linux-amd64.tar.gz
mv node_exporter-0.17.0.linux-amd64 /usr/local/node_exporter
cat <<EOF >/usr/lib/systemd/system/node_exporter.service
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable node_exporter
systemctl restart node_exporter
運(yùn)行這個(gè)腳本就能監(jiān)控Linux主機(jī)
測(cè)試 訪問(wèn)
http://192.168.106.100:9100/metrics

說(shuō)明采集信息成功
修改101服務(wù)上的配置文件/tmp/prometheus.yml

docker restart prometheus
檢測(cè)方法:http://192.168.106.101:9090/classic/targets,up說(shuō)明采集成功

然后配置grafana儀表盤(pán),本次導(dǎo)入9276模板,和剛才導(dǎo)入模板的方式一致。導(dǎo)入完成即可看到如圖所示模板


至此實(shí)戰(zhàn)監(jiān)控Linux部署完成