Conseils de création de requêtes d'API Generic pour les graphiques des tableaux de bord

Les conseils pour vous aider à créer plus facilement des requêtes de l'API générique et des graphiques de tableau de bord couvrent les données requises pour des types de graphiques spécifiques, le mappage des résultats lorsque le JSON renvoyé n'est pas un tableau, et les titres dynamiques.

Format de données

Les API qui sont appelées doivent renvoyer des données dans un format JSON spécifique pour que QRadar® Pulse puisse lire les données. Les API renvoient un tableau JSON (lorsqu'il y a plusieurs résultats) ou un objet JSON (alors qu'il n'y a qu'un seul résultat). Les objets JSON retournés sont convertis en un tableau JSON contenant un élément.

La plupart des API IBM® QRadar renvoient des données dans un format qu' QRadar Pulse peut traiter. D'autres API, telles que les API d'application, peuvent vous obliger à utiliser le mappage de résultats QRadar Pulse pour extraire une clé spécifique de l'objet JSON renvoyé.

Données requises pour les graphiques tabulaires

Pour les graphiques tabulaires, les API doivent renvoyer un objet JSON (lorsqu'il n'y a qu'un seul résultat) ou un tableau JSON d'éléments représentant des données tabulaires. Par exemple :

[{
      "rowstring": "Thanksgiving eCard Emails Distributing Malware",
      "category": "Threat Activity",
      "relevance": "25%",
      "href": "/app/href"
    }, {
      "title": "PyXie - RAT Written In Python",
      "category": "Threat Activity",
      "relevance": "25%",
      "href": "/app/href"
    }, ...

Données requises pour les graphiques circulaires et les graphiques à barres à série unique

Pour les diagrammes à secteurs et les diagrammes à barres à série unique, les API doivent renvoyer un objet JSON (lorsqu'il n'y a qu'un seul résultat) ou un tableau JSON contenant au moins une étiquette et une mesure numérique. Par exemple :
[{
    "Country": "Europe",
    "Count": 97
  }, {
    "Country": "Middle East",
    "Count": 85
  }, {
    "Country": "North America",
    "Count": 83
  }, ...

Données requises pour les graphiques de série temporelle

Pour les graphiques de série temporelle, les API doivent renvoyer un objet JSON (lorsqu'il n'y a qu'un seul résultat) ou un tableau JSON contenant au moins une mesure basée sur le temps à l'aide d'un format de date ou de millisecondes valide, et d'un ou de plusieurs indicateurs numériques pour tracer sur l'axe des Y. Les données doivent être classées par ordre chronologique. Par exemple :

[{
    "date": "2020-02-18",
    "Phishing": 7.21,
    "C2": 82.67,
    "Malware": 272.05,
    "EarlyWarning": 448.32
  }, {
    "date": "2020-02-19",
    "Phishing": 7.47,
    "C2": 94.14,
    "Malware": 121.84,
    "EarlyWarning": 665.33
  }, {
    "date": "2020-02-20",
    "Phishing": 8.05,
    "C2": 92.35,
    "Malware": 120.71,
    "EarlyWarning": 736.9
  }, ...

Données requises pour les graphiques géographiques à nuage de points

Les graphiques géographiques à nuage de points nécessitent un objet JSON sous forme de chaîne (c'est-à-dire un objet converti à l'aide de la fonction JSON.stringify() JavaScript ) contenant une clé geo_json avec des coordonnées et une métrique numérique. Par exemple :

[{
    "sourceIP": "81.12.213.121",
    "geoSource": "{\"geo_json\":{\"coordinates\":[44.4354,26.1033],\"type\":\"Point\"}}",
    "geoDest": "{\"geo_json\":{\"coordinates\":[1.0,38.0],\"type\":\"Point\"}}",
    "eventCount": 50
  }, {
    "sourceIP": "59.154.60.0",
    "geoSource": "{\"geo_json\":{\"coordinates\":[-33.494,143.2104],\"type\":\"Point\"}}",
    "geoDest": "{\"geo_json\":{\"coordinates\":[53.3472,-6.2439],\"type\":\"Point\"}}",
    "eventCount": 60
  }, { ...

Données requises pour les graphiques géographiques choroplèthes

Les graphiques géographiques Choropleth nécessitent un objet JSON sous forme de chaîne (c'est-à-dire un objet converti à l'aide de la fonction JSON.stringify() JavaScript ) contenant une clé country avec le nom de pays / région ou le code ISO-3 du pays / région et une métrique numérique. Par exemple :

[{
    "sourceIP": "81.12.213.121",
    "geoCountry": "{\"country\":{\"confidence\":null,\"name\":\"Romania\",\"iso_code\":\"ROU\",\"geo_id\":798549}}",
    "eventCount": 50
  }, {
    "sourceIP": "59.154.60.0",
    "geoCountry": "{\"country\":{\"confidence\":null,\"name\":\"Australia\",\"iso_code\":\"AUS\",\"geo_id\":2077456}}",
    "eventCount": 60
  }, { ...

Mappage des résultats

Si l'objet racine dans le fichier JSON renvoyé n'est pas le tableau que vous souhaitez tracer, utilisez la zone Mappage des résultats pour définir la clé contenant les données pertinentes à tracer.

Le mappage des résultats utilise l'opérateur JSON dot (.) pour parcourir le document, en partant du noeud racine. Par exemple, dans l'objet JSON suivant, les données pertinentes se trouvent sous la clé items , qui se trouve sous le noeud racine table . Un mappage table.items est requis pour que QRadar Pulse lise le tableau items et ignore toutes les autres clés:

{
  "table": {
    "title": "Top 5 most relevant threats",
    "columns": [{
      "title": "Threat",
      "key": "title",
      "subkey": "category",
      "width": 75
    }, {
      "title": "X-Force Threat Score",
      "key": "relevance",
      "width": 0
    }],
    "items": [{
      "title": "Thanksgiving eCard Emails Distributing Malware",
      "category": "Threat Activity",
      "relevance": "25%",
      "href": "/app/href"
    }, {
      "title": "PyXie - RAT Written In Python",
      "category": "Threat Activity",
      "relevance": "25%",
      "href": "/app/href"
    }, { ...

Si l'objet JSON renvoyé est lui-même un tableau, comme c'est le cas pour la plupart des API QRadar par défaut, aucun mappage n'est nécessaire. Mais avec les applications QRadar , le format JSON renvoyé peut être différent.

Titre dynamique

Vous pouvez remplacer un nom de vue à l'aide d'un titre dynamique qui décrit l'état en cours des données. Par exemple, un graphique est intitulé "World Malicious Activity: < nom_menace>", où le nom de la menace change au fil du temps. Les titres dynamiques requièrent une clé title avec le nom de titre dynamique, comme illustré dans l'exemple suivant :

{
  "title": "Worldwide Malicious Activity: emotet",
  "items": [{
    "sourceIP": "81.12.213.121",
    "geoSource": "{\"geo_json\":{\"coordinates\":[44.4354,26.1033],\"type\":\"Point\"}}",
    "geoDest": "{\"geo_json\":{\"coordinates\":[1.0,38.0],\"type\":\"Point\"}}",
    "geoCountry": "{\"country\":{\"confidence\":null,\"name\":\"Romania\",\"iso_code\":\"ROU\",\"geo_id\":798549}}",
    "eventCount": 50
  }, { ...

Si la clé title se trouve sous le nœud racine, utilisez la zone Mappage de titre. Le mappage du titre utilise l'opérateur JSON dot (.) pour parcourir le document, en partant du noeud racine. Par exemple, si la clé title se trouve sous un nœud racine table, vous devez spécifier un mappage table.title.