Suggerimenti per la creazione di query di API Generic per i grafici di dashboard
Suggerimenti per aiutare a creare query di API Generic e grafici di dashboard più facilmente riguardano i requisiti dei dati per specifici tipi di grafico, la mappatura dei risultati per quando il JSON restituito non è una schiera, e i titoli dinamici.
Formato dei dati
Le API richiamate devono restituire i dati in un formato JSON specifico per QRadar® Pulse per poter leggere i dati. Le API restituiscono un array JSON (quando ci sono più risultati) o un oggetto JSON (quando c'è un solo risultato). Gli oggetti JSON restituiti vengono convertiti in un array JSON contenente un elemento.
La maggior parte delle API IBM® QRadar restituiscono i dati in un formato che QRadar Pulse può elaborare. Altre API, come le API dell'applicazione, potrebbero richiedere l'utilizzo dell'associazione dei risultati QRadar Pulse per estrarre una chiave specifica dell'oggetto JSON restituito.
Requisiti dati per i grafici tabellari
Per i grafici tabellari, le API devono restituire un oggetto JSON (quando c'è un solo risultato) o un array JSON di elementi che rappresentano i dati tabellari. Ad esempio:
[{
"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"
}, ...
Requisiti dati per i grafici a torta e i grafici a barre di serie singola
[{
"Country": "Europe",
"Count": 97
}, {
"Country": "Middle East",
"Count": 85
}, {
"Country": "North America",
"Count": 83
}, ...Requisiti dati per i grafici di serie temporali
Per i grafici di serie temporali, le API devono restituire un oggetto JSON (quando c'è un solo risultato) o un array JSON che contiene almeno una metrica basata sul tempo utilizzando un formato data o millisecondi valido, e una o molte metriche numeriche da tracciare sull'asse Y. I dati devono essere ordinati per tempo. Ad esempio:
[{
"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
}, ...
Requisiti dati per le classificazioni geografiche di dispersione
I grafici geografici a dispersione richiedono un oggetto JSON con stringa (ovvero, un oggetto convertito utilizzando la funzione JSON.stringify() JavaScript ) contenente una chiave geo_json con coordinate e una metrica numerica. Ad esempio:
[{
"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
}, { ...
Requisiti dati per le carte geografiche coroplete
I grafici geografici a coropleta richiedono un oggetto JSON in stringa (ossia, un oggetto convertito utilizzando la funzione JSON.stringify() JavaScript ) contenente una chiave country con il nome paese / regione o il codice ISO-3 del paese / regione e una metrica numerica. Ad esempio:
[{
"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
}, { ...
Associazione risultati
Se l'oggetto principale nel JSON restituito non è l'array che si desidera tracciare, utilizzare il campo Associazione dei risultati per definire quale chiave contiene i dati rilevanti che si desidera tracciare.
La mappatura dei risultati utilizza l'operatore JSON dot (.) per attraversare il documento, a partire dal nodo root. Ad esempio, nel seguente oggetto JSON, i dati pertinenti si trovano nella chiave items , che si trova nel nodo root table . Per QRadar Pulse è richiesta un'associazione table.items per leggere l'array items e ignorare tutte le altre chiavi:
{
"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"
}, { ...
Se l'oggetto JSON restituito è un array, come nel caso della maggior parte delle API QRadar predefinite, non è necessaria alcuna associazione. Ma con le applicazioni QRadar , il JSON restituito potrebbe avere un formato diverso.
Titolo dinamico
È possibile sovrascrivere un nome vista utilizzando un titolo dinamico che descrive lo stato corrente dei dati. Ad esempio, un grafico è intitolato "World Malicious Activity: < threat _name>", in cui il nome della minaccia cambia nel tempo. I titoli dinamici richiedono una chiave title con il nome del titolo dinamico, come mostrato nel seguente esempio:
{
"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
}, { ...
Se la chiave title si trova sotto il nodo root, utilizzare il campo Associazione titolo . La mappatura del titolo utilizza l'operatore JSON dot (.) per attraversare il documento, a partire dal nodo root. Ad esempio, se la chiave title si trova in un nodo root table , specificare un'associazione table.title .