summarize 演算子を使用する
count 演算子とそのバリエーションを使用すると、指定されたフィールドの計算結果を含む新しい列が作成されます。
以下の最初のステートメントからは、Activity 列値の唯一の一覧である列が 1 つが返されます。
2 番目のステートメントからは SecurityEvent 行の数が返されます。この行では、EventID が 4688 に等しく、行数が Process と Computer でグループ化されています。 by 句があるため、結果セットには Process、Computer、Count の 3 つの列が含まれます。
各クエリを個別に実行して、結果を確認します。
SecurityEvent | summarize by Activity
SecurityEvent
| where EventID == "4688"
| summarize count() by Process, Computer
以下の例は、summarize 演算子で使用される最も一般的でシンプルな集計関数の一部を示した一覧です。
関数 | 説明 |
---|---|
count()、countif() | 概要作成グループごとのレコード数を返します |
dcount()、dcountif() | 集計グループ内のスカラー式によって取得される個別の値の数の推定値を返します。 |
avg()、avgif() | グループ全体の Expr の平均を計算します。 |
max()、maxif() | グループ全体の最大値を返します。 |
min()、minif() | グループ全体の最小値を返します。 |
percentile() | Expr で定義された母集団の指定したランクに最も近いパーセンタイルの推定値を返します。 精度は、パーセンタイル リージョンの人口密度によって異なります。 |
stdev()、stdevif() | グループをサンプルと見なし、グループ全体の Expr の標準偏差を計算します。 |
sum()、sumif() | グループ全体の Expr の合計を計算します。 |
variance()、varianceif() | グループをサンプルと見なし、グループ全体の Expr の分散を計算します。 |
count 関数の例
集計関数列には、集計関数の前に "fieldname =" を含めることによって明示的に名前を付けることができます。
この KQL ステートメントからは、"cnt"、"AccountType"、"Computer" という 3 つの列が返されます。 "cnt" フィールド名は、既定の "count_" の名前に置換されます。
SecurityEvent
| where TimeGenerated > ago(1h)
| where EventID == 4624
| summarize cnt=count() by AccountType, Computer
<dcount> 関数の例
次の例では、一意の IP アドレスの数が返されます。
SecurityEvent
| summarize dcount(IpAddress)
実世界の例を見てみましょう
次のステートメントは、同じアカウントに対する複数のアプリケーション間での無効パスワード エラーを検出するルールです。
ResultDescription の where 演算子は、"無効なパスワード" を含む結果で結果セットをフィルター処理します。 次に、"summarize" ステートメントでアプリケーション名の個別のカウントを生成し、User と IP Address でグループ化します。 最後に、数が許容量を超えているかどうかを確認するために、作成された変数 (threshold) に対して確認が行われます。
let timeframe = 30d;
let threshold = 1;
SigninLogs
| where TimeGenerated >= ago(timeframe)
| where ResultDescription has "Invalid password"
| summarize applicationCount = dcount(AppDisplayName) by UserPrincipalName, IPAddress
| where applicationCount >= threshold