メインコンテンツまでスキップ
Sumo Logic Japanese

outliner

タイムスタンプの付いた一連の数値があるとすると、クエリで outlier operator を使用すれば、シーケンスの中で予想外と思われる値を識別でき、たとえば Scheduled Search のアラートや違反を識別できます。

そのために、outlier operator は数値フィールドの移動平均および標準偏差をトラッキングします。外れ値は、指定された期待値からの標準偏差のしきい値に基づいて特定されます。データ ポイントがしきい値を外れると、そのデータ ポイントは外れ値と見なされます。

構文

  • ...
    | timeslice <time_period> 
    | <aggregate operator> as <field> by _timeslice
    | outlier <field> [window=<#>, threshold=<#>, consecutive=<#>, direction=<+->]
  • ...
    | timeslice <time_period> 
    | <aggregate operator> by _timeslice, <field> 
    | outlier <_aggregate> by <field> [window=<#>, threshold=<#>, consecutive=<#>, direction=<+->]

 timeslice は必須です。

2 番目の構文例では「group by」句を使用して、フィールドの複数値の外れ値を検索しています。詳細は以下の例を参照してください。

次の表に、外れ値の結果に返されるフィールドを示します。

フィールド 説明
<field>_error <field> - 平均です。
<field>_lower 平均 - しきい値*標準偏差です。
<field>_upper 平均 + しきい値*標準偏差です。
<field>_indicator 0 または 1 です。データ ポイントが上下の境界を越えている場合は 1 に設定されます。移動平均からの指定標準偏差数を超えて観察されたデータは外れ値 (指標) です。
<field>_violation 0 または 1 です。指定数の連続した指標 (外れ値) がヒットした場合は 1 に設定されます。

キーワード引数でパラメータ (ウィンドウ、しきい値、連続、方向など) を設定することでオプションを設定できます。

キーワード引数 説明
window 平均と総和を計算するための最後のデータ ポイント数を設定します。デフォルトは 10 です。
threshold 違反を計算するための標準偏差数を設定します。デフォルトは 3.0 です。
consecutive 違反をトリガするために必要な連続した指標データ ポイント数を設定します。デフォルトは 1 です。
direction +-+、または - を使用して、違反をトリガする方向を指定します。
+- は正負の変動を使用します。これがデフォルトです。
    + は、正 (予想以上) の変動のみを使用します。
    - は、負 (予想未満) の変動のみを使用します。

たとえば、次のクエリは下記のパラメータを設定します。

... | outlier <field> window=5,threshold=3,consecutive=2,direction=+-

  • window=5 : 最後の 5 つのデータ ポイントを使用して平均と総和を計算します。
  • threshold=3 : +/- 3 の標準偏差を使用して違反を計算します。
  • consecutive=2 : 連続した指標データ ポイントが 2 個以上発生した場合にのみ検索結果に <field>_violation=1 を返して違反をトリガします。
  • direction=+- : 正負の変動を使用します。

ルール

  • outlier operator は、group by 集計関数 (count、min、max、sum 等) の後で使用しなければなりません。
  • オリジナル ターゲット フィールドは数値でなければなりません。
  • timeslice は必須です。

制限事項

  • クエリの最新の時間バケットのデータは不完全である可能性があるため、outlier では無視されます。その結果、<field>_violation が 1 に変化した時点でアラートをトリガするように設定されている場合、このアラートは、1 タイムスライス後でトリガされます。

IIS ログ

次のクエリは、過去 6 時間の IIS ログから外れ値を検索します。

_sourceCategory=IIS/Access
| parse regex "\d+-\d+-\d+ \d+:\d+:\d+ (?<server_ip>\S+) (?<method>\S+) (?<cs_uri_stem>/\S+?) \S+ \d+ (?<user>\S+) (?<client_ip>[\.\d]+) "
| parse regex "\d+ \d+ \d+ (?<response_time>\d+)$"
| timeslice 15m 
| max(response_time) as response_time by _timeslice
| outlier response_time window=5,threshold=3,consecutive=2,direction=+-

IIS

生成されるグラフでは、外れ値がピンクの三角形で示されています。

Apache ログ - 過去のサーバ エラー

次のクエリは、過去 3 時間の Apache ログから外れ値を検索します。

_sourceCategory=Apache/Access
| parse "HTTP/1.1\" * " as status_code
| where status_code matches "5*"
| timeslice 5m 
| count(status_code) as status_code by _timeslice
| outlier status_code window=5,threshold=3,consecutive=1,direction=+-

Apache

生成されるグラフでは、外れ値がピンクの三角形で示されています。

「group by」句を使用した _sourcehost の複数値の外れ値の検索

次のようなクエリも実行できます。

_sourceCategory=Apache/Access
| timeslice 1m
| count by _timeslice, _sourceHost
| outlier _count by _sourceHost

こうすることで、_sourceHost の各値について次のように別々に外れ値を分析できます。

group by

この例ではグラフではなく集計テーブルが生成されていますが、指標と違反のフィールドには、各 _sourceHost 処理が正確に反映されています。

外れ値のアラート

このクエリは、発生するエラーをカウントし、外れ値が検出された時点でアラートを送信します。外れ値が検出されると、<field_name>_violation は 1 に設定されます。次の例では、<field_name>_count です。リアルタイム アラートを作成して、1 件以上の結果が検索された時に通知を送信するように設定することで、外れ値でアラートをトリガできます。

"error"
| timeslice by 15m
| count as today by _timeslice
| compare timeshift -1d as vs_yesterday // create a delta field that represents the difference between historical and current data
| (today - today_vs_yesterday) as delta // use an Outlier to statistically monitor spikes or dips in the delta
| outlier delta
| where delta_violation = 1

マルチディメンション外れ値検出

outlier operator は、マルチディメンション (多時系列) 検出もサポートします。マルチディメンション外れ値検出は、すべてのエンティティ間の何らかの集計ではなく、各ユーザ、サーバ、アプリケーション機能、あるいは他の単一「エンティティ」の挙動をモニタリングしたい場合に便利です。

たとえば、ユーザによるログインの失敗を検出することができます。この場合、すべてのユーザによるログイン失敗の平均や合計の急上昇を見るのではなく、特定のユーザ アカウントで異常に多いログイン失敗を検出します。後者の情報は有益ですが、数百あるいは数千のユーザ (エンティティ) がログインする状況では、特定のユーザによるログイン失敗回数の急上昇は、「異常ではない」ログイン失敗回数のノイズの中に埋もれてしまい、見つけるのは困難です。

その他にも次のような例があります。

  • クラスタ内のすべてのノードについてページ障害、ディスク オペレーション、または CPU 利用を同時にトラッキングしている間に、異常を検出します。
  • すべてのワークステーションのパフォーマンスを、それぞれの外れ値レポートを作成することなく同時にモニタリングします。
  • アプリケーションの (すべてのユーザによるアップロード失敗の合計ではなく) 各ユーザによる画像のアップロード失敗をモニタリングします。

outlier operator を使用すると、マルチディメンション外れ値検出を簡単に作成できます。クエリの最後にby <ディメンション> を付加するだけです。

たとえば、次のクエリでは、多くの (_sourceHost ごとに 1 つの) 時系列を指定しています。

_sourceCategory=Apache/Access
| timeslice 1m
| count by _timeslice,_sourceHost
| outlier _count by _sourceHost

マルチディメンション時系列の未処理結果は、テーブル グラフに表示でき、現時点では他のグラフ オプションは利用できません。

次のテーブル グラフでは、_count_violation 列の 1 は、そのタイムスライスに対応するデータ ポイントが外れ値であることを示しています。

マルチディメンション

マルチディメンション外れ値結果に基づいたアラート

上記の多系列外れ値テーブルに基づいてアラートを作成するには、_count_violation を抽出します。

こうすることで、データの各系列 (前の例の各 _sourcehost) ごとにアラートを作成する必要がなくなり、挙動の変動に対して動的な系列を自動的にモニタリングできます。

次のクエリは、アプリケーション ユーザが障害に遭遇したことをモニタリングします。一意のユーザ ID によってすべてのユーザ アカウントをモニタリングし、各ユーザ アカウントで発生した「失敗」メッセージの件数に外れ値を適用します。

_sourceCategory=O365*
| parse "\"UserId\":\"*\"" as user_id
| parse "\"ResultStatus\":\"*\"" as result
| where result = "fail"
| timeslice 30m
| count by user_id, _timeslice
| outlier _count by user_id
| fields _timeslice,user_id, _count_violation
| transpose row _timeslice column user_id

クエリを実行したら、[Save As (名前を付けて保存)] をクリックして Scheduled Search を作成し、ユーザ アカウントでの失敗件数 (あるいは各データ系列でモニタリングしたい他のイベントの件数) が異常に多くなった時点でアラートを送信するように設定します。

結果を視覚化するには、[Search (検索)] ページで縦棒チャートを作成し、積み重ねのプロパティーを通常に変更して、一意の user_id ごとに (マルチディメンションの視点から) アラートを表示します。

Alert (アラート)

マルチディメンション外れ値結果のグラフ化

このセクションでは、マルチディメンション外れ値結果をグラフとして表示する例を 2 つ示します。

例 1: 外れ値の時間的な分布

この例では、多系列外れ値テーブルから _count_violation を抽出して表示します。これにより、さまざまな時系列での外れ値の分布を表示できます。

error (_sourceCategory=Apache* or _sourceCategory=IIS*)
| timeslice 1m
| count by _timeslice, _sourceCategory
| outlier _count by _sourceCategory
| fields _timeslice,_sourceCategory, _count_violation
| transpose row _timeslice column _sourceCategory

折れ線グラフを選択した場合は次のように表示されます。

外れ値の分布

例 2: 外れ値のランキング

このクエリでは、_count_error (タイムスライスの期待値からの距離) とベースラインの標準偏差値を使用して、データ ポイントの期待値からどのくらい離れているかを判断します。

こうすることで、期待値からの偏差として外れ値を表示できます。

_sourceCategory=Apache*
| timeslice 30m
| count  by _timeslice, status_code
| outlier _count by status_code
| where _count_std >0
| if(_count_violation=1,abs(_count_error)/_count_std, 0) as deviation
| fields _timeslice, status_code, deviation
| transpose row _timeslice column status_code

折れ線グラフを選択した場合は次のように表示されます。

外れ値のランキング

折れ線グラフでは、最も「離れている」外れ値がどの系列から発生しているかを見ることができます。

この方法では、スパイクは他の時系列と比較した 1 つの時系列の大きさ (平均値からの偏差) を表すため、外れ値の重大度を効果的に表示することができます。  

  • この記事は役に立ちましたか?