Performing metric operations with the REST API
The following section provides a list of supported endpoints and an overview about running these endpoints. Before you run an endpoint, you must authenticate yourself. For more information, see Access and authentication for the REST API
Metric Ingestion
POST /insert
Insert metrics data in the time series database, and convert the data to the device and entity format
Authorization: Bearer <Jwt_Token>/<apiKey>
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
Important
The request payload for this endpoint is case-sensitive.
{
"labels": {
"metricName": "<metric name>", "hostname": "<hostname>",
"entityId": "<entity ID>",
"entityTypeId": "<Name of the entityTypeId>",
"entityName": "<Name of entity name>",
"hostType": "<type of host>",
"isKpi": "<isKpi>",
"unit": "<unit type>",
"instanceName": "<instance name>",
"source": "<source type>"
},
"samples": [
{
"value": "<value>",
"timestamp": "<timestamp>"
},
{
"value": "<value>",
"timestamp": "<timestamp>"
}
]
}
]
{
"labels": {
"metricName": "offset",
"hostname": "clm-HostA",
"source": "nagios",
"entityTypeId": "segmentEntityType1",
"entityName": "entitysegment",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType1:entitysegment",
"instanceName": "segment"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "offset",
"hostname": "clm-HostA",
"source": "nagios",
"entityTypeId": "segmentEntityType2",
"entityName": "entitytower1",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitysegment",
"parentEntityTypeId": "segmentEntityType1",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType2:entitytower1",
"instanceName": "tower1",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
}
]
{
"labels": {
"metricName": "offset",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType1",
"entityName": "entitysegment",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType1:entitysegment",
"instanceName": "segment"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "offset",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType2",
"entityName": "entitytower1",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitysegment",
"parentEntityTypeId": "segmentEntityType1",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType2:entitytower1",
"instanceName": "tower1",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "dbm",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType3",
"entityName": "entitypower1",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitytower1",
"parentEntityTypeId": "segmentEntityType2",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType3:entitypower1",
"instanceName": "power",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "dbm",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType4",
"entityName": "entityrx1",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitypower1",
"parentEntityTypeId": "segmentEntityType3",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType4:entityrx1",
"instanceName": "rx",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "dbm",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType5",
"entityName": "entitytx1",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitypower1",
"parentEntityTypeId": "segmentEntityType3",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType5:entitytx1",
"instanceName": "tx",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "Percentage",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType6",
"entityName": "entitygenerator_fuel1",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitytower1",
"parentEntityTypeId": "segmentEntityType2",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType6:entitygenerator_fuel1",
"instanceName": "generator_fuel_level",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "Percentage",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType7",
"entityName": "entitylevel1",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitygenerator_fuel1",
"parentEntityTypeId": "segmentEntityType6",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType7:entitylevel1",
"instanceName": "level",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "offset",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType8",
"entityName": "entitytower2",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitysegment",
"parentEntityTypeId": "segmentEntityType1", "entityId": "nagios:clm-pun-microbots77:segmentEntityType8:entitytower2",
"instanceName": "tower2",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "dbm",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType9",
"entityName": "entitypower2",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitytower2",
"parentEntityTypeId": "segmentEntityType8",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType9:entitypower2",
"instanceName": "power", "isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": { "metricName": "dbm",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType10",
"entityName": "entityrx2",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitypower2",
"parentEntityTypeId": "segmentEntityType9",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType10:entityrx2",
"instanceName": "rx",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "dbm",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType11",
"entityName": "entitytx2",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitypower2",
"parentEntityTypeId": "segmentEntityType9",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType11:entitytx2",
"instanceName": "tx",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "Percentage",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType12",
"entityName": "entitygenerator_fuel2",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitytower2",
"parentEntityTypeId": "segmentEntityType8",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType12:entitygenerator_fuel2",
"instanceName": "generator_fuel_level",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "Percentage",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType13",
"entityName": "entitylevel2",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitygenerator_fuel2",
"parentEntityTypeId": "segmentEntityType12",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType13:entitylevel2",
"instanceName": "level",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "offset",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType14",
"entityName": "entitytower3",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitysegment",
"parentEntityTypeId": "segmentEntityType1",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType14:entitytower3",
"instanceName": "tower3",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "dbm",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType15",
"entityName": "entitypower3",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitytower3",
"parentEntityTypeId": "segmentEntityType14",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType15:entitypower3",
"instanceName": "power",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "dbm",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType16",
"entityName": "entityrx3",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitypower3",
"parentEntityTypeId": "segmentEntityType15",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType16:entityrx3",
"instanceName": "rx",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "dbm",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType17",
"entityName": "entitytx3",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitypower3",
"parentEntityTypeId": "segmentEntityType15",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType17:entitytx3",
"instanceName": "tx",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "Percentage",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType18",
"entityName": "entitygenerator_fuel3",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitytower3",
"parentEntityTypeId": "segmentEntityType14",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType18:entitygenerator_fuel3",
"instanceName": "generator_fuel_level",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
},
{
"labels": {
"metricName": "Percentage",
"hostname": "clm-pun-microbots77",
"source": "nagios",
"entityTypeId": "segmentEntityType19",
"entityName": "entitylevel3",
"hostType": "server",
"isKpi": "True",
"unit": "Percent",
"parentEntityName": "entitygenerator_fuel3",
"parentEntityTypeId": "segmentEntityType18",
"entityId": "nagios:clm-pun-microbots77:segmentEntityType19:entitylevel3",
"instanceName": "level",
"isDeviceMappingEnabled": "true"
},
"samples": [
{
"value": 90,
"timestamp": 1639030067000
}
]
}
]
Response codes:
- 202 (Accepted): API request accepted
- 400 (Bad Request): Unsuccessful response
- 401 (Unauthorized): Unsuccessful response
POST /prometheus
Send Prometheus metrics to BMC Helix Operations Management
The following video (2:25) created by BMC Customer Support describes how to send third-party metrics to BMC Helix Operations Management.
Authorization: Bearer <Jwt_Token>/<apiKey>
Content-Encoding : Snappy
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
Important
We recommend that you use a Prometheus server remote write to ingest the data.
To send Prometheus metrics to BMC Helix Operations Management, the following exporters are supported:
- Node exporter
- Windows exporter
- Oracle database exporter
- Kafka exporter
- Redis exporter
- JMX exporter
To learn about the exporters that Prometheus offers, see Exporters and integrations.
Response codes:
- 202 (Accepted): API request accepted
- 400 (Bad Request): Unsuccessful response
- 401 (Unauthorized): Unsuccessful response
Important
You can use the /delete API to delete only the data that is inserted using the /insert API.
The /delete API does not support the deletion of devices that are created by using the /prometheus API.
POST /delete
Delete the device details from BMC Helix Operations Management
Authorization: Bearer <Jwt_Token>/<apiKey>
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
"devices": [
{
"hostname": "<hostname>",
"source": "<source name>"
}
]
}
"devices": [
{
"hostname": "clm-HostA",
"source": "co"
}
]
}
Response codes:
- 202 (Accepted): API request accepted
- 400 (Bad Request): Unsuccessful response
- 401 (Unauthorized): Unsuccessful response
Note
The monitor details in the Non BMC MonitorTypes category are retained in the system even after device deletion.
For example: entityTypeId, entityName
Metric Query
GET /query?query=<query>
Get the time series data by specifying the timeselector query using labels and timestamp
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
Look at the following example to understand possible values for <query>:
Query examples
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
GET /query_range?query=<query>
Get the time series data by specifying the timeselector query using labels and time frame
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
Look at the following example to understand possible values for <query>:
Query examples
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
GET /labels
Get all the labels from the time series database
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
Look at the following example to understand possible values for <condition>:
Match condition examples
"status": "success",
"data": [
"VictoriaMetrics_AccountID",
"__name__",
"deviceId",
"entityId",
"entityName",
"entityTypeId",
"hostname",
"isblackout",
"source"
],
}
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
GET /label/<label_name>/values
Get the specified label values from the time series database
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
{
"status": "success",
"data": [
"CPU0",
"CPU1",
"NUK_CPU",
"NUK_FileSystem_Container",
"NUK_Linux_OS",
"NUK_Memory",
"NUK_Network_Container",
"boot",
"dev",
"dev-hugepages",
"dev-mqueue",
"dev-pts",
"dev-shm",
"docker0",
"ens160",
"ens192",
"lo",
"proc",
"proc-sys-fs-binfmt_misc",
],
}
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
GET /series
Get the unique time series data that match the specified criteria
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
Look at the following example to understand possible values for <condition>:
Match condition examples
Description
#Consider the following example to understand the series API:
{hostname="clm-HostA", server="web server"} 10
{hostname="clm-HostA", server="web server"} 1
{hostname="clm-HostA", server="web server"} 10
{hostname="clm-HostA", server="web server"} 2
{hostname="clm-HostB", server="web server"} 3455
{hostname="clm-HostB", server="web server"} 321
{hostname="clm-HostB", server="web server"} 32
{hostname="clm-HostB", server="web server"} 34
#In the above example, there is only 1 unique time series matching the hostname criteria and timestamp, and therefore the /series API will display the output as shown below:
#Example Output
{hostname="clm-HostB", server="web server"}
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
GET /series/count
Get the count of unique time series data
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
Description
#Consider the following example to understand the series/count API: {hostname="clm-HostA", server="web server"} 10 {hostname="clm-HostA", server="web server"} 1 {hostname="clm-HostA", server="web server"} 10 {hostname="clm-HostA", server="web server"} 2 {hostname="clm-HostB", server="web server"} 3455 {hostname="clm-HostB", server="web server"} 321 {hostname="clm-HostB", server="web server"} 32 {hostname="clm-HostB", server="web server"} 34 #In the above example, there are only 2 unique time series data, and therefore the /series/count API will display the count as 2. {hostname="clm-HostA", server="web server"} {hostname="clm-HostB", server="web server"} #Example Output { "status": "success", "data": [ 2 ], }
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
GET /export?match=<condition>
Get the time series data by specifying the query using labels
Consider the following examples to understand possible values for <condition>:
Important
The queries data must be UTF-8 encoded.
Match condition examples
You can use the pipe (|) character to specify multiple metrics. If you don't specify a value for the end parameter, the system considers the current time as the parameter value.
Content-Type: application/x-www-form-urlencoded
For instructions about obtaining the JWT token, see Access and authentication for the REST API.
{
"metric": {
"__name__": "total1037",
"VictoriaMetrics_AccountID": "558679744",
"entityId": "co:HostA.bmc.com:Monitor_abcde1037:data1037",
"entityName": "data1037",
"entityTypeId": "Monitor_abcde1037",
"hostType": "application.lb",
"hostname": "HostA.bmc.com",
"isKpi": "true",
"source": "co",
"unit": "#"
},
"values": [
50
],
"timestamps": [
1675239926000
]
}
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
The response Content-Type is application/stream+json.
POST /query
Get the time series data by specifying the timeselector query using labels and timestamp
You can run this API by specifying the API key in the header.
Encoding format: url-encoded key value format
For instructions about obtaining the JWT token, see Access and authentication for the REST API..
Example - Request body
Look at the following example to understand possible values for query:
Query examples
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
POST /query_range
Get the time series data by specifying the timeselector query using labels and time frame
You can run this API by specifying the API key in the header.
Encoding format: url-encoded key value format
For instructions about obtaining the JWT token, see Access and authentication for the REST API..
Example - Request body
Look at the following example to understand possible values for query:
Query examples
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
POST /labels
Get all the labels from the time series database
For instructions about obtaining the JWT token, see Access and authentication for the REST API..
"status": "success",
"data": [
"VictoriaMetrics_AccountID",
"__name__",
"deviceId",
"entityId",
"entityName",
"entityTypeId",
"hostname",
"isblackout",
"source"
],
}
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
POST /series
Get the unique time series data that match the specified criteria
Encoding format: url-encoded key value format
For instructions about obtaining the JWT token, see Access and authentication for the REST API..
Example - Request body
Consider the following examples to understand possible values for <condition>:
match[]={__name__="total1111"}
match[]={entityName="data1111", __name__="total1111"}
match[]={entityName="NUK_CPU", source="HM", hostname="<hostname>"}
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
POST /export
Get the time series data by specifying the query using labels
You can run this API by specifying the API key in the header.
Content-Type: application/x-www-form-urlencoded
Example - Request body
Consider the following examples to understand possible values for <condition>:
match[]={__name__="total1111"}
match[]={entityName="data1111", __name__="total1111"}
match[]={entityName="NUK_CPU", source="HM", hostname="<hostname>"}
For instructions about obtaining the JWT token, see Access and authentication for the REST API..
Response codes:
- 200 (OK): Successful response
- 401 (Unauthorized): Unsuccessful response
The response Content-Type is application/stream+json.