• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > CloudStack VM运行状态的监控-Management,cloudstack系统vm

CloudStack VM运行状态的监控-Management,cloudstack系统vm

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含cloudstack,cloudstack安装,cloudstack中国社区,cloudstack openstack,cloudstack入门指南等服务器相关知识,网友希望可以进行参考

CloudStack VM运行状态的监控-Management,cloudstack系统vm


VM和Host的运行时刻状态,应该是所有虚拟化平台管理员最热切的关注点。

本文章介绍下CloudStack中,对于VM运行状态信息的获取和扩展。

信息获取原理

Management-Server在启动的时候,会初始化1个线程,用于定期获取定期获取运行时数据。

对于3个主流Hyperviser:KVM、XenServer、VMware,分别调用Libvirt API、 XenServer RRD API和 VMware API来获取当前运行时状态。

定期获取状态之后,会上报到该线程,和之前的上报的数据进行累加,以得到统计全量。

所以,CloudStack对于VM状态的监控,是从Management-Server启动到当前时间的历史统计数据,并非瞬时值。

代码解析

StatsController.java

该类继承了ComponentLifecycle,在Management-Server 启动的时候,会加载start方法,启动后台服务。

@Override
public boolean start() {
    init(_configDao.getConfiguration());
    return true;
}
其中 init() 方法,会读取全局配置中的设置,初始化不同的监控进程

Source code	   
private void init(Map<String, String> configs) {
    _executor = Executors.newScheduledThreadPool(4, new NamedThreadFactory("StatsCollector"));
 
    ......
    hostAndVmStatsInterval = NumbersUtil.parseLong(configs.get("vm.stats.interval"), 60000L);
    ......
    if (hostAndVmStatsInterval > 0) {
        _executor.scheduleWithFixedDelay(new VmStatsCollector(), 15000L, hostAndVmStatsInterval, TimeUnit.MILLISECONDS);
    }
    ......
}

代码可以看出,从全局设置中里面获取vm.stats.interval变量,默认为60s,即1分钟。如果想修改调整时间,可以在全局配置中进行修改。

VmStatsCollector是线程类,集成ManagedContextRunnable。

VmStatsCollector列出全部可用Host,然后按Host进行遍历,查询Host上所有VM当前运行状态,与历史值进行累加,代码如下:

class VmStatsCollector extends ManagedContextRunnable {
        @Override
        protected void runInContext() {
            try {
                ......
                SearchCriteria<HostVO> sc = _hostDao.createSearchCriteria();
                ......//创建查询条件
                List<HostVO> hosts = _hostDao.search(sc, null);
 
                for (HostVO host : hosts) {
                    List<UserVmVO> vms = _userVmDao.listRunningByHostId(host.getId());
                    ......
                    try {
                        HashMap<Long, VmStatsEntry> vmStatsById = _userVmMgr.getVirtualMachineStatistics(host.getId(), host.getName(), vmIds);
                        if (vmStatsById != null) {
                            ......
                            //新VM,加入map中
                        } else {
                            //已有历史数据VM,进行更新,CPU记录最新值,Disk和Network进行累加
                                statsInMemory.setCPUUtilization(statsForCurrentIteration.getCPUUtilization());
                                    statsInMemory.setNumCPUs(statsForCurrentIteration.getNumCPUs());
                                    statsInMemory.setNetworkReadKBs(statsInMemory.getNetworkReadKBs() + statsForCurrentIteration.getNetworkReadKBs());
                                    statsInMemory.setNetworkWriteKBs(statsInMemory.getNetworkWriteKBs() + statsForCurrentIteration.getNetworkWriteKBs());
                                    statsInMemory.setDiskWriteKBs(statsInMemory.getDiskWriteKBs() + statsForCurrentIteration.getDiskWriteKBs());
                                    statsInMemory.setDiskReadIOs(statsInMemory.getDiskReadIOs() + statsForCurrentIteration.getDiskReadIOs());
                                    statsInMemory.setDiskWriteIOs(statsInMemory.getDiskWriteIOs() + statsForCurrentIteration.getDiskWriteIOs());
                                    statsInMemory.setDiskReadKBs(statsInMemory.getDiskReadKBs() + statsForCurrentIteration.getDiskReadKBs());
                                    _VmStats.put(vmId, statsInMemory);
    ......
    }

_userVmMgr.getVirtualMachineStatistics() 方法中,向Hyperviser发送Cmd,查询所需信息,代码如下:

public HashMap<Long, VmStatsEntry> getVirtualMachineStatistics(long hostId, String hostName, List<Long> vmIds) throws CloudRuntimeException {
        ......
        Answer answer = _agentMgr.easySend(hostId, new GetVmStatsCommand(vmNames, _hostDao.findById(hostId).getGuid(), hostName));
        ......
    }

GetVmStatsCommand会发送到Hyperviser相关进程,并由Hyperviser相关进程调用API或 Cloud-Agent 服务进行处理,处理结果返回到当前线程进行处理,最终由VmStatsCollector进行合并。
在ListVm过程中,如果需要得到VM运行时状态,则调用StatsController的getVmStats来获取。
在Hyperviser的相关文件中,各有接受GetVmStatsCommand并进行处理的相关逻辑,下篇帖子会继续介绍Hyperviser中相关逻辑。
CloudStack VM运行状态的监控-HypervisorGetVmStatsCommand会发送到Hyperviser相关进程,并由Hyperviser相关进程调用API或 Cloud-Agent 服务进行处理,处理结果返回到当前线程进行处理,最终由VmStatsCollector进行合并。
在ListVm过程中,如果需要得到VM运行时状态,则调用StatsController的getVmStats来获取。
在Hyperviser的相关文件中,各有接受GetVmStatsCommand并进行处理的相关逻辑,下篇帖子会继续介绍Hyperviser中相关逻辑。
CloudStack VM运行状态的监控-Hypervisor

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • CloudStack VM运行状态的监控-Management,cloudstack系统vm

相关文章

  • CSR1000V在XenServer的安装和简单使用,csr1000vxenserver
  • 如何解决Greenplum中无法通过标准命令修复的元数据错误,greenplum元数据
  • 如何解决Greenplum master node与seg node元数据不一致,greenplumseg
  • storm的集群安装与配置,storm集群配置
  • 机器学习--Logistic回归算法案例,--logistic算法
  • 企业如何快速搭建大数据处理系统,搭建数据处理系统
  • hadoop2.7完全分布式安装,hadoop2.7
  • 说说hadoop,hadoop
  • 用户大会/会销怎么搞-Zoho CRM用户大会有感,-zohocrm
  • Power8伴随云计算横空出世,power8伴随横空出世

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • 系统监控软件Ganglia的安装,监控软件ganglia
    • 使用export/import导出和导入docker容器,exportdocker
    • Namespace:Openstack的网络实现,namespaceopenstack
    • MapReduce排序及实例,MapReduce排序实例
    • hadoop单机存储均衡和坏block处理,hadoop单机block
    • MongoDB Query 的几个方法,mongodbquery
    • 谈谈自己对随机森林(Random Forest)的一点理解以及代码注释~,randomforest
    • 孙其功陪你学之——Spark 正则化和SparkSQL,孙其功sparksql
    • openstack中glance组件images的所有python API 汇总,openstackglance
    • window操作系统搭建Spark开发调试环境

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有