概述
目前主流的Ceph開源監控軟件有:Calamari、VSM、Inkscope、Ceph-Dash、Zabbix等,下面簡單介紹下各個開源組件。
Calamari
概述
Calamari對外提供了十分漂亮的Web管理和監控界面,以及一套改進的REST API接口(不同於Ceph自身的REST API),在一定程度上簡化了Ceph的管理。最初Calamari是作為Inktank公司的Ceph企業級商業產品來銷售,紅帽2015年收購 Inktank后為了更好地推動Ceph的發展,對外宣布Calamari開源,秉承開源開放精神的紅帽着實又做了一件非常有意義的事情。
優點:
-
輕量級
-
官方化
-
界面友好
缺點:
-
不易安裝
-
管理功能滯后
Calamari安裝包括calamari-server、calamari-client和diamond三部分
- calamari-server提供平台管理服務,使用了SaltStack管理客戶端。這個只需要在集群當中的某一台機器上安裝,也可以獨立安裝
- calamari-client(romana)是一個HTTP模塊,為客戶端使用使用Calamari API提供服務。這個也是只需要在集群當中的某一台機器上安裝,也可以獨立安裝,這個需要跟calamari-server安裝在一台機器上
- diamond是一個python進程,用來收集Ceph存儲節點上的集群數據和系統信息並發送給Graphite,每個節點都需要安裝diamond
- salt-master 是一個管理的工具,可以批量的管理其他的機器,可以對安裝了salt-minion的機器進行管理,在集群當中,這個也是跟calamari-server安裝在一起的
- salt-minion 是安裝在集群的所有節點上的,這個是接收salt-master的指令對集群的機器進行操作,並且反饋一些信息到salt-master上
介紹
下面Calamari的架構圖能幫助更好的理解它的組件,其中紅框部分為Calamari代碼實現的部分,非紅框部分為非Calamari實現的開源框架。
calamari-server包含的組件有:Apache、salt-master、Graphite/carbon-cache、cthulhu和supervisord
各個組件的功能如下:
- Apache提供web服務
- calamari服務端裝有salt-master,salt-master是salt的服務管理端,salt-minion是被管理端
- Graphite不僅是一個企業級的監控工具, 還可以實時繪圖。Graphite后端運行一個名為carbon-cache.py的python程序,是高度可擴展的事件驅動的I/O架構的后端進程,負責處理客戶端節點上的業務數據,它可以有效地跟大量的客戶端通信並且以較低的開銷處理大量的業務量。配置文件位於/etc/graphite/carbon.conf
- Calamari 使用了Saltstack讓Calamari Server和Ceph server node通信。Saltstack是一個開源的自動化運維管理工具,與Chef和Puppet功能類似。Salt-master發送指令給指定的Salt-minion來完成對Cpeh Cluster的管理工作;Salt-minion 在Ceph server node安裝后都會從master同步並安裝一個ceph.py文件,里面包含Ceph操作的API,它會調用librados或命令行來最終和Ceph Cluster通信。
- cthulhu可以理解是Calamari Server的Service層,對上為API提供接口,對下調用Salt-master。但是代碼美中不足的是calamari_rest有些功能直接調用了Salt-master而沒有調用cthulhu。calamari_rest提供Calamari REST API,詳細的接口請大家參照官方文檔。Ceph的REST API是一種低層次的接口,其中每個URL直接映射到等效的CEPH CLI;Calamari REST API提供了一個更高層次的接口,API的使用者可以習慣的使用GET/POST/PATCH方法來操作對象,而無需知道底層的Ceph的命令;它們之間的主要區別在於,Ceph的REST API的使用者需要非常了解Ceph本身,而Calamari 的REST API更貼近對Ceph資源的描述,所以更加適合給上層的應用程序調用。
- supervisord是一個允許用戶監控和控制進程數量的系統程序。它可以指定一個服務如何運行。
romana(calamari_clients)是一個提供web UI的模塊,主要為客戶端使用Calamari API提供服務,由salt-minion和diamond組成。
Diamond負責收集監控數據,它支持非常多的數據類型和metrics,通過查看源代碼,它支持90多種類型的數據;每一個類型的數據都是上圖中的一個collector,它除了收集Ceph本身的狀態信息,它還可以收集關鍵的資源使用情況和性能數據,包括CPU,內存,網絡,I / O負載和磁盤指標,而且還能收集很多流行軟件的性能指標,包括 Hadoop, Mongo, Kafka, MySQL, NetApp, RabbitMQ, Redis, and AWS S3等。Collector都是使用本地的命令行來收集數據,然后報告給Graphite。
rimana包括dashboard、login、admin、manage四大模塊,構建rpm軟件包時,這些模塊缺一不可
- dashboard是一個javascript的客戶端,直接與ceph restful api交互來管理ceph。dashboard包含3個邏輯部分,分別為dashboard、workbench、graphs。login模塊用於登錄web界面
- dashboard是一個只讀的視圖,負責展現ceph集群的健康狀態
- workbench是后台OSD和host的虛擬展現,最多限制展現256個OSD
- graphs是有負責展示圖形的graphite和負責在每個節點收集數據的diamond共同展示各種度量數據的視圖
- login模塊用於登錄web界面
- admin模塊用來管理用戶和calamari信息的管理工具
- manage模塊用於管理ceph集群中的各種應用,如OSD管理、pool管理、集群設置和集群日志展現等功能
calamari_clients是一套用戶界面,Calamari Server在安裝的過程中會首先創建opt/calamari/webapp目錄,並且把webapp/calamari下的manager.py(django 配置)文件考進去, calamari_web的所有內容到要放到opt/calamari/webapp下面來提供UI的訪問頁面。
calamari-web包下面的文件提供所有web相關的配置,calamari_rest和calamari_clients都要用到。
安裝
本次安裝環境為Centos7.5,
安裝calamari-server
# 獲取源碼 git clone https://github.com/ceph/calamari.git # 構建rpm安裝包 yum install gcc gcc-c++ postgresql-libs python-virtualenv yum install postgresql-devel httpd checkpolicy yum install selinux-policy-devel selinux-policy-doc selinux-policy-mls redhat-lsb-core # 安裝
cd calamari
./build-rpm.sh
# 構建完成的rpm安裝包位於上一級目錄
cd ../rpmbuild/RPMS/x86_64/
yum install calamari-server-1.5.2-15_g5b8fa14.el7.x86_64.rpm
calamari-server安裝完成
安裝romana
# 獲取源碼 git clone https://github.com/ceph/romana.git
# 安裝依賴包 yum install npm ruby ruby-devel rubygems rpm-build libpng-devel
# npm包沒有的話去https://nodejs.org/en/download/下載安裝,編譯比較耗時 # 更新npm並安裝相關軟件包 npm config set registry https://registry.npm.taobao.org
# 驗證npm源是否修改成功 npm config get registry
npm install -g grunt grunt-cli bower grunt-contrib-compass # 更新gem並安裝compass
gem update --system && gem install compass
# 如果失敗嘗試一下命令
gem sources
gem sources -r https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -u
# 編譯romana
cd romana/
make build-real # 掙扎了許久,這里邁步過去,先放棄吧!!!
make dist
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! gifsicle@0.1.7 postinstall: `node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the gifsicle@0.1.7 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above
# 構建rpm包,安裝
cd ..
tar xvf romana_1.2.2.tar.gz
mkdir -p /opt/calamari/webapp/content
cd romana-1.2.2/
[root@host romana-1.2.2]# for dir in manage admin login dashboard
> do
> mkdir -p /opt/calamari/webapp/content/"$dir"
> cp -pr "$dir"/dist/* /opt/calamari/webapp/content/"$dir"/
> done
make rpm
yum install ...
安裝diamond
# 獲取源碼 git clone https://github.com/ceph/Diamond
# 構建rpm包
cd Diamond/
git checkout origin/calamari
yum install rpm-build -y
make rpm
# 安裝
cd dist/
yum install diamond-3.4.67-0.noarch.rpm
# 修改配置文件,指向graphite server所在的主機
cp /etc/diamond/diamond.conf.example /etc/diamond/diamond.conf
vim /etc/diamond/diamond.conf
將host的值改成calamari-server的主機名
# Graphite server host
host = host
# 重啟diamond服務
/etc/init.d/diamond restart
/etc/init.d/diamond status
安裝salt-minion
# 安裝 yum install salt-minion -y # 創建配置文件
mkdir /etc/salt/minion.d/
vim /etc/salt/minion.d/calamari.conf
master:host
host是saltstack的服務端主機名
# 重啟服務
systemctl restart salt-minion
systemctl status salt-minion
systemctl enable salt-minion
# 在calamari-server上查看客戶端認證請求並認證
salt-key -L
salt-key -A
安裝參考:https://blog.csdn.net/lzw06061139/article/details/51174588
其余
初始化calamari
calamari-ctl initialize
上面會要求輸入登錄web管理平台的賬戶和密碼,也可以修改密碼,如下:
calamari-ctl change_password [--password PASSWORD] username
配置calamari日志權限並重啟相關服務
chmod 777 -R /var/log/calamari/*
systemctl enable supervisord
systemctl restart supervisord
systemctl status supervisord
systemctl enable httpd
systemctl restart httpd
systemctl status httpd
httpd服務啟動后,就可以登錄calamari管理平台了
界面
安裝都不成功有個鬼界面~果然安裝麻煩,好像還挺占空間
總結
Calamari為Ceph的運維和管理提供了一個統一的平台,而且用戶還可以基於這個平台擴展自己的存儲管理產品,但同時也存在着不足和需要改進的地方。
- 首先,Calamari還不能完成Ceph deploy所實現的部署功能,這是它最大一個不足;Fuel可以完成部署功能,並且可以選擇Ceph server的數據盤和日志盤以及定制默認的備份數等,所以Calamari + Fuel可以來實現一個完成的基於Ceph的部署和管理工具。
- 其次,Calamari提供的管理功能太少,用戶無法只使用它來運維一個Ceph環境。
- 最后,用戶可以基於Calamari開發自己的Ceph管理軟件,UI部分可以修改calamari_clients的頁面,也可也單獨實現一套自己的UI基於calamari_rest和Graphite_web,后端的功能的監控部分可以擴展diamond的collector實現,管理Ceph的功能可以擴展rest api,cthulhu,salt等來實現。
VSM
Virtual Storage Manager (VSM)是Intel公司研發並且開源的一款Ceph集群管理和監控軟件,簡化了一些Ceph集群部署的一些步驟,可以簡單的通過WEB頁面來操作。
優點:
-
管理功能好
-
界面友好
-
可以利用它來部署Ceph和監控Ceph
缺點:
-
非官方
-
依賴OpenStack某些包
Inkscope
概述
Inkscope 是一個 Ceph 的管理和監控系統,依賴於 Ceph 提供的 API,使用 MongoDB 來存儲實時的監控數據和歷史信息。
優點:
-
易部署
-
輕量級
-
靈活(可以自定義開發功能)
缺點:
-
監控選項少
-
缺乏Ceph管理功能
介紹
如下是inscope的框架
由架構圖可知,整個集群管理系統Inscope的構成依賴於其核心組件在各個節點的信息通訊,而Inscope的搭建正是要將各個組件(進程)成功地嵌入(運行)在各個功能節點上。Inscope搭建的主要內容有:
- inkscope-common : 包含inkscope的默認配置文件以及其他進程(cephprobe,sysprobe)啟動所需的依賴文件,所有相關節點都需要安裝。
- inkscope-admviz : 包含inkscope的web控制台文件,含接口和界面,僅需要安裝一個,該節點(管理節點)上同時需要按安裝flask和mongodb
- inkscope-cephrestapi: 用於安裝啟動 ceph rest api 的腳本,僅需要安裝在提供api接口的節點上,即mon節點。
- inkscope-cephprobe: 用於安裝啟動 cephprobe 的腳本(整個集群只需一個),安裝在mon節點,腳本主要實現:獲取Ceph集群的一些信息,並使用端口(5000)提供服務,將數據存入mongodb數據庫中。
- inkscope-sysprobe : 安裝用於所有mon和osd的sysprobe 所需要腳本,即所有節點均安裝,實現獲取節點設備資源信息如:CPU、內存、磁盤等等
各個節點需安裝的Inscope組件內容
Node1
Inscope-common / Inscope-sysprobe / Inscope-admViz / Inscope-cephrestapi / Inscope-cephprobe / flask / mongodb
Node2
Inscope-common / Inscope-sysprobe
Node3
Inscope-common / Inscope-sysprobe
安裝
源碼路徑:https://github.com/inkscope/inkscope/tree/master
rpm包:https://github.com/inkscope/inkscope-packaging/tree/V1.4.0-2/RPMS
node1安裝flask
# 安裝virtunlenv pip install virtualenv # 然后配置項目 mkdir myproject cd myproject virtualenv env . env/bin/activate # 安裝flask pip install Flask # 測試 vim helloworld.py from flask import Flask app=Flask(__name__) @app.route('/hello') def hello_world(): return "Hello World" if __name__=='__main__': app.run() 保存后,執行: python helloworld.py 此時不要關閉終端,打開瀏覽器輸入:http://localhost:5000/hello
每個節點安裝:
# 安裝common
rpm -ivh python-bson-2.5.2-2.el7.x86_64.rpm python-pymongo-2.5.2-2.el7.x86_64.rpm inkscope-common-1.4.0-2.centos7.noarch.rpm
# 安裝sysprobe
rpm -ivh inkscope-sysprobe-1.4.0-2.centos7.noarch.rpm
# 安裝依賴包
rpm -ivh python-psutil-2.2.0-1.x86_64.rpm
……
node1安裝:
# 安裝依賴包
yum install python-pip httpd mod_wsgi mongodb python-ceph
# 安裝admviz
rpm -ivh python-simplejson-3.3.3-1.el7.x86_64.rpm
rpm -ivh python-itsdangerous-0.23-2.el7.noarch.rpm
rpm -ivh python-flask-0.10.1-4.el7.noarch.rpm
rpm -ivh python-flask-doc-0.10.1-4.el7.noarch.rpm
rpm -ivh inkscope-admviz-1.4.0-2.centos7.noarch.rpm
# 配置httpd,修改 /etc/httpd/conf/httpd.conf配置文件,增添:
Listen 8080
NameVirtualHost *.8080
# 修改/etc/httpd/conf.d/inkScope.conf
# For a ceph_rest_api in wsgi mode
#ProxyPass /ceph-rest-api/ http://<inkscope_host>:<inkscope_port>/ceph_rest_api/api/v0.1/
ProxyPass /ceph-rest-api/ http://192.168.1.200:5000/api/v0.1/
# 啟動httpd
systemctl restart httpd
systemctl enable httpd
# 安裝cephprobe、cephrestapi
rpm -ivh inkscope-cephprobe-1.4.0-2.centos7.noarch.rpm
rpm -ivh inkscope-cephrestapi-1.4.0-2.centos7.noarch.rpm
# 啟動mongo服務
yum install mongodb-server -y
mongod
systemctl restart mongod
systemctl status mongod
systemctl enable mongo
#修改 /etc/mongodb.conf ,將bind_ip 修改為 0.0.0.0,取消 port = 27017 依據前面的注釋,如下:
bind_ip = 0.0.0.0
port = 27017
# 修改Inscope配置文件並啟動服務 # inkscope的配置文件就一個,位於 /opt/inkscope/etc/inkscope.conf # 這里面需要修改的主要有: # 1. ceph_rest_api:在本例中即為node1的ip; # 2. mongodb_host:即為node1所在節點,管理節點 ; "ceph_rest_api": "192.168.1.210:5000", "mongodb_host" : "192.168.1.210", # 之后,將該文件拷貝至Ceph集群各個節點的 /opt/inscope/etc/目錄中。 最終,啟動各個節點的服務: systemctl enable sysprobe
systemctl restart sysprobe
systemctl status sysprobe
systemctl enable cephprobe
systemctl restart cephprobe
systemctl status cephprobe
systemctl restart ceph-rest-api
systemctl status ceph-rest-api
systemctl enable ceph-rest-api
ceph-rest-api沒有安裝好,后面再弄一下
界面
默認通過8080端口登錄,界面有點丑……
Ceph-Dash
Ceph-Dash 是用 Python 開發的一個Ceph的監控面板,用來監控 Ceph 的運行狀態。同時提供 REST API 來訪問狀態數據。
優點:
-
易部署
-
輕量級
-
靈活(可以自定義開發功能)
安裝
# 獲取 git clone https://github.com/Crapworks/ceph-dash.git # 運行 cd ceph-dash/ python ceph-dash.py >/rbddir/cephdash.log 2>&1 & # 進入界面查看 http://192.168.1.210:5000/
界面
ZABBIX
ZABBIX是一個基於WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案,這里不多介紹了
prometheus + grafana
概述
Prometheus簡介
Prometheus是一個開源的系統監控和報警的工具包,最初由SoundCloud發布。它通過HTTP協議從遠程的機器收集數據並存儲在本地的時序數據庫上。
它提供了一個簡單的網頁界面、一個功能強大的查詢語言以及HTTP接口等等。Prometheus通過安裝在遠程機器上的exporter來收集監控數據。
特點:
- 多維數據模型(有metric名稱和鍵值對確定的時間序列)
- 靈活的查詢語言
- 不依賴分布式存儲
- 通過pull方式采集時間序列,通過http協議傳輸
- 支持通過中介網關的push時間序列的方式
- 監控數據通過服務或者靜態配置來發現
- 支持圖表和dashboard等多種方式
Prometheus Server: Prometheus服務端,由於存儲及收集數據,提供相關api對外查詢用。
Exporter: 類似傳統意義上的被監控端的agent,有區別的是,它不會主動推送監控數據到server端,而是等待server端定時來手機數據,即所謂的主動監控。
Pushagateway: 用於網絡不可直達而居於exporter與server端的中轉站。
Alertmanager: 報警組件,將報警的功能單獨剝離出來放在alertmanager。
Web UI: Prometheus的web接口,可用於簡單可視化,及語句執行或者服務狀態監控。
它大致使用邏輯是這樣:
- Prometheus server 定期從靜態配置的 targets 或者服務發現的 targets 拉取數據。
- 當新拉取的數據大於配置內存緩存區的時候,Prometheus 會將數據持久化到磁盤(如果使用 remote storage 將持久化到雲端)。
- Prometheus 可以配置 rules,然后定時查詢數據,當條件觸發的時候,會將 alert 推送到配置的 Alertmanager。
- Alertmanager 收到警告的時候,可以根據配置,聚合,去重,降噪,最后發送警告。
- 可以使用 API, Prometheus Console 或者 Grafana 查詢和聚合數據。
Grafana簡介
Grafana是一個可視化面板(Dashboard),有着非常漂亮的圖表和布局展示,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作為數據源。
Grafana主要特性:
- 靈活豐富的圖形化選項
- 可以混合多種風格
- 支持白天和夜間模式
- 支持多個數據源
Ceph的監控方案有很多,有專業的Calamari,也有基於Zabbix+Grafana的,也有基於telegraf+influxdb+grafana的。不過不管用什么,我們的目的其實是能夠第一時間直觀的看到Ceph集群的運行狀態。
對於Ceph監控,需求也很簡單:
- Cluster、Mon節點、OSD節點和Pools的狀態檢查
- pg狀態和object數量
- 存儲總容量、使用量、iops和吞吐量
- Ceph存儲網卡流量,CPU內存利用率等
- 查看數據的延遲
- 監控多套Ceph集群
安裝
# 安裝go環境
yum install golang -y
yum install librados2-devel librbd1-devel -y
# 修改環境變量
export GOROOT=/usr/lib/golang
export GOBIN=$GOROOT/bin
export GOPATH=/home/golang
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
# 安裝prometheus
go get github.com/prometheus/prometheus/cmd/...
prometheus --config.file=prometheus.yml
# 也可以克隆倉庫安裝
mkdir -p $GOPATH/src/github.com/prometheus
cd $GOPATH/src/github.com/prometheus
git clone https://github.com/prometheus/prometheus.git
cd prometheus
make build
./prometheus --config.file=prometheus.yml
# 也可以下載tar包安裝,下載地址:https://prometheus.io/download/
tar -zxvf prometheus-2.0.0.linux-amd64.tar.gz
cd prometheus-2.0.0.linux-amd64
# 修改 prometheus.yml 增加 job
- job_name: 'ocata-ceph'
static_configs:
- targets: ['192.168.1.210:9128']
# 啟動 nohup ./prometheus &
# 去9090端口驗證prometheus是否安裝成功
# 安裝ceph_exporter
go get -u github.com/digitalocean/ceph_exporter
cd /usr/lib/golang/bin/
# 啟動,然后去9128端口去驗證是否安裝成功
nohup ./ceph_exporter &
# 開機啟動
echo "/usr/local/golang/bin/ceph_exporter" >> /etc/rc.local
# 在Prometheus界面,選擇 Status->Targets 顯示ceph exporter已經可用
# 安裝配置grafana
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.6.3-1.x86_64.rpm
yum install grafana-4.6.3-1.x86_64.rpm
systemctl start grafana-server
安裝完成后再3000端口打開,默認賬號密碼 admin/admin
界面
在3000端口登錄grafana界面之后,登錄,然后添加prometheus數據源
導入模板
ceph 的 Dashboard 模板可用從這里下載 https://github.com/magine1989/Ceph_Prometheus_Grafana
然后導入,分別導入3個Dashboard
還可以下載node_exporter監控CPU內存等信息,grafana模板可以用這個:https://grafana.com/dashboards/1860