QRadar Pulse の時系列グラフ

一見すると、 QRadar® Pulse でリレーショナル・データから時系列グラフを作成するのが難しい場合があります。 AQL 照会によって返されるデータの量は扱いづらいことがありますが、背景的知識と綿密な計画により、関連性が高く、意味のある時系列グラフを作成できます。

注: 時系列グラフについて読んだ後、 過去 10 分間で最もアクティブな上位 5 件のデバイスの追跡の手順に従って動的時系列グラフを作成します。 QRadar Pulse V2.1.4 以降では、時系列グラフに、追跡するデバイスが分からない場合や、時系列グラフを正しく機能させるのが難しい場合に役立つ動的系列オプションがあります。 このオプションにより、自動的に系列が検出され、時系列グラフに個別の行として表示されます。
starttime によってメトリックを順序付けすると、次の AQL 照会のように時系列が生成されますが、返されるデータの量は扱いづらく、理解するのも難しくなることがあります。
select starttime as 'Start Time',
SUM(eventcount) as 'Event Count (Sum)'
from events
where eventcount <> NULL
GROUP BY starttime
order by starttime
LAST 60 minutes
返されるデータの量により、あまり情報を提供しない、ノイズが多いグラフが生成されることがあります。 イベントの開始時刻が定期的な間隔でないために、データ・セットにギャップが生じることがあります。
図 1. データの量が多すぎるとノイズが多い結果となる
大量のデータを含むノイズが多いグラフ

時系列照会の間隔の作成

最初のステップでは、データ分析に使用する間隔のタイプを決定します。 毎秒など、短い間隔でデータを調べますか? あるいは、毎分や毎時など、より長い間隔で調べますか? メトリックが計算されるように間隔ごとにデータ・ポイントをグループ化する必要があるため、この決定は重要です。

オリジナルの照会を使用して、以下のいずれかの手法でデータをグループ化することができます。
  • GROUP BY 節を次のように使用して間隔を作成する。GROUP BY starttime/60000starttime はミリ秒単位で表示されるため、60,000 で除算すると (60 秒 x 1000 ミリ秒)、60 秒 (1 分) のグループ、つまり間隔を作成することになります。
  • ORDER BY 節を変更して、集約 sTime を使用する。
照会は以下のコードに変更されます。
select starttime as 'sTime',
SUM(eventcount) as 'Event Count (Sum)'
from events
where eventcount > 0
GROUP BY starttime/60000
order by "sTime"
LAST 60 minutes
これで、データは見やすくなり、1 つのデータ・ポイントは 1 分ごとに発生するようになります。 間隔が適切に定義されたため、いくつかの戦略を使用して、より分かりやすい時系列形式にデータをフォーマット設定することができます。
図 2. 間隔を適切に定義するとデータが見やすくなる
データは見やすくなったが改良が必要

系列を作成するための列への行のピボット操作

時系列グラフを作成する 1 つの方法は、 パルスで系列を直接表す列にデータ行をピボットすることです。 例えば、ユース・ケースで 1 分間隔で特定のデバイスのイベントをカウントする場合、グラフでプロットする系列ごとに別個の条件付き集約を作成する必要があります。
SUM(IF LOGSOURCETYPENAME(devicetype) = 'System Notification' THEN 1.0 ELSE 0.0) 
as system_notification
SUM(IF LOGSOURCETYPENAME(devicetype) = 'SIM Audit' THEN 1.0 ELSE 0.0) as sim_audit
照会全体は、次の例のようになります。
SELECT starttime/(1000*60) as 'minute',
(minute * (1000*60)) as 'stime',
SUM(IF LOGSOURCETYPENAME(devicetype) = 'System Notification' THEN 1.0 ELSE 0.0) 
as system_notification,
SUM(IF LOGSOURCETYPENAME(devicetype) = 'SIM Audit' THEN 1.0 ELSE 0.0) as sim_audit
FROM events
WHERE devicetype <> NULL
GROUP BY minute
ORDER BY stime asc
LAST 10 minutes
この照会は、 System Notification デバイスと SIM Audit デバイスの両方の行データを取得し、それらをグラフ上の系列に対応する別個の列にピボットします。
図3: 個別の列に返された結果
データ行を列にピボットする結果
次の画像は、行をピボット処理するためのビュー構成およびグラフ表示を示しています。
図 4. ビューおよびグラフ表示の構成
列へのデータ行の構成

この方法では、相当に効率的にリレーショナル・データを時系列データに変換できますが、目的のデータをあらかじめ理解しておく必要があります。

動的時系列の作成

目的のデバイスをあらかじめ理解していない場合や、過去 1 時間に最もアクティブであった上位 5 個のデバイスをグラフにしたい場合は、どうなるでしょうか。 QRadar Pulse V2.1.4で動的時系列を作成できます。 データの行を列にピボット処理するのではなく、2 番目の戦略では、2 次の GROUP BY 節 (この例では「device」) を使用して動的時系列を作成します。
SELECT starttime/(1000*60) as 'minute', 
MIN(starttime) as 'stime', 
eventcount as 'eventCount', devicetype as 'deviceType',
LOGSOURCETYPENAME(devicetype) as 'device', 
count(*) as 'total'
FROM events
WHERE deviceType IN (
    SELECT deviceType FROM (
        SELECT devicetype as 'deviceType', 
        count(*) as 'total'
        FROM events
        GROUP BY deviceType
        ORDER BY total DESC
        LIMIT 8
        LAST {Time_Span}
    )
) and devicetype not in (18,105,147,368)
GROUP BY minute, device
ORDER BY minute asc
LAST {Time_Span}
この照会で返される結果は次の画像のようになります。
図 5. デバイスについて返された結果
動的時系列のデータ結果

前の方法との違いは、データは列にピボット処理されず、2 次の GROUP BY 節のために時間の列に反復が含まれている点です。 動的時系列オプションを使用することで、 QRadar Pulse は、データを適切な時系列形式に分割します。 time (X 軸の場合はstime ) を含む列、 data (Y 軸の場合はtotal ) を含む列、および GROUP BY 節を含む列 ( deviceによって異なる系列を抽出するため) を選択します。

図 6. デバイスごとのデータの分割
動的時系列でのデバイスによるデータの分割

グラフは前の方法で作成されたものと同じように見えますが、基礎となる AQL 照会ははるかに動的なものです。 値が照会にハードコーディングされなくなっているため、時間とともにログ・ソースが変化すると、グラフは自動更新されます。

ただし、いくつかの注意点を考慮する必要があります。 データ行が列にピボット処理されないため、データのサイズははるかに大きくなり、デバイスの数に比例して増えます。 QRadar Pulse がデータを処理するため、データのサイズがブラウザーの全体的な反応性に悪影響を及ぼす可能性があります。 パフォーマンスの低下を防ぐために、 QRadar Pulse は、検出した最初の 20 個のデータ系列をレンダリングし、それ以降の系列を無視します。 WHERE 節を使用して、動的時系列で使用するデータ・セットの LIMIT および ORDER を行うことで、データのサイズを制限してください。 例えば、ユース・ケースで「'Health Metrics' を除き、過去 10 分間に最もアクティブであった上位 3 個のデバイスをカウントする」場合、以下の照会を作成します。
SELECT starttime/(1000*60) as 'minute', (minute * (1000*60)) as 'stime', LOGSOURCETYPENAME(devicetype) as 'device', count(*) as 'total'
FROM events
WHERE device IN (
    SELECT deviceList FROM (
        SELECT LOGSOURCETYPENAME(devicetype) as deviceList, count(*) as topDevices
        FROM events
        WHERE deviceList <> 'Health Metrics'
        GROUP BY deviceList
        ORDER BY topDevices DESC
        LIMIT 3
        LAST 10 minutes
    )
)
GROUP BY minute, device
ORDER BY stime asc
LAST 10 minutes
照会は効率的になり、レンダリングされた 3 個の系列が、選択された時間幅における上位 3 個のアクティブ・デバイスに対応するようになります。