sina kanyun 应用api-client使用问题 修改

来源:互联网 发布:淘宝高中教学视频 编辑:程序博客网 时间:2024/06/14 19:17

最近在玩openstack虚拟机性能监控,在网上看见sina有个项目kanyun,就拿来看看。

说实在的,kanyun在网上的各方面资料太少了,除了源码目录下的README.rst文件可供参考,还没别的资料。

(kanyun安装配置后续)

编译成功后,在当前目录bin下运行kanyun-worker、kanyun-server、kanyun-api正常运行后,执行api-client(使用方法看帮助 --help)

当发现 api_client -l <metric>这类型命令不能正常执行,于是看api-client文件是如何写的(python语言),发现这是去调用方法show_result()

通过打印出来数据可以分析出show_result()方法根本无法解析。看了worker采集数据格式

   [('cpu', 'total', (utc_time, cpu_usage)),    ('mem', 'total', (utc_time, max, free)),    ('nic', 'vnet8', (utc_time, incoming, outgoing(内网))),    ('blk', 'vda', (utc_time, read, write)),    ('blk', 'vdb', (utc_time, read, write))],

于是把show_result 重新写成了两个方法

#show cpu or mem data<<added by yfwang 2012/11/14def show_result_cpu_or_mem(rs):        if rs is None:                return#       print rs        if rs.has_key("data"):                rs = rs['data']#       print rs        if rs:                for i in rs:                        #show vm_instance_id                        print i[0]                        rrs = i[1]                        if rrs is None:                                continue                        rrrs = rrs['total']                        if rrrs is None:                                continue                        for k, j in rrrs.items():                                print "{%s:%s}" % (k,j)                print "%d results" % (len(rrrs))                print "spend", time.clock(), "seconds"#show zhe blk write or read data>>added by yfwang 2012/11/14def show_result_blk(rs):        if rs is None:                return        if rs.has_key("data"):                rs = rs['data']        if rs:                for i in rs:                        #print zhe vm_instance_id                        print i[0]                        rrs = i[1]                        if rrs is None:                                continue                        rrrs = rrs['vda']                        if rrrs is None:                                continue                        for k, j in rrrs.iteritems():                                print "{%s:%s}" % (k,j)                print "%d results" % (len(rrrs))                print "spend", time.clock(), "seconds"#>>added endle

分别获取cpu、内存、磁盘读写(--help帮助里面没有blk_write 参数,测试过后也能正常使用)

再main()中修改下下面调用方法

92             show_result(rs)
丢改为

fixed zhe get cpu_mem_blk data error<<added by yfwang 2012/11/14            if (metric == 'cpu') or (metric == 'mem_max') or (metric == 'mem_free'):                show_result_cpu_or_mem(rs)            elif(metric =='blk_read') or (metric == 'blk_write'):                show_result_blk(rs)#>>added endle

再次运行

root@PS-13:~/zyluo-kanyun-62502d2/bin# ./api-client -l cpu |more36af2970-a74d-411d-8ade-7c51d67d669c{1352855763:6.69233091701}{1352878022:6.59855863378}{1352856723:6.56101017833}{1352883785:6.4759607841}{1352862664:6.77603634792}{1352857921:6.57525540079}{1352799304:6.49893367316}{1352798342:6.6578822537}{1352866024:6.59187200205}{1352797928:6.64892713501}{1352876161:6.65871108381}{1352877484:6.67192524452}{1352879942:6.63418791946}{1352800564:6.44165796132}


root@PS-13:~/zyluo-kanyun-62502d2/bin# ./api-client -l blk_read |more36af2970-a74d-411d-8ade-7c51d67d669c{1352855763:0}{1352878023:0}{1352883785:0}{1352862664:0}{1352857921:0}{1352799304:0}{1352798342:0}{1352866024:0}{1352797928:0}{1352876161:0}{1352877486:0}{1352879943:0}{1352873284:0}{1352800564:0}{1352877840:0}


得到数据正确结果


在上面没用测试网络,openstack网络还未配置完成,网络可仿上面添加即可。







原创粉丝点击