码云账号不再使用社区账号进行二次身份验证的通知 详情
私信发送成功
Watch Star Fork

accjiyun / OSMonitorJava

OpenStack监控接口开发。
克隆/下载
accjiyun 最后提交于 2017-08-29 16:24 . 文档修正。
Loading...
README.md 6.32 KB

OpenStack 监控接口开发

JavaDoc : http://accjiyun.oschina.io/osmonitor/doc

监控一般流程:

1.首先完成身份认证;

2.获取OpenStack计算节点列表即物理机(Hypervisor),并且获取VCPU、内存、磁盘等信息;

3.获取所有虚拟机实例(Instance)信息,或选择运行在某个计算节点物理机上的虚拟机实例信息;

4.从选定特定实例获取相关的监控指标(Meter),并获取指标对应的监控值(Sample),在表现层通过图表等信息展示。

身份验证

所有的操作的前提都需要先完成身份认证。

身份验证有两种方式:

  • 配置文件认证

修改auth.properties修改验证信息

authURL=http://controller2:5000/v3/
domain=Default
username=admin
password=pass123456
projectName=admin

使用认证工厂返回认证客户端实例,不为空则认证成功:

AuthService authService = new AuthFactory();
Assert.assertNotNull(authService.auth());
  • 认证信息Bean认证
Authentication user = new Authentication();
user.setAuthURL("http://controller2:5000/v3/");
user.setDomain("Default");
user.setProjectName("admin");
user.setUserName("admin");
user.setPassword("pass123456");
AuthService authService = new AuthFactory();
Assert.assertNotNull(authService.auth(user));

Hypervisor

计算节点物理机

  • 获取所有计算节点物理机信息列表
List<? extends Hypervisor> hypervisors = service.getHypervisors();
LOGGER.info("所有计算节点信息如下:");
for (Hypervisor h : hypervisors) {
     LOGGER.info(h.getHypervisorHostname() + " " + h.toString());
}
  • 获取所有计算节点物理机资源使用情况的集合
HypervisorStatistics statistics = service.getTotalStatistics();
LOGGER.info(statistics.toString());

Instance

虚拟机实例层,即在计算节点上创建的每一个Instance.

  • 获取所有的虚拟机实例
for (Server s : service.getAllInstance()) {
    LOGGER.info(s.toString());
}
  • 通过计算节点ID获取运行在该计算节点上的实例
boolean isHost = true;
for (Server s : service.getInstancesByHypervisorID("a816a5a04556df0382e8fc7da377a91a45ff480073f00f11f556a51f")) {
    if (!s.getHostId().equals("a816a5a04556df0382e8fc7da377a91a45ff480073f00f11f556a51f")) {
       isHost = false;
    }
}
Assert.assertTrue(isHost);
  • 通过计算节点主机名获取运行在该计算节点上的实例
boolean isHost = true;
for (Server s : service.getInstancesByHypervisorHostname("compute1")) {
   if (!s.getHypervisorHostname().equals("compute1")) {
        isHost = false;
   }
}
Assert.assertTrue(isHost);

Resource

监控对象,可以是虚拟机实例、镜像、浮动IP等,其ID也对应相等。

  • 获取所有的监控资源对象
for (Resource r : service.getResourceList()) {
     LOGGER.info(r.toString());
}
  • 通过监控资源ID获取资源对象实例
boolean result = false;
if (service.getResourceById("1eea344d-79c4-408e-8fac-c8801e0fd702").getId()
       .equals("1eea344d-79c4-408e-8fac-c8801e0fd702")) {
    result = true;
}
Assert.assertTrue(result);

Meter

监控指标,例如:内存占用,网络IO,磁盘IO等等。

  • 获取所有的监控指标
for (Meter m : service.getMeterList()) {
     LOGGER.info(m.toString());
}
  • 通过监控指标名称获取监控指标
boolean result = true;
   for (Meter m : service.getMeterListByName("memory")) {
       if (!m.getName().equals("memory")) {
           result = false;
       }
   }
Assert.assertTrue(result);
  • 资源ID(实例ID、镜像ID等)获取其所有监控指标
boolean result = true;
for (Meter m : service.getMeterListByResourceId("1eea344d-79c4-408e-8fac-c8801e0fd702")) {
    if (!m.getResourceId().equals("1eea344d-79c4-408e-8fac-c8801e0fd702")) {
         result = false;
    }
}
Assert.assertTrue(result);

Sample

监控值,是每个采集时间点上meter对应的值

  • 获取所有的Sample数据
for (Sample s : service.getSampleList()) {
     LOGGER.info(s.toString());
}
  • 通过ID获取Sample实例
boolean result = false;
if (service.getSampleById("61e8d94a-8bf9-11e7-9325-984be16b6791").getId()
         .equals("61e8d94a-8bf9-11e7-9325-984be16b6791")) {
     result = true;
}
Assert.assertTrue(result);
  • 查询条件Criteria获取符合条件的Sample
boolean result = true;
List<? extends Sample> samples = service.querySamples(SampleCriteria.create().resource("1eea344d-79c4-408e-8fac-c8801e0fd702"));
for (Sample s : samples) {
     if (!s.getResourceId().equals("1eea344d-79c4-408e-8fac-c8801e0fd702")) {
          result = false;
     }
}
Assert.assertTrue(result);
  • 通过监控指标名称和查询条件Criteria获取符合条件的Sample
boolean result = true;
List<? extends MeterSample> samples = service.querySamples("memory", SampleCriteria.create().resource("1eea344d-79c4-408e-8fac-c8801e0fd702"));
for (MeterSample s : samples) {
    if (!s.getResourceId().equals("1eea344d-79c4-408e-8fac-c8801e0fd702")) {
        result = false;
    }
}
Assert.assertTrue(result);
  • 查询条件SampleCriteria的使用

可以通过resourceIdprojectId分别筛选特定Resource、Project下的监控值, 还可以通过采集的时间,通过LTGTLTEGTEEQUALS时间前后的对比来筛选。

SampleCriteria sc = new SampleCriteria()
        .resource("1eea344d-79c4-408e-8fac-c8801e0fd702")
        .project("043b9d0dfbc44982b6eda7857975fce9")
        .timestamp(SampleCriteria.Oper.GT, System.currentTimeMillis() - (24 * 60 * 60 * 1000))
        .timestamp(SampleCriteria.Oper.LT, System.currentTimeMillis());
     boolean result = true;
     for (Sample s : service.querySamples(sc)) {
          if (!s.getResourceId().equals("1eea344d-79c4-408e-8fac-c8801e0fd702")
                  || !s.getProjectId().equals("043b9d0dfbc44982b6eda7857975fce9")
                  || !Timestamp.valueOf(s.getTimestamp()).after(new Timestamp(System.currentTimeMillis() - (24 * 60 * 60 * 1000)))
                  || !Timestamp.valueOf(s.getTimestamp()).before(new Timestamp(System.currentTimeMillis()))) {
              result = false;
          }
     }
Assert.assertTrue(result);

项目点评 (0)

你可以在登录后,对此项目发表评论

2_float_left_people 2_float_left_close