使用开源管理控制台监控Ceph Ceph存储管理员通常通过Ceph接口提供的CLI命令执行大部分的集群监控工作。Ceph还为管理API提供了丰富的接口,可以使用这些接口方便的监控整个Ceph集群。有一些开源项目,它们利用Ceph的REST管理API并且在一个GUI管理控制台上展示监控结果,这样我们就可以快速浏览整个集群的状态。
本章我们就了解一些这些开源项目,并选择其中一个进行安装。
Kraken简介
Kraken是一个使用python编写开源Ceph管理控制台,用来统计信息和监控一个Ceph集群。
包含下列特性:
集群数据用量
MON状态
OSD状态
PG状态
更好的用户界面
支持多个MON
Kraken完全开源并且遵循BSD许可证。
Kraken构建在以下几个开源项目基础之上:
Python 2.7 或者更新版本
ceph-rest-api:包含在Ceph二进制文件中
Django 1.6.2或者更新版本:这是Kraken的核心框架
humanize 0.5 或者更新版本:进行数据显示转换需要
python-cephclient 0.1.1.4或者更新版本:客户端包装器
djangorestframework 2.3.12 或者更新版本:用于添加额外的自定义API
django-filter0.7或者更多版本:Django需要
相关链接 Kraken :: The First Free Ceph Dashboard in Town https://ceph.com/geen-categorie/kraken-the-first-free-ceph-dashboard-in-town/ krakendash github https://github.com/krakendash/krakendash
部署Kraken 注意 kraken需要在ceph的某个节点上安装。 安装依赖
sudo yum install gcc python-devel libxml12-devel.x86_64 libxslt-devel.x86_64
sudo yum install git
sudo yum install python-pip
sudo yum install requests
如果报错No package requests available 则使用命令
sudo pip install requests==2.5.3
sudo yum install screen
安装 Python 2.7
sudo mkdir /python2.7
cd /python2.7
#如果报错-bash: wget: command not found则使用命令安装wget。
sudo yum -y install wget
sudo wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
sudo tar xf Python-2.7.8.tgz
cd Python-2.7.8
yum install openssl -y
yum install openssl-devel -y
sudo ./configure --prefix=/usr/local
sudo make && sudo make install
安装成功之后,你可以在 /usr/local/bin/python2.7 找到 Python 2.7。 安装 setuptools + pip 这里需要注意,一定要使用 python2.7 来执行相关命令。
# First get the setup script for Setuptools:
sudo wget https://bootstrap.pypa.io/ez_setup.py
# Then install it for Python 2.7 :
python2.7 ez_setup.py
# Now install pip using the newly installed setuptools:
sudo wget https://pypi.python.org/packages/source/p/pip/pip-8.1.2.tar.gz --no-check-certificate
tar zxvf pip-8.1.2.tar.gz
cd pip-8.1.2
python setup.py install
sudo rm /usr/bin/pip
sudo ln -s /usr/local/python2.7/bin/pip /usr/bin/pip
# With pip installed you can now do things like this:
pip install [packagename]
pip install --upgrade [packagename]
pip uninstall [packagename]
pip安装可参考 https://pip.pypa.io/en/stable/installing/
可能会遇到的问题
here was a problem importing one of the Python modules
required to run yum
yum基于python写的,修改默认python版本后yum可能无法使用 解决方法 查找yum和 yum-updatest文件,并编辑此py文件
sudo which yum
sudo vi /usr/bin/yum
将
#!/usr/bin/python
改为:
#!/usr/bin/python2.6
设置默认的python版本为2.7
sudo rm /usr/local/bin/python
sudo rm /usr/bin/python
sudo ln -s /usr/local/bin/python2.7 /usr/local/bin/python
sudo ln -s /usr/local/bin/python2.7 /usr/bin/python
创建目录下载kraken
s```udo mkdir /kraken cd /kraken sudo git clone https://github.com/krakendash/krakendash
下载依赖
cd /kraken/krakendash sudo pip install -r requirements.txt
可能遇到报错如下
Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-jtJzTo/Django
这个注意是版本问题导致的,我们发现根据requirements.txt里的要求和我们所设置的源会下载安装Djiang2.0.6版本的。但是Djiang2.0.6版本需要python3.5才能安装。这里有两种解决思路,一种是安装python3.5,但是这种方式需要修改的东西比较多,后续有些脚本的语法也需要修改,所以我们不是很推荐这种思路。只作为参考,给出操作语句。
另一种方法是修改requirements.txt文件,强制使用Djiang1.8版本。
修改requirements.txt文件
使用命令:
sudo vi requirements.txt #将Djiang>=1.6.2修为为Djiang==1.8 sudo pip install -r requirements.txt
python3版本安装
有些新版本需要安装python3和使用pip3才可以下载完整的依赖,则参考文章安装:
centos6安装python3.5、pip3.5、easy_install-3.5
使用命令如下:
sudo mkdir /python3 cd /python3
安装依赖
sudo yum groupinstall -y Development tools sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
安装Python3.5
sudo wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz sudo xz -d Python-3.5.2.tar.xz sudo tar xvf Python-3.5.2.tar
cd Python-3.5.2 sudo ./configure –prefix=/usr/local sudo make && sudo make install && echo OK
安装完后的python的可执行文件目录是 /usr/local/bin
安装完后的python安装目录路径是 /usr/local/lib/python3.5
此时可通过python3.5命令验证安装
python3.5 Python 3.5.2 (default, Jul 11 2016, 09:15:05) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux Type “help”, “copyright”, “credits” or “license” for more information. [root@localhost ~]# python3.5 -V Python 3.5.2
安装 setuptools(easy_install-3.5) + pip3.5
注意:一定要使用 python3.5 来执行相关命令
下载setuptools,easy_install 的安装包
sudo wget https://bootstrap.pypa.io/ez_setup.py
安装easy_install-3.5
su root python3.5 ez_setup.py
安装完成后/usr/local/bin/目录下出现easy_install-3.5
安装pip3.5
easy_install-3.5 pip
#安装完成后/usr/local/bin/目录下出现pip3.5
#升级pip3.5版本 pip3.5 install –upgrade pip
至此easy_install-3.5、pip3.5安装完成
pip3.5 install [packagename] pip3.5 install –upgrade [packagename] pip3.5 uninstall [packagename]
使用pip3.5 安装依赖的软件,使用命令如下:
cd /kraken/krakendash su root pip3.5 install -r requirements.txt
启动kraken
需要把命令复制到与krakendash目录并列的目录中,否则会报错
python: can’t open file ‘krakendash/manage.py’: [Errno 2] No such file or directory
使用命令如下:
cd /kraken sudo cp ./krakendash/contrib/*.sh . sudo ./api.sh sudo ./django.sh
可以查看当前目录中的kraken.log是否有异常输出。
可能遇到的问题
检查requirements.txt中的依赖是否下载安装完毕。
如果上面使用安装了python3.5,则需要先把默认的python程序修改成3.5版本才能引用到安装的依赖库。
否则会报错
ImportError: No module named mathfilters
解决方法使用以下命令:
完成设置默认python版本需要两步:
分别更改/usr/local/bin/python和/usr/bin/python的指向
sudo rm /usr/local/bin/python
sudo rm /usr/bin/python
sudo ln -s /usr/local/bin/python3.5 /usr/local/bin/python
sudo ln -s /usr/local/bin/python3.5 /usr/bin/python
可能遇到错误
File “/kraken/krakendash/kraken/urls.py”, line 1, in
原因是patterns()从Django1.8开始就已经被废弃,Django1.10把它移除,所以报导入patterns错误。我们注意到上面自动安装的依赖Django是2.6
解决方法:
Django版本降低到1.8
pip install Django==1.8
查看屏幕是否启动
ps -ef | grep -i screen [zzq@k8s kraken]$ ps -ef | grep -i screen root 3576 1 0 14:52 ? 00:00:00 SCREEN -dmS api ceph-rest-api -c /etc/ceph/ceph.conf –cluster ceph -i admin zzq 18316 18199 0 21:54 pts/0 00:00:00 grep -i screen
ps -ef | grep -i 8000 [zzq@k8s kraken]$ ps -ef | grep -i 8000 root 18301 1 0 21:53 pts/0 00:00:00 python krakendash/manage.py runserver 0.0.0.0:8000 root 18303 18301 0 21:53 pts/0 00:00:01 /usr/bin/python krakendash/manage.py runserver 0.0.0.0:8000 zzq 18328 18199 0 21:56 pts/0 00:00:00 grep -i 8000
则可以在安装服务的本机浏览器中链接访问如下:
http://localhost:8000
设置django非本机可访问
如果想要在其他内网机子上访问则需要重新设置django的配置。
关闭防火墙
service iptables stop
开启django时,使用0.0.0.0:xxxx,作为ip和端口例如:
python manage.py runserver 0.0.0.0:8000
创建settings文件
cat krakendash/manage.py
可以看到传入的配置文件名
cd krakendash/ vi kraken.settings #输入内容 ALLOWED_HOSTS = [‘*’,] #注意不要漏掉逗号
查出服务pid
[root@k8s krakendash]# ps -ef|grep 8000 root 18301 1 0 21:53 pts/0 00:00:00 python krakendash/manage.py runserver 0.0.0.0:8000 root 18303 18301 0 21:53 pts/0 00:00:12 /usr/bin/python krakendash/manage.py runserver 0.0.0.0:8000 root 18562 18537 0 22:32 pts/0 00:00:00 grep 8000
杀掉进程重新启动
sudo kill 18301 sudo kill 18303 cd /kraken sudo ./django.sh
其他机器就可以通过这台机器的ip和端口号访问django了。
比如安装此服务的服务器是192.168.30.80,访问地址如下:
http://192.168.30.80:8000
如果报错404可以尝试加上项目名
http://192.168.199.80:8000/krakendash
成功运行画面如下:
可能遇到的报错
/kraken/krakendash/src/rgwadmin/rgwadmin/rgw.py in <module>, line 3
/usr/local/bin/python ``` 原因是python3和python2的差异 解决方法: ``` sudo vi /kraken/krakendash/src/rgwadmin/rgwadmin/rgw.py from StringIO import StringIO 修改成 from io import StringIO ``` 可能遇到问题 ``` AttributeError: module 'string' has no attribute 'letters' ``` 原因是python3和python2的差异 解决方法 ``` field = string.letters + string.digits 修改为 field = string.ascii_letters + string.digits ``` ceph-dash工具
ceph-dash是另一个ceph集群的免费开源仪表板/监控API,设计目标是以一个尽可能简单的方法通过RESTful JSON API以及Web GUI来提供一个Ceph集群整体健康状况的监控。这是一个轻量级的应用程序,它没有任何对ceph-rest-api的依赖。它是一个纯Python wsgi应用程序,它通过librados直接和集群通信。目前,ceph-dash提供一个干净且简单的Web GUI,它能够显示ceph集群的以下信息。
整体集群的状态和详细的问题描述。
支持多个Mon,支持每个MON的状态。
OSD状态包含处于in、out和不健康状态的OSD数。
可视化的存储容量图。
实时吞吐量,包括写速度、读数度和每秒操作数。
可视化的PG状态图
集群恢复状态
除此之外,ceph-dash还提供了REST端点来生成包含集群所有信息的JSON格式的数据,这可进一步用于其他创造性的方式。
github地址 https://github.com/Crapworks/ceph-dash
部署ceph-dash
ceph-dash工具必须安装在有权限访问Ceph集群的节点上。因为它并不需要多少资源,所以可以制定任意一个MON节点来安装它。
为ceph-dash新建一个目录,并获取代码。
mkdir /ceph-dash
cd /ceph-dash
git clone https://github.com/Crapworks/ceph-dash.git
安装python-pip
yum install python-pip
安装Jinja2
easy_install Jinja2
启动
cd /ceph-dash/ceph-dash
./ceph-dash.py
可能遇到的问题
File "/ceph-dash/ceph-dash/app/__init__.py", line 9, in <module>
from flask import Flask
ImportError: No module named flask
解决方式:
pip list
#如果列表没有flask
pip install flask
可能遇到的问题
Traceback (most recent call last):
File "/usr/bin/ceph", line 67, in <module>
import rados
ImportError: No module named rados
这是因为ceph是在老版本的python安装的,切换默认的python版本后,新版本中没有相关的库。 解决方式 查找rados组件在哪
[root@ceph1 ceph-dash]# find /* -name 'rados*'
/etc/bash_completion.d/rados
/usr/lib64/rados-classes
/usr/share/man/man8/rados.8.gz
/usr/bin/rados
/usr/lib/python2.6/site-packages/rados.pyc
/usr/lib/python2.6/site-packages/rados.pyo
/usr/lib/python2.6/site-packages/rados.py
/var/log/radosgw
[root@ceph1 ceph-dash]#
把相关的文件复制到现用的python2.7的site-packages下
cp /usr/lib/python2.6/site-packages/rados* /usr/local/lib/python2.7/site-packages/
可能遇到的问题
Traceback (most recent call last):
File "/usr/bin/ceph", line 75, in <module>
from ceph_argparse import \
ImportError: No module named ceph_argparse
解决方式 查找rados组件在哪
[root@ceph1 ceph-dash]# find /* -name 'ceph_argparse*'
/usr/lib/python2.6/site-packages/ceph_argparse.py
/usr/lib/python2.6/site-packages/ceph_argparse.pyc
/usr/lib/python2.6/site-packages/ceph_argparse.pyo
[root@ceph1 ceph-dash]#
把相关的文件复制到现用的python2.7的site-packages下
cp /usr/lib/python2.6/site-packages/ceph_argparse* /usr/local/lib/python2.7/site-packages/
浏览器打开: http://192.168.199.81:5000
访问成功如图:
修改端口
vi ./ceph-dash.py
app.run(host='0.0.0.0', port=8000, debug=True)
calamari
calamari是一个Ceph的管理平台。
github地址 https://github.com/ceph/calamari https://github.com/ceph/calamari-clients 相关文档 http://calamari.readthedocs.org