Consejos para crear consultas de API genérica para diagramas de paneles de control

Los consejos que le ayudarán a crear consultas de API genérica y gráficos de paneles de control más fácilmente cubren los requisitos de datos para tipos de gráficos específicos, la correlación de resultados cuando el JSON que se devuelve no es una matriz y títulos dinámicos.

Formato de datos

Las API a las que se llama deben devolver datos en un formato JSON específico para que el panel de control pueda leer los datos. Las API devuelven una matriz JSON (cuando hay varios resultados) o un objeto JSON (cuando sólo hay un resultado). Los objetos JSON devueltos se convierten en una matriz JSON que contiene un elemento.

La mayoría de las API de IBM QRadar devuelven datos en un formato que el panel de control puede procesar. Otras API, como las API de aplicación, pueden requerir que utilice la correlación de resultados del panel de control para extraer una clave específica del objeto JSON devuelto.

Requisitos de datos para gráficos de tabla

Para gráficos tabulares, las API deben devolver un objeto JSON (cuando sólo hay un resultado) o una matriz JSON de elementos que representan datos tabulares. Por ejemplo:

[{
      "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"
    }, ...

Requisitos de datos para gráficos circulares y gráficos de barras de una sola serie

Para los gráficos circulares y los gráficos de barras de serie única, las API deben devolver un objeto JSON (cuando sólo hay un resultado) o una matriz JSON que contenga al menos una etiqueta y una métrica numérica. Por ejemplo:
[{
    "Country": "Europe",
    "Count": 97
  }, {
    "Country": "Middle East",
    "Count": 85
  }, {
    "Country": "North America",
    "Count": 83
  }, ...

Requisitos de datos para gráficos de series temporales

Para los gráficos de serie temporal, las API deben devolver un objeto JSON (cuando sólo hay un resultado) o una matriz JSON que contenga al menos una métrica basada en tiempo utilizando un formato de fecha o milisegundos válido, y una o varias métricas numéricas para trazar en el eje Y. Los datos deben estar ordenados por tiempo. Por ejemplo:

[{
    "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
  }, ...

Requisitos de datos para gráficos geográficos de dispersión

Los gráficos geográficos de dispersión requieren un objeto JSON en serie (es decir, un objeto que se convierte utilizando la función JSON.stringify() JavaScript ) que contiene una clave geo_json con coordenadas y una métrica numérica. Por ejemplo:

[{
    "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
  }, { ...

Requisitos de datos para gráficos geográficos coropléticos

Los gráficos geográficos coropletas requieren un objeto JSON en serie (es decir, un objeto que se convierte utilizando la función JSON.stringify() JavaScript ) que contiene una clave country con el nombre de país/región o el código ISO-3 del país/región y una métrica numérica. Por ejemplo:

[{
    "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
  }, { ...

Correlación de resultados

Si el objeto raíz del JSON devuelto no es la matriz que desea trazar, utilice el campo Correlación de resultados para definir qué clave contiene los datos relevantes que desea trazar.

La correlación de resultados utiliza el operador punto (.) JSON para recorrer el documento, empezando por el nodo raíz. Por ejemplo, en el siguiente objeto JSON, los datos relevantes están bajo la clave items, la cual está bajo el nodo raíz table. Se necesita una correlación table.items para que el panel de control lea la matriz items e ignore todas las demás claves:

{
  "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 el propio objeto JSON devuelto es una matriz, como es el caso de la mayoría de las API de QRadar predeterminadas, no es necesaria ninguna correlación. Pero con las aplicaciones QRadar , el JSON devuelto puede tener un formato diferente.

Título dinámico

Puede alterar temporalmente un nombre de vista utilizando un título dinámico que describe el estado actual de los datos. Por ejemplo, un gráfico se titula "Actividad maliciosa mundial: < nombre_amenaza>", donde el nombre de amenaza cambia con el tiempo. Los títulos dinámicos requieren una clave title con el nombre del título dinámico, tal como se muestra en el siguiente ejemplo:

{
  "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 clave title está bajo el nodo raíz, utilice el campo Correlación de títulos. La correlación de títulos utiliza el operador punto (.) JSON para recorrer el documento, empezando por el nodo raíz. Por ejemplo, si la clave title está bajo un nodo raíz table, debería especificar una correlación table.title.