Prometheus簡介是一套開源的系統(tǒng)監(jiān)控報警框架。Prometheus作為新一代的云原生監(jiān)控系統(tǒng),相比傳統(tǒng)監(jiān)控監(jiān)控系統(tǒng)(Nagios或者Zabbix)擁有如下優(yōu)點(diǎn)
易管理性:Prometheus核心部分只有一個單獨(dú)的二進(jìn)制文件,可直接在本地工作,不依賴于分布式存儲
高效性:單一Prometheus可以處理數(shù)以百萬的監(jiān)控指標(biāo);每秒處理數(shù)十萬的數(shù)據(jù)點(diǎn)
易于伸縮性:通過使用功能分區(qū)(sharing)+聯(lián)邦集群(federation)可以對Prometheus進(jìn)行擴(kuò)展,形成一個邏輯集群
豐富的看板:多種可視化圖表及儀表盤支持
針對容器監(jiān)控:對docker,k8S監(jiān)控有成熟解決方案
Prometheus Server: 收集指標(biāo)和存儲時間序列數(shù)據(jù),并提供查詢接口
ClientLibrary:客戶端庫
Push Gateway: 短期存儲指標(biāo)數(shù)據(jù)。主要用于臨時性的任務(wù)
Exporters:采集已有的第三方服務(wù)監(jiān)控指標(biāo)并暴露metrics
Alertmanager:告警
Web UI :簡單的web控制臺
官方安裝說明
https://prometheus.io/docs/prometheus/latest/installation/
準(zhǔn)備兩臺服務(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)的一個周期
evaluation_interval: 15s # 告警評估的一個周期
# 告警的配置文件
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
開啟內(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
docker run -d --name=prometheus -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
http://192.168.106.101:9090/ #訪問該地址,出現(xiàn)一個簡單ui界面,說明部署成功
`docker stats --no-stream lnmp_nginx `
cAdvisor (Container Advisor) 用于收集正在允許的容器資源使用和性能信息。相當(dāng)于zabbix-agent一樣提供一個數(shù)據(jù)采集的接口
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
http://192.168.106.100:8080/containers/
http://192.168.106.100:8080/metrics #該地址的數(shù)據(jù)為prometheus識別的數(shù)據(jù)的接口
去101上修改prometheus的配置文件,復(fù)制一個job文件,job_name 指名稱,targets為cAdvisor服務(wù)器地址ip和端口
vim /tmp/prometheus.yml
docker restart prometheus #重啟服務(wù)
http://192.168.106.101:9090/ 可以看到監(jiān)控指標(biāo)說明獲取數(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)控容器完成!
編寫了一個采集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)行這個腳本就能監(jiān)控Linux主機(jī)
測試 訪問
http://192.168.106.100:9100/metrics
說明采集信息成功
修改101服務(wù)上的配置文件/tmp/prometheus.yml
docker restart prometheus
檢測方法:http://192.168.106.101:9090/classic/targets,up說明采集成功
然后配置grafana儀表盤,本次導(dǎo)入9276模板,和剛才導(dǎo)入模板的方式一致。導(dǎo)入完成即可看到如圖所示模板
至此實(shí)戰(zhàn)監(jiān)控Linux部署完成
容器技術(shù)是繼虛擬化技術(shù)之后,逐漸成為對云計算領(lǐng)域具有深遠(yuǎn)影響的變革技術(shù)。容器技術(shù)的發(fā)展和應(yīng)用,為各行業(yè)應(yīng)用云計算提供了新思路,也對云計算的交付方式、效率、PaaS 平臺的構(gòu)建等方面產(chǎn)生深遠(yuǎn)的影響,具體體現(xiàn)在以下幾個方面:簡化部署、快速啟動、服務(wù)組合、易于遷移。虛擬化是云計算的重要基礎(chǔ),容器定義了一套從構(gòu)建到執(zhí)行的標(biāo)準(zhǔn)化體系,改變了傳統(tǒng)的虛擬化技術(shù),深度影響云計算領(lǐng)域,容器是云計算的未來
虛擬化技術(shù)被用于系統(tǒng)資源管理、容錯、軟硬件保護(hù)、增強(qiáng)系統(tǒng)安全、提升性能和節(jié)能等領(lǐng)域;虛擬化技術(shù)廣泛地與其他技術(shù)結(jié)合,并且得到更多硬件支持,其性能損失不斷降低,部分固化到硬件中
虛擬化技術(shù)的含義:將任何一種形式的資源抽象成另一種形式的技術(shù)都是虛擬化。例如虛擬內(nèi)存空間和進(jìn)程,如果把內(nèi)存看作一個設(shè)備,虛擬內(nèi)存就是將物理內(nèi)存虛擬成多個內(nèi)存空間,如果把內(nèi)存看作一個設(shè)備,虛擬內(nèi)存就是將物理內(nèi)存虛擬成多個內(nèi)存空間;進(jìn)程的概念實(shí)際是對于物理硬件執(zhí)行環(huán)境的一個抽象,每一個進(jìn)程都享有一個完整的硬件執(zhí)行環(huán)境,并且與其他進(jìn)程相隔離;相對于進(jìn)程級的虛擬化,虛擬機(jī)是另一個層面的虛擬化,即系統(tǒng)虛擬化。系統(tǒng)級虛擬化所抽象的環(huán)境是整個計算機(jī),其抽象出的環(huán)境成為虛擬機(jī),包括CPU、內(nèi)存和I/O。在每個虛擬機(jī)中都可以運(yùn)行一個操作系統(tǒng),在一臺計算機(jī)上可以虛擬出多個虛擬機(jī)
目前已經(jīng)有網(wǎng)絡(luò)虛擬化、微處理器虛擬化、文件虛擬化和存儲虛擬化等技術(shù)。抽象來說,虛擬化是資源的邏輯表示,它不受物理限制的約束;具體來說,虛擬化技術(shù)的實(shí)現(xiàn)形式是在系統(tǒng)中加入一個虛擬化層,虛擬化層將下層的資源抽象成另一種形式的資源,提供給上層使用。通過空間上的分割、時間上的分時以及模擬,虛擬化可以將一份資源抽象成多份。反過來,虛擬化也可以將多份資源抽象成一份。虛擬化可以將紛繁復(fù)雜的物理世界改造成一個可以實(shí)現(xiàn)定制需求的世界
系統(tǒng)虛擬化是虛擬化技術(shù)中的一種,其抽象的粒度是整個計算機(jī);硬件與操作系統(tǒng)之間的是硬件抽象層,在操作系統(tǒng)與應(yīng)用程序或函數(shù)庫之間的是API抽象層。硬件抽象層(Hardware Abstraction Layer, HAL)是計算機(jī)中軟件所能控制的硬件的抽象接口,通常包括CPU的各種寄存器、內(nèi)存管理模塊、I/O端口和內(nèi)存映射的I/O地址等;API抽象層是一個進(jìn)程所能控制的系統(tǒng)功能的集合,包括創(chuàng)建新進(jìn)程、內(nèi)存申請和歸還、進(jìn)程間同步與共享、文件系統(tǒng)和網(wǎng)絡(luò)操作等;本質(zhì)上,虛擬化就是由位于下層的軟件模塊,通過向上一層軟件模塊提供一個與它原先所期待的運(yùn)行環(huán)境完全一致的接口的方法,抽象出一個虛擬的軟件或硬件接口,使得上層軟件可以直接運(yùn)行在虛擬環(huán)境上。虛擬化可以發(fā)生在現(xiàn)代計算機(jī)系統(tǒng)的各個層次上,不同層次的虛擬化會帶來不同的虛擬化概念
物理資源通常有一個定語成為宿主(Host),而虛擬出來的資源通常有一個定語稱為客戶(Guest)。例如講一個物理計算機(jī)虛擬為一個或多個虛擬計算機(jī),則這個物理計算機(jī)通常也被稱為宿主機(jī)(Host Machine),而其上運(yùn)行的虛擬計算機(jī)被稱為客戶機(jī)(Guest Machine);宿主機(jī)上運(yùn)行的操作系統(tǒng)被稱為宿主機(jī)操作系統(tǒng)(Host OS),而虛擬機(jī)中運(yùn)行的操作系統(tǒng)被稱為客戶機(jī)操作系統(tǒng)(Guest OS)
系統(tǒng)虛擬化 指將一臺物理計算機(jī)系統(tǒng)虛擬化為一臺或多臺虛擬計算機(jī)系統(tǒng),每個虛擬計算機(jī)系統(tǒng)(簡稱為虛擬機(jī))都擁有自己的虛擬硬件(如CPU、內(nèi)存和設(shè)備等),來提供一個獨(dú)立的虛擬機(jī)執(zhí)行環(huán)境。通過虛擬化層的模擬,虛擬機(jī)中的操作系統(tǒng)認(rèn)為自己仍然是獨(dú)占一個系統(tǒng)在運(yùn)行。每個虛擬機(jī)中的操作系統(tǒng)可以完全不同,并且它們的執(zhí)行環(huán)境是完全獨(dú)立的,這個虛擬化層被稱為虛擬機(jī)監(jiān)控器(Virtual Machine Monitor,VMM)。VM和物理機(jī)系統(tǒng)可以是兩個完全不同的ISA系統(tǒng),不同的ISA使得虛擬機(jī)的每一條指令可以在處理器上直接運(yùn)行,只有那些需要虛擬化的指令才會由VMM進(jìn)行處理
虛擬機(jī)可以看作是物理機(jī)的一種高效隔離的復(fù)制,有幾個特點(diǎn)
類虛擬化技術(shù)(Para-Virtualization)主要思想是通過客戶機(jī)操作系統(tǒng)與虛擬化管理層的協(xié)同設(shè)計,由虛擬化管理層軟件提供一個近似于原物理系統(tǒng),但又不完全相同(與原系統(tǒng))的虛擬平臺
系統(tǒng)虛擬化提供了多個隔離的執(zhí)行環(huán)境,具有如下功能功能
云計算的一個核心思想是在服務(wù)器端提供集中的計算資源,同時這些計算資源要獨(dú)立地服務(wù)于不同的用戶,也就是在共享的同時,為每個用戶提供隔離、安全、可信的工作環(huán)境。虛擬化技術(shù)將是云計算的一個基礎(chǔ)架構(gòu),即云計算實(shí)際上是一個虛擬化的計算資源池,用來容納各種不同的工作模式,這些模式可以快速部署到物理設(shè)施上。虛擬化的資源按照來自用戶的需求多少動態(tài)調(diào)動資源,每個用戶都有一個獨(dú)立的計算執(zhí)行環(huán)境,虛擬化為云計算的發(fā)展提供一個自適應(yīng)、自管理的靈活基礎(chǔ)架構(gòu)
VMM分類
VMM直接管理所有的物理資源,包括處理器、內(nèi)存和I/O設(shè)備,因此,設(shè)備驅(qū)動是VMM的一部分;處理器管理代碼、內(nèi)存管理代碼和設(shè)備模型也是VMM的一部分
在Hypervisor模型中,由于VMM同時具備物理資源的管理功能和虛擬化功能,因此,物理資源虛擬化的效率會更高一些;在安全方面,虛擬機(jī)的安全只依賴于VMM的安全
優(yōu)缺點(diǎn)與Hypervisor模型相反;宿主模型最大的優(yōu)點(diǎn)是可以充分利用現(xiàn)有操作系統(tǒng)的設(shè)備驅(qū)動程序,VMM無須為各類I/O設(shè)備重新實(shí)現(xiàn)驅(qū)動程序,可以專注于物理資源的虛擬化;缺點(diǎn)是,由于物理資源由宿主機(jī)操作系統(tǒng)控制,VMM需要調(diào)用宿主機(jī)操作系統(tǒng)的服務(wù)來獲取資源進(jìn)行虛擬化,而那些系統(tǒng)服務(wù)在設(shè)計開發(fā)之初并沒有考慮虛擬化的支持,因此,VMM虛擬化的效率和功能會收到一定影響。VMM在安全性方面依賴于宿主機(jī)操作系統(tǒng)內(nèi)核安全性
混合模型VMM集中上述兩種模式的優(yōu)點(diǎn),可以利用現(xiàn)有操作系統(tǒng)的I/O設(shè)備驅(qū)動程序,不需要另外開發(fā);VMM直接控制處理器、內(nèi)存等物理資源,虛擬化的效率也較高;在安全性方面,如果對特權(quán)操作系統(tǒng)的權(quán)限控制得當(dāng),虛擬機(jī)的安全性只依賴于VMM
典型虛擬化產(chǎn)品 VMware、Microsoft、Xen、KVM
虛擬環(huán)境性能
一般情況下吞吐量越高、延遲越少、資源利用率越低則表示系統(tǒng)的性能越好,反之則越差。通常三項(xiàng)指標(biāo)不會同時都朝性能好的方向發(fā)展,因此,需要統(tǒng)籌分析考慮,綜合評價性能的好壞。為了綜合評價一個虛擬環(huán)境的性能,就要有不同的工具從不同的角度考量它各方面的性能
容器技術(shù)主要涉及兩個方面
資源容器 主要是為了提高應(yīng)用程序?qū)ο到y(tǒng)資源的控制和管理能力,基于資源容器的系統(tǒng)可以把系統(tǒng)中的資源主體從運(yùn)行主體(即進(jìn)程)中剝離出來,從而達(dá)到對系統(tǒng)資源進(jìn)行更精確和高效控制的目的
基于容器的虛擬化技術(shù)通過借鑒容器的核心思想,將系統(tǒng)中的資源主體從運(yùn)行主體(虛擬機(jī))中剝離出來,從而達(dá)到在虛擬化技術(shù)上對系統(tǒng)資源進(jìn)行精確和高效控制的目的。虛擬機(jī)監(jiān)控器負(fù)責(zé)對系統(tǒng)中所有的資源容器進(jìn)行管理和控制,根據(jù)用戶配置以及系統(tǒng)資源使用的實(shí)際情況進(jìn)行合理分配和回收,實(shí)現(xiàn)跨虛擬機(jī)的進(jìn)程間資源共享,但這樣的資源控制機(jī)制仍然存在安全隱患。克服資源共享帶來的安全隱患的有效方法,是采用一套可靠的訪問控制機(jī)制來防止非法的資源共享。強(qiáng)制訪問控制通過在所有的系統(tǒng)對象上添加有管理員制定的安全策略來限制正在執(zhí)行的程序的訪問權(quán)限,從而阻止惡意程序破壞的傳播。該方法存在許多限制,無法針對單個程序提出不同的安全策略,其次它對數(shù)據(jù)和程序的完整性,以及程序的職能范圍無法進(jìn)行有效的控制;在次基礎(chǔ)上,研究者提出名為Flask的MAC架構(gòu),實(shí)現(xiàn)將安全策略邏輯與安全機(jī)制的分離,從而能夠提供更加便捷的安全策略設(shè)置和調(diào)整,以滿足不同程序?qū)Π踩呗缘囊蟆ELinux是MAC機(jī)制在Linux操作系統(tǒng)上的實(shí)現(xiàn),它涵蓋了對進(jìn)程、文件和套接字在內(nèi)的多種系統(tǒng)資源的訪問控制。通過引入域、角色和類型等概念實(shí)現(xiàn)對安全策略的細(xì)化和精確定制。虛擬化技術(shù)因其卓越的進(jìn)程和系統(tǒng)資源隔離能力在發(fā)展的初期就被用來實(shí)現(xiàn)對應(yīng)用程序的訪問控制;將應(yīng)用程序置于相對獨(dú)立的運(yùn)行環(huán)境中,由虛擬機(jī)監(jiān)控器依照管理員制定的策略實(shí)現(xiàn)程序間的訪問控制
安全容器 核心思想在于將訪問控制機(jī)制從操作系統(tǒng)中剝離出來獨(dú)立于運(yùn)行環(huán)境,依據(jù)不同的安全策略形成虛擬的安全容器。在資源容器的基礎(chǔ)上,對包括姿態(tài)進(jìn)程、文件系統(tǒng)、網(wǎng)絡(luò)和進(jìn)程間通信等在內(nèi)的系統(tǒng)資源進(jìn)行訪問控制
基于容器的虛擬化技術(shù)借鑒了安全容器的思想,在使用資源容器實(shí)現(xiàn)資源共享的基礎(chǔ)上通過安全容器技術(shù)實(shí)現(xiàn)對共享資源的有效訪問控制。按照不同的安全對象,諸如域、應(yīng)用程序和虛擬機(jī)風(fēng)分配不同的可訪問資源形成虛擬的安全容器,防止其他對象對其資源進(jìn)行惡意的、未授權(quán)的訪問
容器發(fā)展歷程
通過研究、梳理和分析現(xiàn)有的容器技術(shù),形成容器相關(guān)的技術(shù)架構(gòu)
集群管理層涉及到的相關(guān)開源項(xiàng)目包括
云計算架構(gòu)圖
容器技術(shù)的關(guān)鍵技術(shù)內(nèi)容
文章對虛擬化技術(shù)及容器技術(shù)的發(fā)展演進(jìn)做了簡單介紹,作為本系列課程的序。后期更多精彩內(nèi)容分享,歡迎持續(xù)關(guān)注
[1] 《系統(tǒng)虛擬化 原理與實(shí)現(xiàn)》
[2] 《容器技術(shù)及其應(yīng)用白皮書 V1.0》
1.OCI容器技術(shù)規(guī)范
2.容器鏡像規(guī)范
3.容器運(yùn)行時規(guī)范
4.鏡像倉庫規(guī)范
5.Docker
更多精彩內(nèi)容,歡迎關(guān)注微信公眾號`云時代的運(yùn)維開發(fā)`