CEPH监控软件
概述
目前主流的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