阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

osprofiler在OpenStack Cinder里的使用

449次阅读
没有评论

共计 6013 个字符,预计需要花费 16 分钟才能阅读完成。

最近在做 OpenStack Cinder driver 的性能调试, 之前一直是通过在 driver 里面加入 decorator,完成 driver 各个接口的执行时间的统计。

其实在 openstack,已经在孵化一个叫 osprofiler 的 project,然后这个可以通过与 OpenStack Ceilometer 的集成,可以轻松完成性能数据的统计,大幅的节省性能调优的时间.

  • osprofiler 原理:

通过在 OpenStack 不同 Component 之间使用 osprofiler 的 trace,记录所有的 wsgi,rpc,driver 各个接口的开始和结束时间,然后通过 rpc message 把记录到的数据发送到 Ceilometer 数据库进行存储。

这样用户可以在执行完 OpenStack 的操作后,通过 osprofiler 的 CLI 接口,以 html 或者 JSON 的格式可视化的显示出各个接口的执行顺序和时间,从而发现一个 call stack 的瓶颈。

更多关于 osprofier 可以参见 https://github.com/stackforge/osprofiler

[NOTE]: 有网友反映和本人自己的实验,在最新的 master branch 上,不能正确产生正确的 osprofiler 数据,error 如下:

[待增加]

解决方案是使用 kilo 版本:

cd ~/devstack
# 保存当前的 change
git stash 
git checkout stable/kilo
# 重新应用 change
git stash pop
# 其他配置保持不变
# 让后在./stack.sh

./stack.sh

# 升级 Python-cinderclient, 安装 python-ceilometerclient
sudo pip install python-cinderclient --upgrade
sudo pip install python-ceilometerclient
 
  •  基本的使用:
from osprofiler import profiler
# 使用前,一定要 init,否则不会用任何的数据记录
profiler.init("SECRET_HMAC_KEY", base_id='sadfsdafasdfasdfas', parent_id='dsafafasdfsadf')
def some_func():
    profiler.start("point_name", {"any_key": "with_any_value"})
    # your code
    print "I am between some_func"
    profiler.stop({"any_info_about_point": "in_this_dict"})


@profiler.trace("point_name",
                info={"any_info_about_point": "in_this_dict"},
                hide_args=False)
def some_func2(*args, **kwargs):
    # If you need to hide args in profile info, put hide_args=True
    print "Hello, osprofiler"
    pass

def some_func3():
    with profiler.Trace("point_name",
                        info={"any_key": "with_any_value"}):
        # some code here
        pass


@profiler.trace_cls("point_name", info={}, hide_args=False,
                    trace_private=False)
class TracedClass(object):

    def traced_method(self):
        print "Trace me"
        pass

    def _traced_only_if_trace_private_true(self):
         pass
# 把所有的记录写入到 json 文件里面
def send_info_to_file_collector(info, context=None):
    with open("traces", "a") as f:
        f.write(json.dumps(info))

notifier.set(send_info_to_file_collector)
# 下面的函数调用都会被一一记录
some_func()
some_func2(test='asdfasdf', adf=313)


trace = TracedClass()
trace.traced_method()

然后,你在当前目录的 traces 文件问发现很多的 log,有个问题数据的可读性比较差,那么 OpenStack 是怎么解决的呢?

答案是配合使用 Ceilometer. 关于 Ceilometer,参考它的框架,可以帮助理解 http://docs.openstack.org/developer/ceilometer/architecture.html#high-level-architecture

下面以 lvm 的 cinder driver 为例,说明如何配置 Cinder,osprofiler 以及 Ceilometer 的集成,,

  • 首先,要 setup devstack,下面是 devstack 的 local.conf 的配置:(如果你是首次使用 devstack,请移步 http://www.linuxidc.com/Linux/2016-01/127509.htm)

 (注意,我 enable 了 Ceilometer 和 Neutron 的所有组件,在使用这个文件时,要把 HOST_IP, SERVICE_HOST 改为本机的 IP

[[local|localrc]]
HOST_IP=192.168.14.128
SERVICE_HOST=192.168.14.128
ADMIN_PASSWORD=welcome
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=$ADMIN_PASSWORD
DEST=/opt/stack
LOGFILE=$DEST/logs/stack.sh.log
SCREEN_LOGDIR=$DEST/logs/screen
OFFLINE=False
RECLONE=False
LOG_COLOR=False
disable_service horizon
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service neutron
# Enable the ceilometer metering services
enable_service ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector

# Enable the ceilometer alarming services
enable_service ceilometer-alarm-evaluator,ceilometer-alarm-notifier

# Enable the ceilometer api services
enable_service ceilometer-api
# 这个 profiler 一定要加,是 cinder 的性能信息记录到 Ceilometer 的关键 CEILOMETER_NOTIFICATION_TOPICS
=notifications,profiler disable_service n-net disable_service tempest disable_service h-eng,h-api,h-api-cfn,h-api-cw PHYSICAL_NETWORK=physnet1 FIXED_RANGE=192.168.106.0/24 FIXED_NETWORK_SIZE=32 NETWORK_GATEWAY=192.168.106.1 [[post-config|$CINDER_CONF]] [profiler] profiler_enabled = True trace_sqlalchemy = False [[post-config|/$Q_PLUGIN_CONF_FILE]] [ml2] tenant_network_types = vlan [ml2_type_vlan] network_vlan_ranges = physnet1:100:110 [ovs] bridge_mappings = physnet1:br-eth1 enable_tunneling = False

 然后就是执行 ./stack.sh

  • 产生与收集 Cinder 操作的性能数据:
peter@Ubuntu:~/devstack$ cinder --profile SECRET_KEY create --name peter 1
+---------------------------------------+--------------------------------------+
|                Property               |                Value                 |
+---------------------------------------+--------------------------------------+
|              attachments              |                  []                  |
|           availability_zone           |                 nova                 |
|                bootable               |                false                 |
|          consistencygroup_id          |                 None                 |
|               created_at              |      2015-04-04T14:58:51.000000      |
|              description              |                 None                 |
|               encrypted               |                False                 |
|                   id                  | 28857983-3240-445d-a60b-3b91295c31e8 |
|                metadata               |                  {}                  |
|              multiattach              |                False                 |
|                  name                 |                peter                 |
|         os-vol-host-attr:host         |                 None                 |
|     os-vol-mig-status-attr:migstat    |                 None                 |
|     os-vol-mig-status-attr:name_id    |                 None                 |
|      os-vol-tenant-attr:tenant_id     |   ade7584debc54964b4fef737e56e062d   |
|   os-volume-replication:driver_data   |                 None                 |
| os-volume-replication:extended_status |                 None                 |
|           replication_status          |               disabled               |
|                  size                 |                  1                   |
|              snapshot_id              |                 None                 |
|              source_volid             |                 None                 |
|                 status                |               creating               |
|                user_id                |   56aac792735046dea02e12e85e0d1a03   |
|              volume_type              |             lvmdriver-1              |
+---------------------------------------+--------------------------------------+
Trace ID: aa4903cc-fd0c-42ef-96f1-bd1c5a1740f1
To display trace use next command:
osprofiler trace show --html aa4903cc-fd0c-42ef-96f1-bd1c5a1740f1
  •  导出性能测试的数据为 HTML 格式
osprofiler trace show --html aa4903cc-fd0c-42ef-96f1-bd1c5a1740f1 --out test.html

html 内容如下(需要 FQ,这个页面需要访问 google.com ^_^)

  •  查看各个接口的执行时间,下图给出了每个被统计的接口在不同的 service 之间的执行时间

osprofiler 在 OpenStack Cinder 里的使用

  • 查看接口的参数,可以点击函数,查看具体的参数

osprofiler 在 OpenStack Cinder 里的使用

上面的 view 可以很轻松的实现对 openstack 各个接口调用执行时间的统计,可视化的显示了特定操作的性能瓶颈在哪里。

  • Cinder driver 的各个接口的性能统计:

上面的工作,还有一个问题没有解决,如果你的 driver 其实有多个层级的 class(如 driver.create_volume->AnotherClass.def1->AnotherClass.def2->AnotherClass.defn),那么我只知道入口函数 driver.create_volume 的执行时间,并不知道在 AnotherClass 内部各个接口的执行时间(def1 多少时间,def2 多少时间。这个就要稍微改下 lvm driver 的代码了,可以为 lvm driver 的所有 class 加上如下的 decorator:

@profiler.trace_cls("AnotherClass", info={}, hide_args=False,
                    trace_private=True)
class AnotherClass(object):
    def def1:
        pass

    def def2:
        pass
这样更改代码后,然后再重启 cinder service,你会得到更详细的数据 

 参考文章及深入阅读:

  • osprofiler README
  • Integrate OSprofiler and Cinder
  • osprofiler specs
  • OpenStack Ceilometer
  • Integrate OSprofiler and Nova

下面是小编为你精选的 Openstack 相关知识,看看是否有你喜欢的

在 Ubuntu 12.10 上安装部署 Openstack http://www.linuxidc.com/Linux/2013-08/88184.htm

Ubuntu 12.04 OpenStack Swift 单节点部署手册 http://www.linuxidc.com/Linux/2013-08/88182.htm

OpenStack 云计算快速入门教程 http://www.linuxidc.com/Linux/2013-08/88186.htm

企业部署 OpenStack:该做与不该做的事 http://www.linuxidc.com/Linux/2013-09/90428.htm

CentOS 6.5 x64bit 快速安装 OpenStack http://www.linuxidc.com/Linux/2014-06/103775.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-01/127508.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6013字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7997255
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...