wiki:OperationalMonitoring/DataSchema20

Version 2 (modified by dwiggins@bbn.com, 10 years ago) (diff)

change some schema datestamps from 0501 to 0828

REST Data Schema

All of these inherit from the UNIS network resource schema with the exception of the opsconfig schema.

  • opsconfig: operational configuration metadata, including locations of and information about other datastores
  • aggregate: metadata about an aggregate (including lists of resources and slivers at that aggregate, and where to look for measurements about the aggregate)
  • node: metadata about a resources (including resource properties termed "config" above, and a list of relevant ports (or of all ports, whichever is easier) on that resource)
  • interface: metadata about a network interface (including resource properties termed "config" above)
  • interfacevlan: metadata about a tagged VLAN subinterface of a network interface
  • sliver: metadata about a sliver at an aggregate, including resources to which that sliver is mapped
  • authority: metadata about a GENI authority (including lists of GENI users and slivers at that authority)
  • slice: metadata about a slice at an authority, including GENI users with roles on that slice
  • user: metadata about a GENI user at an authority, including contact information
  • experiment: metadata about an operational monitoring experiment for monitoring the dataplane.
  • data: Schema based on a combination of http://unis.incntre.iu.edu/schema/20120709/metadata and http://unis.incntre.iu.edu/schema/20120709/tsdatum, contains both metadata and data about measurements.
  • For now, we would use the ops_monitoring namespace for operations monitoring, meaning:
    • When we add monitoring-relevant optional properties to objects, we'll put them in an ops_monitoring dictionary
    • When we setup operations monitoring measurements, we'll give them the eventType ops_monitoring:<something>

Data schema usage example

Some examples usages of the above schemas to encode metadata and data needed for use cases 3 and 6 follow.

These examples assume the following (fictitious) local datastore URLs. These are arbitrary, and any place they appear, they can be replaced by whatever name the deployers prefer. For simplicitly, i've shown one local datastore per aggregate here, but the architecture does not require that --- it would be perfectly fine to have one datastore for relational metadata and one for the data itself, or one for certain types of relational metadata and one for others.

  • https://datastore.geni.net/: datastore containing configuration data for operational monitoring
  • https://datastore.instageni.gpolab.bbn.com/: datastore for gpo-ig aggregate
  • https://datastore.ch.geni.net/: datastore for ch.geni.net authority
  • https://datastore.externalchecks.geni.net/: datastore for external checks in the monitoring framework (e.g. inter-aggregate pings, AM external availability)

Data about operational monitoring configuration

Operational monitoring configuration data tells collectors where to find local datastores, and includes relevant metadata (like URNs and metadata about datastore or aggregate types) that collectors can use to decide which datastores to query. It is described using the opsconfig schema. Examples:

  • geni-prod: a hypothetical config datastore listing production aggregates and authorities:
    {
      "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/opsconfig#",
      "id": "geni-prod",
      "selfRef": "https://datastore.geni.net/opsconfigs/geni-prod",
      "ts": 1391192685740849,
      "aggregates": [
        {
          "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm",
          "amtype": "protogeni",
          "href": "https://datastore.instageni.gpolab.bbn.com/aggregates/gpo-ig"
        }
      ],
      "authorities": [
        {
          "urn": "urn:publicid:IDN+ch.geni.net+authority+ch",
          "href": "https://datastore.ch.geni.net/authorities/ch.geni.net"
        }
      ]
    }
    

Data about an aggregate

Aggregates are indexed by GENI-agreed short name and described using the aggregate schema. Examples:

Hypothetical REST call for GPO-IG:

https://datastore.instageni.gpolab.bbn.com/info/aggregate/gpo-ig

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/aggregate#",
  "id": "gpo-ig",
  "selfRef": "https://datastore.instageni.gpolab.bbn.com/info/aggregate/gpo-ig",
  "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm",
  "ts": 1391192685740849,
  "measRef": "https://datastore.instageni.gpolab.bbn.com/data",
  "resources": [
    {
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+node+pc1",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1"
    },
    {
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+node+pc2",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc2"
    },
    {
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+link_001",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/link/instageni.gpolab.bbn.com_link_001"
    }
  ],
  "slivers": [
    {
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+sliver+26947",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/sliver/instageni.gpolab.bbn.com_sliver_26947"
    }
  ]
}

Data about a node

Nodes have an ID which is a URL-sanitized version of their URN and are described using the node schema. Examples:

Hypothetical REST call for GPO-IG PC1:

https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1

Response:

{
  "$schema": "http://unis.incntre.iu.edu/schema/20140501/node#",
  "id": "instageni.gpolab.bbn.com_node_pc1",
  "ts": 1391192705275101,
  "selfRef": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1",
  "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+node+pc1",
  "ops_monitoring:mem_total_kb": 50331648,
  "ops_monitoring:vm_server_type": "xen",
  "ports": [
    { 
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+interface+pc1:eth0",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/interface/instageni.gpolab.bbn.com_interface_pc1%3Aeth0"
    },
    { 
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+interface+pc1:eth1",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/interface/instageni.gpolab.bbn.com_interface_pc1%3Aeth1"
    },
    { 
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+interface+pc1:eth2",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/interface/instageni.gpolab.bbn.com_interface_pc1%3Aeth2"
    },
    { 
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+interface+pc1:eth3",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/interface/instageni.gpolab.bbn.com_interface_pc1%3Aeth3"
    }
  ]
}

Links have an ID which is a URL-sanitized version of their URN and are described using the link schema. Examples:

Hypothetical REST call for GRNOC link salt_port_1750:

https://datastore.grnoc.iu.edu/info/link/salt_port_1750

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/link#",
  "id": "datastore.grnoc.iu.edu_link_001",
  "ts": 1391192705275101,
  "selfRef": "https://datastore.grnoc.iu.edu/info/link/salt_port_1750",
  "urn": "urn:publicid:IDN+datastore.grnoc.iu.edu+salt_port_1750",
  },
  "endpoints": [
    { 
      "urn": "urn:publicid:IDN+al2s.net.internet2.edu+interface+sdn-sw.salt.net.internet2.edu_100GigabitEthernet3_2_1750",
      "href": "https://datastore.grnoc.iu.edu/info/interfacevlan/sdn-sw.salt.net.internet2.edu_100GigabitEthernet3_2_1750"
    },
    { 
      "urn": "urn:publicid:IDN+al2s.net.internet2.edu+interface+sdn-sw.port.net.internet2.edu_100GigabitEthernet3_2_1750",
      "href": "https://datastore.grnoc.iu.edu/info/interfacevlan/sdn-sw.port.net.internet2.edu_100GigabitEthernet3_2_1750"    
    }
  ],
  "l2path": [  
    { 
      "urn": "urn:publicid:IDN+al2s.net.internet2.edu+interface+sdn-sw.salt.net.internet2.edu_100GigabitEthernet3_2_1750",
      "href": "https://datastore.grnoc.iu.edu/info/interfacevlan/sdn-sw.salt.net.internet2.edu_100GigabitEthernet3_2_1750"
    },
    {
      "urn": "urn:publicid:IDN+al2s.net.internet2.edu+interface+sdn-sw.salt.net.internet2.edu_100GigabitEthernet3_1_47",
      "href": "https://datastore.grnoc.iu.edu/info/interfacevlan/sdn-sw.salt.net.internet2.edu_100GigabitEthernet3_1_47"
    },
    {
      "urn": "urn:publicid:IDN+al2s.net.internet2.edu+interface+sdn-sw.seat.net.internet2.edu_100GigabitEthernet3_2_47",
      "href": "https://datastore.grnoc.iu.edu/info/interfacevlan/sdn-sw.seat.net.internet2.edu_100GigabitEthernet3_2_47"    
    },
    {
      "urn": "urn:publicid:IDN+al2s.net.internet2.edu+interface+sdn-sw.seat.net.internet2.edu_100GigabitEthernet3_1_38",
      "href": "https://datastore.grnoc.iu.edu/info/interfacevlan/sdn-sw.seat.net.internet2.edu_100GigabitEthernet3_1_38"    
    },
    { 
      "urn": "urn:publicid:IDN+al2s.net.internet2.edu+interface+sdn-sw.port.net.internet2.edu_100GigabitEthernet3_1_38",
      "href": "https://datastore.grnoc.iu.edu/info/interfacevlan/sdn-sw.port.net.internet2.edu_100GigabitEthernet3_1_38"    
    },
    { 
      "urn": "urn:publicid:IDN+al2s.net.internet2.edu+interface+sdn-sw.port.net.internet2.edu_100GigabitEthernet3_2_1750",
      "href": "https://datastore.grnoc.iu.edu/info/interfacevlan/sdn-sw.port.net.internet2.edu_100GigabitEthernet3_2_1750"    
    }
  ]
}

Data about an interface

Interfaces have an ID which is a URL-sanitized version of their URN and are described using the port schema. Notes:

  • I adopted the control/experimental terminology for interface roles from ProtoGENI listresources output. We could also use control/data; at any rate, we should be consistent among all monitoring uses.
  • All bandwidths are fiction.

Examples:

Hypothetical REST call for pc1 eth0 (control) at gpo-ig:

https://datastore.instageni.gpolab.bbn.com/info/interface/instageni.gpolab.bbn.com_interface_pc1:eth0

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/port#",
  "selfRef": "https://datastore.instageni.gpolab.bbn.com/info/interface/instageni.gpolab.bbn.com_interface_pc1:eth0",
  "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+interface+pc1:eth0",
  "ts": 1391194147100678,
  "id": "instageni.gpolab.bbn.com_interface_pc1:eth0",
  "address": {
    "type": "ipv4",
    "address": "192.1.242.140"
  },
  "ops_monitoring:role": "control",
  "ops_monitoring:max_bps": 10000000,
  "ops_monitoring:max_pps": 1000000
}

Hypothetical REST call for pc1 eth1 (dataplane) interface at gpo-ig:

https://datastore.instageni.gpolab.bbn.com/info/interface/instageni.gpolab.bbn.com_interface_pc1:eth1

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/port#",
  "selfRef": "https://datastore.instageni.gpolab.bbn.com/info/interface/instageni.gpolab.bbn.com_interface_pc1:eth1",
  "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+interface+pc1:eth1",
  "ts": 1391194147100678,
  "id": "instageni.gpolab.bbn.com_interface_pc1:eth1",
  "address": {
    "type": "mac",
    "address": "aa:aa:aa:aa:aa:ab"
  },
  "ops_monitoring:role": "experimental",
  "ops_monitoring:max_bps": 10000000,
  "ops_monitoring:max_pps": 1000000
}

Data about a slice authority

GENI slice authorities are indexed by domain name and described using the authority schema. Examples:

Hypothetical REST call for authority of ch.geni.net:

https://datastore.ch.geni.net/info/authority/ch.geni.net

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/authority#",
  "id": "ch.geni.net",
  "selfRef": "https://datastore.ch.geni.net/info/authority/ch.geni.net",
  "urn": "urn:publicid:IDN+ch.geni.net+authority+ch",
  "ts": 1391192685740849,
  "users": [
    {
      "urn": "urn:publicid:IDN+ch.geni.net+user+tupty",
      "href": "https://datastore.ch.geni.net/info/user/tupty"
    }
  ],
  "slices": [
    {
      "urn": "urn:publicid:IDN+ch.geni.net:gpo-infra+slice+tuptyexclusive",
      "href": "https://datastore.ch.geni.net/info/slice/ch.geni.net_gpo-infra_slice_tuptyexclusive"
    }
  ]
}

Data about a VLAN

Examples:

Hypothetical REST call for VLAN 101 from nox to core controlled by ION (probably an incorrect example):

https://datastore.instageni.gpolab.bbn.com/info/interfacevlan/instageni.gpolab.bbn.com_interface_pc1:eth1:1750

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/port-vlan#",
  "selfRef": "https://datastore.instageni.gpolab.bbn.com/interfacevlan/instageni.gpolab.bbn.com_interface_pc1:eth1:1750",
  "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+interface+pc1:eth1:1750",
  "ts": 1391194147100678,
  "id": "instageni.gpolab.bbn.com_interface_pc1:eth1:1750",
  "tag": 1750,
  "port": {
    "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+interface+pc1:eth1",
    "href": "https://datastore.instageni.gpolab.bbn.com/ports/instageni.gpolab.bbn.com_interface_pc1:eth1"
  }
}

Data about a GENI user

GENI users have an ID based on the username and are described using the GENI user schema. Examples:

Hypothetical REST call for user tupty at ch.geni.net:

 https://datastore.ch.geni.net/info/user/tupty

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/user#",
  "id": "tupty",
  "selfRef": "https://datastore.ch.geni.net/info/user/tupty",
  "urn": "https://datastore.ch.geni.net/info/user/tupty",
  "ts": 1391192685740849,
  "authority": {
    "urn": "urn:publicid:IDN+ch.geni.net+authority+ch",
    "href": "https://datastore.ch.geni.net/info/authority/ch.geni.net"
  },
  "fullname": "Tim Exampleuser",
  "email": "tim@example.com"
}

Data about a GENI slice

GENI slices have an ID based on the URN and are described using the GENI slice schema. Examples: Hypothetical REST call for tuptyexclusive slice:

 https://datastore.ch.geni.net/info/slice/ch.geni.net_gpo-infra_slice_tuptyexclusive
{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/slice#",
  "id": "ch.geni.net_gpo-infra_slice_tuptyexclusive",
  "selfRef": "https://datastore.ch.geni.net/info/slice/ch.geni.net_gpo-infra_slice_tuptyexclusive",
  "urn": "urn:publicid:IDN+ch.geni.net:gpo-infra+slice+tuptyexclusive",
  "uuid": "8c6b97fa-493b-400f-95ee-19accfaf4ae8",
  "ts": 1391192685740849,
  "authority": {
    "urn": "urn:publicid:IDN+ch.geni.net+authority+ch",
    "href": "https://datastore.ch.geni.net/info/authority/ch.geni.net"
  },
  "created": 1391626683000000,
  "expires": 1391708989000000,
  "members": [
    {
      "urn": "urn:publicid:IDN+ch.geni.net+user+tupty",
      "href": "https://datastore.ch.geni.net/info/users/tupty",
      "role": "lead"
    }
  ]
}

Data about a GENI sliver

GENI sliver have an ID based on the URN and are described using the GENI sliver schema. Examples:

Hypothetical REST call for tuptyexclusive instageni sliver:

https://datastore.instageni.gpolab.bbn.com/info/sliver/instageni.gpolab.bbn.com_sliver_26947

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/sliver#",
  "id": "instageni.gpolab.bbn.com_sliver_26947",
  "selfRef": "https://datastore.instageni.gpolab.bbn.com/info/sliver/instageni.gpolab.bbn.com_sliver_26947",
  "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+sliver+26947",
  "uuid": "30752b06-8ea8-11e3-8d30-000000000000",
  "ts": 1391192685740849,
  "aggregate": {
    "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm",
    "href": "https://datastore.instageni.gpolab.bbn.com/info/aggregates/gpo-ig"
  },
  "slice_urn": "urn:publicid:IDN+ch.geni.net:gpo-infra+slice+tuptyexclusive",
  "slice_uuid": "8c6b97fa-493b-400f-95ee-19accfaf4ae8",
  "creator": "urn:publicid:IDN+ch.geni.net+user+tupty",
  "created": 1391626683000000,
  "expires": 1391708989000000,
  "resources": [
    {
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+node+pc1",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1",
    },
    {
      "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+node+pc2",
      "href": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc2",
    }
  ]
}

Data about an external check datastore

https://externalcheckstore.gpolab.bbn.com/info/externalcheck/gpo
{
   "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/externalcheck#",
   "id": "gpo",
   "selfRef": "https://externalcheckstore.gpolab.bbn.com/info/externalcheck/gpo",
   "ts": 1397762559284773,
   "measRef: "https://externalcheckstore.gpolab.bbn.com/data/",
   "experiments": [
      {
         "href": "https://externalcheckstore.gpolab.bbn.com/info/experiment/missouri_ig_to_gpo_ig"
      }
   ],
   "monitored_aggregates": [
      {
         "id": "gpo-ig",
         "href": "https://datastore.instageni.gpolab.bbn.com/info/aggregate/gpo-ig"
      },
      {
         "id": "rci-eg",
         "href": "https://rci-hn.exogeni.net/ops-monitoring/info/aggregate/rci-eg"
      }
   ]
}

Data about a monitoring experiment

Operational monitoring measures the dataplane with a set of simple tests between aggregates described using the operational monitoring experiment schema. Examples:

Hypothetical REST call for missouri-ig to gpo-ig experiment:

https://datastore.externalchecks.geni.net/info/experiment/missouri-ig_to_gpo-ig

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/experiment#",
  "id": "missouri-ig_to_gpo-ig",
  "selfRef": "https://datastore.externalchecks.geni.net/info/experiment/missouri-ig_to_gpo-ig",
  "slice_urn": "urn:publicid:IDN+ch.geni.net:gpo-infra+slice+tuptyexclusive",
  "slice_uuid": "8c6b97fa-493b-400f-95ee-19accfaf4ae8",
  "ts": 1391192685740849,
  "source_aggregate": {
    "urn": "urn:publicid:IDN+instageni.missouri.edu+authority+cm",
    "href": "https://datastore.instageni.missouri.edu/info/aggregates/missouri-ig"
  },
  "destination_aggregate": {
    "urn": "urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm",
    "href": "https://datastore.instageni.gpolab.bbn.com/info/aggregates/gpo-ig"
  }
}

Measurements used for the use cases

Measurements have an opaque ID which is generated by the local datastore which serves them, and must be persistent, so that the caller has the option of asking for the measurement by ID. They are described using the data schema outlined above. Examples: Hypothetical REST call for CPU utilization metric on pc1:

https://datastore.instageni.gpolab.bbn.com/data/?q={"filters":{"eventType": ["ops_monitoring:cpu_util"],"ts":{"gte":0, "lte": 1391199016651285},"obj":{"type":"node","id":["instageni.gpolab.bbn.com_node_pc1"]}}}

Response

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/data#",
  "id": "cpu_util:instageni.gpolab.bbn.com_node_pc1",
  "subject": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1",
  "eventType": "ops_monitoring:cpu_util",
  "description": "CPU utilization percentage",
  "units": "percent",
  "tsdata": [
    { "ts": 1391198716651283, "v": 45 },
    { "ts": 1391198776651284, "v": 44 },
    { "ts": 1391198836651284, "v": 44 },
    { "ts": 1391198896651284, "v": 47 },
    { "ts": 1391198956651284, "v": 46 },
    { "ts": 1391199016651285, "v": 47 }
  ]
}

Hypothetical REST call for percentage of swap available on pc1:

https://datastore.instageni.gpolab.bbn.com/data/?q={"filters":{"eventType": ["ops_monitoring:swap_free"],"ts":{"gt":0,"lt":1391199016651285},"obj":{"type":"node","id":["instageni.gpolab.bbn.com_node_pc1"]}}}

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/data#",
  "id": "swap_free:instageni.gpolab.bbn.com_node_pc1",
  "subject": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1",
  "eventType": "ops_monitoring:swap_free",
  "description": "Percentage of swap available",
  "units": "percent",
  "tsdata": [
    { "ts": 1391198716651283, "v": 95 },
    { "ts": 1391198776651284, "v": 95 },
    { "ts": 1391198836651284, "v": 95 },
    { "ts": 1391198896651284, "v": 95 },
    { "ts": 1391198956651284, "v": 95 },
    { "ts": 1391199016651285, "v": 95 }
  ]
}

Hypothetical REST call for memory in active use on pc1:

https://datastore.instageni.gpolab.bbn.com/data/?q={"filters":{"eventType": ["ops_monitoring:mem_active_kb"],"ts":{"gte":0, "lt": 1391299016651285},"obj":{"type":"node","id":["instageni.gpolab.bbn.com_node_pc1"]}}}

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/data#",
  "id": "mem_active_kb:instageni.gpolab.bbn.com_node_pc1",
  "subject": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1",
  "eventType": "ops_monitoring:mem_active_kb",
  "description": "Memory in active use",
  "units": "integer",
  "tsdata": [
    { "ts": 1391198716651283, "v": 20030048 },
    { "ts": 1391198776651284, "v": 20031148 },
    { "ts": 1391198836651284, "v": 20031148 },
    { "ts": 1391198896651284, "v": 22222222 },
    { "ts": 1391198956651284, "v": 22222222 },
    { "ts": 1391199016651285, "v": 22222222 }
  ]
}

Hypothetical call for bytes per second received by pc1:eth0:

https://datastore.instageni.gpolab.bbn.com/data/?q={"filters":{"eventType": ["ops_monitoring:rx_bytes"],"ts":{"gte":0, "lte":1391299016651285},"obj":{"type":"interface","id":["instageni.gpolab.bbn.com_node_pc1:eth0"]}}}

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/data#",
  "id": "rx_bps:instageni.gpolab.bbn.com_interface_pc1:eth0",
  "subject": "https://datastore.instageni.gpolab.bbn.com/info/ports/instageni.gpolab.bbn.com_interface_pc1:eth0",
  "eventType": "ops_monitoring:rx_bps",
  "description": "bytes per second received on this interface",
  "units": "float",
  "tsdata": [
    { "ts": 1391198716651283, "v": 2453.64 },
    { "ts": 1391198776651284, "v": 800.2 },
    { "ts": 1391198836651284, "v": 2400.3 },
    { "ts": 1391198896651284, "v": 1984.3 },
    { "ts": 1391198956651284, "v": 0 },
    { "ts": 1391199016651285, "v": 0 }
  ]
}

Hypothetical REST call for boolean metric indicating whether pc1 is available for use according to the aggregate responsible for it:

https://datastore.instageni.gpolab.bbn.com/data/?q={"filters":{"eventType": ["ops_monitoring:is_available"],"ts":{"gte":0, "lte":1391299016651285},"obj":{"type":"node","id":["instageni.gpolab.bbn.com_node_pc1"]}}}

Response:

{
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/data#",
  "id": "is_available:instageni.gpolab.bbn.com_node_pc1",
  "subject": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1",
  "eventType": "ops_monitoring:is_available",
  "description": "is the subject node available, according to the aggregate",
  "units": "boolean",
  "tsdata": [
    { "ts": 1391198716651283, "v": 1 },
    { "ts": 1391198776651284, "v": 1 },
    { "ts": 1391198836651284, "v": 1 },
    { "ts": 1391198896651284, "v": 1 },
    { "ts": 1391198956651284, "v": 0 },
    { "ts": 1391199016651285, "v": 0 }
  ]
}

Bulk Data Queries

Queries on multiple eventTypes and object ID's will be presented in a list format. Here is an example query for event types cpu utilization and active memory utilization for nodes pc1 and pc2 of instageni-bbn. Also it is advised to provide timestamp filters with data queries. Here is the format for timestamp filters .

Example call:

https://datastore.instageni.gpolab.bbn.com/data/?q={"filters":{"eventType": ["ops_monitoring:mem_used","ops_monitoring:cpu_util"],"ts":{"gte":1391192225475202,"lt":1391192225480000},"obj":{"type":"node","id":["instageni.gpolab.bbn.com_node_pc1","instageni.gpolab.bbn.com_node_pc2"]}}}}
[
 {
   "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/data#",
    "id": "cpu_util:instageni.gpolab.bbn.com_node_pc1",
    "subject": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1",
    "eventType": "ops_monitoring:cpu_util",
    "description": "CPU utilization percentage",
    "units": "percent",
    "tsdata": [
      { "ts": 1391198716651283, "v": 45 },
      { "ts": 1391198776651284, "v": 44 },
      { "ts": 1391198836651284, "v": 44 },
      { "ts": 1391198896651284, "v": 47 },
      { "ts": 1391198956651284, "v": 46 },
      { "ts": 1391199016651285, "v": 47 }
    ]
 }
,
 { 
   "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/data#",
   "id": "cpu_util:instageni.gpolab.bbn.com_node_pc2",
   "subject": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc2",
   "eventType": "ops_monitoring:cpu_util",
   "description": "CPU utilization percentage",
   "units": "percent",
   "tsdata": [
     { "ts": 1391198716651283, "v": 45 },
     { "ts": 1391198776651284, "v": 48 },
     { "ts": 1391198836651284, "v": 45 },
     { "ts": 1391198896651284, "v": 49 },
     { "ts": 1391198956651284, "v": 50 },
     { "ts": 1391199016651285, "v": 51 }
    ]
 }
,
 {
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/data#",
  "id": "mem_active_kb:instageni.gpolab.bbn.com_node_pc1",
  "subject": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc1",
  "eventType": "ops_monitoring:mem_active_kb",
  "description": "Memory in active use",
  "units": "integer",
  "tsdata": [
    { "ts": 1391198716651283, "v": 30030048 },
    { "ts": 1391198776651284, "v": 30031148 },
    { "ts": 1391198836651284, "v": 30031148 },
    { "ts": 1391198896651284, "v": 32222222 },
    { "ts": 1391198956651284, "v": 32222222 },
    { "ts": 1391199016651285, "v": 32222222 }
  ]
 }
,
 {
  "$schema": "http://www.gpolab.bbn.com/monitoring/schema/20140501/data#",
  "id": "mem_active_kb:instageni.gpolab.bbn.com_node_pc2",
  "subject": "https://datastore.instageni.gpolab.bbn.com/info/node/instageni.gpolab.bbn.com_node_pc2",
  "eventType": "ops_monitoring:mem_active_kb",
  "description": "Memory in active use",
  "units": "integer",
  "tsdata": [
    { "ts": 1391198716651283, "v": 20030048 },
    { "ts": 1391198776651284, "v": 20031148 },
    { "ts": 1391198836651284, "v": 20031148 },
    { "ts": 1391198896651284, "v": 22222222 },
    { "ts": 1391198956651284, "v": 22222222 },
    { "ts": 1391199016651285, "v": 22222222 }
  ]
 }
]