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

  • obtenir des informations sur les équipements configurés
  • retirer un équipement
  • obtenir l’état de santé d’un équipement
  • exporter les données de performance enregistrées dans la base de XorMon
  • Tags & Device Attributes

Fonctions prévues

  • ajouter un équipement
  • désactiver ou réactiver un équipement configuré

Exemples


L’API REST étape par étape

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

Authentification

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'

Obtenir les informations d’un équipement

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
    }
  ]
}

Obtenir l’état de santé d’un équipement

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": []
    }
  ]
}

Parcourir l’architecture de XorMon

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

  • Server
  • Storage
  • SAN
  • etc.

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

  • Virtualization : VMware, Nutanix, Proxmox, etc.
  • Storage : EMC PowerMAX, Lenovo E-Series, IBM Storwize, etc.
  • SAN : SAN Brocade, SAN CISCO, etc.
  • etc.

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 :

  • Class : Storage
  • HW Type : E-series (Lenovo E-series)
  • Subsystems : Node, Pool, Volume, etc.

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 :

  • Class : Storage
  • HW Type : E-series (Lenovo E-series)
  • Subsystem : Pool
  • Metrics : IO rate, Data rate, Latency, etc.

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

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

  • class : chaîne
  • hw_type : chaîne
  • subsystem : chaîne
  • parents : tableau de chaînes ; un ou plusieurs identifiants d’équipements parents
  • search : chaîne ; recherche une chaîne dans le libellé de l’élément (insensible à la casse)

Exemple

  • obtenir la liste des volumes d’une baie Lenovo E-series précise
  • ne chercher que les volumes contenant « san » dans le nom

Nous disposons déjà des informations nécessaires, tirées des exemples précédents :

  • class : 'storage'
  • hw_type : 'eseries'
  • subsystem : 'volume'
  • identifiant du parent : 'd3a841b6-9af4-46e7-a931-03f9c293f9ec'
  • search : 'san'

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 les données de performance

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)

  • start : nombre ; horodatage UNIX, en secondes
  • end : entier ; nombre ; horodatage UNIX, en secondes
  • metric : tableau de chaînes ; liste des métriques à inclure dans la réponse
  • uuids : tableau de chaînes ; liste des identifiants d’éléments à inclure dans la réponse
  • format : chaîne ; l’une de 'csv', 'xlsxs', 'json'

Exemple

  • obtenir IOPS, Data et Latency
  • obtenir les données de volumes précis (voir l’exemple précédent)
  • obtenir les données comprises entre
    • le 1er juillet 2024 à 13:00 UTC
    • le 1er juillet 2024 à 13:30 UTC

Nous disposons déjà des informations nécessaires, tirées des exemples précédents :

  • metrics : io_rate, data_rate, resp_t
  • uuids : 020000006D039EA00010E81F0000020A5FCE1AAA, 020000006D039EA00010EEE3000002145FCE19E2, 020000006D039EA00010E81F0000029E6225BB82, 020000006D039EA00010EEE30000030C630340E9

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
      }
    },
    ...
  ]
}