Public API
XorMon fournit une API REST standard pour l’intégration avec d’autres outils.
La Public API n’est accessible qu’aux clients disposant d’un abonnement de support.
Fonctions
Fonctions prévues
Cette page ne contient pas la documentation complète de la Public API REST
La documentation complète de l’API REST est dans l’interface du produit XorMon : Settings ➡ Public API
Les requêtes à l’API demandent un en-tête de clé d’API pour l’autorisation.
--header 'apiKey: <api-key>'
Obtenir une clé d’API
Exemple de requête à l’API avec l’utilisateur par défaut « xormon »
curl --request POST \
--url https://<xormon-ng_ip>/api/public/v1/auth \
--header 'Content-Type: application/json' \
--data '{"username": "xormon", "password": "xormon"}'
Exemple de réponse
{
"statusCode": 200,
"data": {
"apiKey": "0ac125069c6da17f7801c7ac70784efe",
"expiration": "2024-08-03T09:29:19.896Z"
}
}
Exemple d’en-tête d’authentification pour les appels suivants à l’API
--header 'apiKey: 0ac125069c6da17f7801c7ac70784efe'
Liste des équipements
Obtenir les identifiants, les noms, la classe et le type de matériel des équipements.
Requête à l’API
curl --request GET \ --url https://<xormon-ng_ip>/api/public/v1/architecture/devices \ --header 'apiKey: 0ac125069c6da17f7801c7ac70784efe'
Exemple de réponse
{
"statusCode": 200,
"data": [
{
"item_id": "vmware_8df25c4a-9e09-444a-999b-ead34a7d7e49_17",
"label": "vCenter",
"hw_type": "vmware",
"class": "virtualization",
"subsystem": "vcenter"
},
{
"item_id": "d3a841b6-9af4-46e7-a931-03f9c293f9ec",
"label": "Lenovo",
"hw_type": "eseries",
"class": "storage",
"subsystem": "device"
},
{
"item_id": "9c2d8d68-dbfa-4ee3-af10-9ea50f18333c",
"label": "Cisco",
"hw_type": "sancisco",
"class": "san",
"subsystem": "device"
}
]
}
Configuration d’un équipement
Obtenir les données de configuration détaillées d’un équipement
Requête à l’API
curl --request GET \ --url https://<xormon-ng_ip>/api/public/v1/hostcfg \ --header 'apiKey: 0ac125069c6da17f7801c7ac70784efe'
Exemple de réponse
{
"statusCode": 200,
"data": [
{
"hostcfg_id": "2ec6db74-ff9f-48ce-894f-8e6e7b0fa2b3",
"label": "vCenter",
"hw_type": "vmware",
"disabled": false,
"target": false,
"ignore_health_status": false,
"ignore_health_status_reason": null,
"data": {
"host": "192.168.0.1",
"port": 443,
"created": 1717012589051,
"updated": null,
"password": null,
"username": "[email protected]",
"description": "vCenter",
"managementUrl": "https://192.168.0.1/ui"
},
"createdAt": "2024-05-29T19:56:30.465Z",
"updatedAt": "2024-05-29T19:56:30.465Z",
"hw_type_label": "VMware",
"limited": false
},
{
"hostcfg_id": "d3a841b6-9af4-46e7-a931-03f9c293f9ec",
"label": "Lenovo",
"hw_type": "eseries",
"disabled": false,
"target": false,
"ignore_health_status": false,
"ignore_health_status_reason": null,
"data": {
"device": "LENOVO__TS_DE_SERIES",
"apiHost": "192.168.0.2",
"apiPort": 8443,
"created": 1717012378784,
"updated": null,
"apiPassword": null,
"apiUsername": "monitor",
"description": "Lenovo DE 2000",
"managementUrl": "https://192.168.0.2:8443/"
},
"createdAt": "2024-05-29T19:53:00.328Z",
"updatedAt": "2024-05-29T19:53:00.328Z",
"hw_type_label": "E-series",
"limited": false
},
{
"hostcfg_id": "9c2d8d68-dbfa-4ee3-af10-9ea50f18333c",
"label": "Cisco",
"hw_type": "sancisco",
"disabled": false,
"target": false,
"ignore_health_status": false,
"ignore_health_status_reason": null,
"data": {
"device": "CISCO__CISCO",
"created": 1717012692179,
"updated": 1717012722960,
"snmpHost": "192.168.0.3",
"snmpPort": 161,
"description": "Cisco SAN switch Olomouc",
"snmpVersion": "2c",
"snmpSecLevel": "noAuthNoPriv",
"snmpCommunity": "public",
"snmpAuthProtocol": "SHA",
"snmpPrivProtocol": "AES"
},
"createdAt": "2024-05-29T19:58:13.586Z",
"updatedAt": "2024-05-29T19:58:44.244Z",
"hw_type_label": "SAN Cisco",
"limited": false
}
]
}
Requête à l’API
curl --request GET \ --url https://<xormon-ng_ip>/api/public/v1/health_status \ --header 'apiKey: 0ac125069c6da17f7801c7ac70784efe'
Exemple de réponse
{
"statusCode": 200,
"data": [
{
"status": "OK",
"count": 2,
"devices": [
{
"class": "san",
"hw_type": "sancisco",
"hw_type_label": "SAN Cisco",
"label": "Cisco",
"item_id": "9c2d8d68-dbfa-4ee3-af10-9ea50f18333c",
"updatedAt": 1720101659744,
"note": "The operational status of the switch Cisco is Healthy/ok.",
"status": "ok",
"data": 0,
"connection": 0,
"ignored": false,
"ignore_reason": null,
"url": "/api/menu/v1/page/sancisco/health-status?item_id=9c2d8d68-dbfa-4ee3-af10-9ea50f18333c"
},
{
"class": "storage",
"hw_type": "eseries",
"hw_type_label": "E-series",
"label": "Lenovo",
"item_id": "d3a841b6-9af4-46e7-a931-03f9c293f9ec",
"updatedAt": 1720101604309,
"note": "Storage array status is optimal.",
"status": "ok",
"data": 0,
"connection": 0,
"ignored": false,
"ignore_reason": null,
"url": "/api/menu/v1/page/eseries/health-status?item_id=d3a841b6-9af4-46e7-a931-03f9c293f9ec"
},
]
},
{
"status": "WARNING",
"count": 0,
"devices": []
},
{
"status": "ERROR",
"count": 0,
"devices": []
},
{
"status": "UNKNOWN",
"count": 0,
"devices": []
},
{
"status": "IGNORED",
"count": 0,
"devices": []
}
]
}
Beaucoup d’API demandent une combinaison de Class, HW type, Subsystem et Metric.
Ces informations s’obtiennent par l'API architecture
Les équipements sont identifiés par leur Class et leur Hardware type.
Un équipement se compose de Subsystems.
Un subsystem prend en charge un jeu précis de metrics de performance.
Device Class
Correspond au menu principal de XorMon
Requête à l’API
Obtenir la liste des classes
curl --request GET \ --url https://<xormon-ng_ip>/api/public/v1/architecture/classes \ --header 'apiKey: 0ac125069c6da17f7801c7ac70784efe'
Exemple de réponse
{
"statusCode": 200,
"data": [
{
"label": "Server",
"class": "virtualization",
"active": true
},
{
"label": "Storage",
"class": "storage",
"active": true
},
{
"label": "SAN",
"class": "san",
"active": true
},
...
]
}
HW Types
Type d’équipement précis au sein de la Class
Requête à l’API
GET https://<xormon-ng_ip>/api/public/v1/architecture/class/<class>/hw_types
Exemple : obtenir la liste des HW types de stockage
curl --request GET \ --url https://<xormon-ng_ip>/api/public/v1/architecture/class/storage/hw_types \ --header 'apiKey: 0ac125069c6da17f7801c7ac70784efe'
Exemple de réponse
{
"statusCode": 200,
"data": [
{
"class": "storage",
"hw_type": "eseries",
"label": "E-series"
},
{
"class": "storage",
"hw_type": "vmax",
"label": "EMC VMAX/PowerMAX"
},
{
"class": "storage",
"hw_type": "swiz",
"label": "Storwize"
},
...
]
}
Subsystems
Chaque type d’équipement a sa liste de subsystems pris en charge
Exemple :
Requête à l’API
GET https://<xormon-ng_ip>/api/public/v1/architecture/class/<class>/hw_type/<hw_type>/subsystems
Exemple : obtenir la liste des subsystems des Lenovo E-series
curl --request GET \ --url https://<xormon-ng_ip>/api/public/v1/architecture/class/storage/hw_type/eseries/subsystems \ --header 'apiKey: 0ac125069c6da17f7801c7ac70784efe'
Exemple de réponse
{
"statusCode": 200,
"data": [
{
"label": "Node",
"subsystem": "node"
},
{
"label": "Pool",
"subsystem": "pool"
},
{
"label": "Volume",
"subsystem": "volume"
},
...
]
}
Métriques de performance
Chaque subsystem d’équipement prend en charge un jeu précis de métriques de performance.
Exemple :
Requête à l’API
GET https://<xormon-ng_ip>/api/public/v1/architecture/class/<class>/hw_type/<hw_type>/subsystem/<subsystem>/metrics
Exemple : obtenir la liste des métriques de pool des Lenovo E-series
curl --request GET \ --url https://<xormon-ng_ip>/api/public/v1/architecture/class/storage/hw_type/eseries/subsystem/pool/metrics \ --header 'apiKey: 0ac125069c6da17f7801c7ac70784efe'
Exemple de réponse
{
"statusCode": 200,
"data": [
{
"metric": "io_rate",
"label": "IO",
"shortcut": "IOPS",
"unit": "IOPS"
},
{
"metric": "data_rate",
"label": "Data",
"shortcut": "B/s",
"unit": "bytes_per_second"
},
{
"metric": "resp_t",
"label": "Latency",
"shortcut": "ms",
"unit": "millisecond"
},
...
]
}
Rechercher des éléments précis dans la base de XorMon et obtenir leurs identifiants.
Requête à l’API
GET https://<xormon-ng_ip>/api/public/v1/architecture/search
Paramètres de recherche
Exemple
Nous disposons déjà des informations nécessaires, tirées des exemples précédents :
Exemple de requête
curl --request GET \ --url 'https://<xormon-ng_ip>/api/public/v1/architecture/search?subsystem=volume&hw_type=eseries&class=storage&parents=d3a841b6-9af4-46e7-a931-03f9c293f9ec&search=san' \ --header 'apiKey: 0ac125069c6da17f7801c7ac70784efe'
Exemple de réponse
{
"statusCode": 200,
"data": {
"metadata": {
"start": 0,
"end": 49,
"max": 3,
"page": 0
},
"items": [
{
"label": "SAN-lenovo-ds01",
"item_id": "020000006D039EA00010E81F0000020A5FCE1AAA",
"hw_type": "eseries",
"class": "storage",
"subsystem": "volume"
},
{
"label": "SAN-lenovo-ds02",
"item_id": "020000006D039EA00010EEE3000002145FCE19E2",
"hw_type": "eseries",
"class": "storage",
"subsystem": "volume"
},
{
"label": "SAN-lenovo-ds03",
"item_id": "020000006D039EA00010E81F0000029E6225BB82",
"hw_type": "eseries",
"class": "storage",
"subsystem": "volume"
},
{
"label": "SAN-lenovo-ssd01",
"item_id": "020000006D039EA00010EEE30000030C630340E9",
"hw_type": "eseries",
"class": "storage",
"subsystem": "volume"
}
]
}
}
Exporter une plage de données de performance choisies depuis la base de XorMon, pour des identifiants d’éléments précis.
API
POST https://<xormon-ng_ip>/api/public/v1/exporter/timeseries
Données de la requête (format JSON)
Exemple
Nous disposons déjà des informations nécessaires, tirées des exemples précédents :
Convertir les dates de début et de fin en horodatage UNIX
date -d "07/01/2024 13:00 UTC" +%s 1719838800 date -d "07/01/2024 13:30 UTC" +%s 1719840600
Exemple de requête
curl --request POST \
--url https://<xormon-ng_ip>/api/public/v1/exporter/timeseries \
--header 'Content-Type: application/json' \
--header 'apiKey: 0ac125069c6da17f7801c7ac70784efe' \
--data '{
"start": 1719838800,
"end": 1719840600,
"metric": [ "io_rate", "data_rate", "resp_t" ],
"uuids": [
"020000006D039EA00010E81F0000020A5FCE1AAA",
"020000006D039EA00010EEE3000002145FCE19E2",
"020000006D039EA00010E81F0000029E6225BB82",
"020000006D039EA00010EEE30000030C630340E9"
],
"format": "json"
}'
Exemple de réponse
{
"metadata": {
"total": 4,
"interval": 1
},
"items": [
{
"item_id": "020000006D039EA00010E81F0000029E6225BB82",
"label": "SAN-lenovo-ds03",
"metric": "io_rate [IOPS]",
"timeseries": {
"2024-07-01T13:00:00.000Z": 232.38461303710938,
"2024-07-01T13:05:00.000Z": 276.1600036621094,
"2024-07-01T13:10:00.000Z": 214.57284545898438,
"2024-07-01T13:15:00.000Z": 218.8657684326172,
"2024-07-01T13:20:00.000Z": 214.93333435058594,
"2024-07-01T13:25:00.000Z": 206.18272399902344
}
},
{
"item_id": "020000006D039EA00010E81F0000029E6225BB82",
"label": "SAN-lenovo-ds03",
"metric": "data_rate [B/s]",
"timeseries": {
"2024-07-01T13:00:00.000Z": 2641139.5,
"2024-07-01T13:05:00.000Z": 3351624.25,
"2024-07-01T13:10:00.000Z": 3363234.25,
"2024-07-01T13:15:00.000Z": 2864389,
"2024-07-01T13:20:00.000Z": 2528645.75,
"2024-07-01T13:25:00.000Z": 2779344
}
},
{
"item_id": "020000006D039EA00010E81F0000029E6225BB82",
"label": "SAN-lenovo-ds03",
"metric": "resp_t [ms]",
"timeseries": {
"2024-07-01T13:00:00.000Z": 1.0149426460266113,
"2024-07-01T13:05:00.000Z": 0.5939497351646423,
"2024-07-01T13:10:00.000Z": 0.48667657375335693,
"2024-07-01T13:15:00.000Z": 0.3136793076992035,
"2024-07-01T13:20:00.000Z": 0.7482983469963074,
"2024-07-01T13:25:00.000Z": 0.32446905970573425
}
},
{
"item_id": "020000006D039EA00010E81F0000020A5FCE1AAA",
"label": "SAN-lenovo-ds01",
"metric": "io_rate [IOPS]",
"timeseries": {
"2024-07-01T13:00:00.000Z": 222.15049743652344,
"2024-07-01T13:05:00.000Z": 226.49000549316406,
"2024-07-01T13:10:00.000Z": 204.61920166015625,
"2024-07-01T13:15:00.000Z": 201.6409454345703,
"2024-07-01T13:20:00.000Z": 217.57333374023438,
"2024-07-01T13:25:00.000Z": 200.1627960205078
}
},
{
"item_id": "020000006D039EA00010E81F0000020A5FCE1AAA",
"label": "SAN-lenovo-ds01",
"metric": "data_rate [B/s]",
"timeseries": {
"2024-07-01T13:00:00.000Z": 6806658.5,
"2024-07-01T13:05:00.000Z": 7034839,
"2024-07-01T13:10:00.000Z": 6663482,
"2024-07-01T13:15:00.000Z": 6613202.5,
"2024-07-01T13:20:00.000Z": 6643795.5,
"2024-07-01T13:25:00.000Z": 6535284.5
}
},
{
"item_id": "020000006D039EA00010E81F0000020A5FCE1AAA",
"label": "SAN-lenovo-ds01",
"metric": "resp_t [ms]",
"timeseries": {
"2024-07-01T13:00:00.000Z": 1.5638819932937622,
"2024-07-01T13:05:00.000Z": 1.5805467367172241,
"2024-07-01T13:10:00.000Z": 1.1813870668411255,
"2024-07-01T13:15:00.000Z": 0.9557042121887207,
"2024-07-01T13:20:00.000Z": 1.0944472551345825,
"2024-07-01T13:25:00.000Z": 1.0231940746307373
}
},
...
]
}