Tipps für die Erstellung von generischen AQL-Abfragen für Dashboard-Charts

Tipps zum einfacheren Erstellen von generischen API-Abfragen und Dashboard-Diagrammen umfassen Datenanforderungen für bestimmte Diagrammtypen, Ergebnismapping für den Fall, dass das zurückgegebene JSON kein Array ist, und dynamische Titel.

Datenformat

Die aufgerufenen APIs müssen Daten in einem bestimmten JSON-Format zurückgeben, damit QRadar® Pulse die Daten lesen kann. APIs geben entweder ein JSON-Array (bei mehreren Ergebnissen) oder ein JSON-Objekt (bei nur einem Ergebnis) zurück. Zurückgegebene JSON-Objekte werden in ein JSON-Array konvertiert, das ein Element enthält.

Die meisten IBM® QRadar -APIs geben Daten in einem Format zurück, das QRadar Pulse verarbeiten kann. Andere APIs, wie z. B. App-APIs, erfordern möglicherweise die Verwendung der QRadar Pulse -Ergebniszuordnung, um einen bestimmten Schlüssel des zurückgegebenen JSON-Objekts zu extrahieren.

Datenanforderungen für Tabellendiagramme

Bei tabellarischen Diagrammen müssen APIs entweder ein JSON-Objekt (wenn nur ein Ergebnis vorhanden ist) oder ein JSON-Array von Elementen zurückgeben, die Tabellendaten darstellen. Beispiel:

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

Datenanforderungen für Kreisdiagramme und einreihige Balkendiagramme

Bei Kreisdiagrammen und Einzelserienbalkendiagrammen müssen APIs entweder ein JSON-Objekt (wenn nur ein Ergebnis vorhanden ist) oder ein JSON-Array zurückgeben, das mindestens eine Beschriftung und eine numerische Metrik enthält. Beispiel:
[{
    "Country": "Europe",
    "Count": 97
  }, {
    "Country": "Middle East",
    "Count": 85
  }, {
    "Country": "North America",
    "Count": 83
  }, ...

Datenanforderungen für Zeitreihendiagramme

Bei Zeitreihendiagrammen müssen APIs entweder ein JSON-Objekt (wenn nur ein Ergebnis vorhanden ist) oder ein JSON-Array zurückgeben, das mindestens eine zeitbasierte Metrik mit einem gültigen Datums-oder Millisekundenformat enthält, sowie eine oder mehrere numerische Metriken, die auf der Y-Achse dargestellt werden. Die Daten müssen nach Zeit geordnet sein. Beispiel:

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

Datenanforderungen für geografische Streudiagramme

Geografische Streudiagramme erfordern ein in Zeichenfolgen konvertiertes JSON-Objekt (d. h. ein Objekt, das mithilfe der JSON.stringify() JavaScript -Funktion konvertiert wird), das einen geo_json -Schlüssel mit Koordinaten und eine numerische Metrik enthält. Beispiel:

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

Datenanforderungen für geografische Choropleth-Diagramme

Für geografische Choropleth-Diagramme ist ein in Zeichenfolgen konvertiertes JSON-Objekt (d. h. ein Objekt, das mit der JSON.stringify() JavaScript -Funktion konvertiert wird) erforderlich, das einen country -Schlüssel mit dem Namen des Landes/der Region oder dem ISO-3 -Code des Landes/der Region und eine numerische Metrik enthält. Beispiel:

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

Ergebniszuordnung

Wenn das Stammobjekt in der zurückgegebenen JSON nicht das Array ist, das Sie grafisch darstellen möchten, verwenden Sie das Feld Ergebniszuordnung, um zu definieren, welcher Schlüssel die relevanten Daten enthält, die Sie grafisch darstellen möchten.

Die Ergebniszuordnung verwendet den JSON-Punktoperator (.), um das Dokument zu durchlaufen, beginnend mit dem Stammknoten. Im folgenden JSON-Objekt befinden sich die relevanten Daten beispielsweise unter dem Schlüssel items , der sich unter dem Stammknoten table befindet. Eine table.items -Zuordnung ist erforderlich, damit QRadar Pulse das Array items lesen und alle anderen Schlüssel ignorieren kann:

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

Wenn das zurückgegebene JSON-Objekt selbst ein Array ist, wie dies bei den meisten Standard- QRadar -APIs der Fall ist, ist keine Zuordnung erforderlich. Bei QRadar -Apps kann die zurückgegebene JSON jedoch ein anderes Format haben.

Dynamischer Titel

Sie können einen Ansichtsnamen überschreiben, indem Sie einen dynamischen Titel verwenden, der den aktuellen Status der Daten beschreibt. Beispiel: Ein Diagramm mit dem Titel "World Malicious Activity < Bedrohungsname>", in dem sich der Name der Bedrohung im Laufe der Zeit ändert. Dynamische Titel erfordern einen title -Schlüssel mit dem Namen des dynamischen Titels, wie im folgenden Beispiel gezeigt:

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

Wenn sich der Schlüssel title unter dem Stammknoten befindet, verwenden Sie das Feld Titelzuordnung . Die Titelzuordnung verwendet den JSON-Punktoperator (.), um das Dokument zu durchlaufen, beginnend mit dem Stammknoten. Wenn sich der Schlüssel title beispielsweise unter einem table -Stammknoten befindet, geben Sie eine table.title -Zuordnung an.