次の方法で共有


plotly_anomaly_fl()

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft Sentinel

関数plotly_anomaly_fl()は、plotly テンプレートをカスタマイズして対話型の異常チャートを作成できる、ユーザー定義関数 (UDF) です。

この関数は、ソースとベースラインの時系列、それぞれのサイズを持つ正と負の異常の一覧、およびグラフのラベル付け文字列を含むテーブルを受け取ります。 この関数は、 plotly JSON を含む単一のセル テーブルを返します。 必要に応じて、 Azure Data Explorer ダッシュボード タイルにデータをレンダリングできます。 詳細については、「 Plotly (プレビュー)」を参照してください。

この関数は、ソースとベースラインの時系列、それぞれのサイズを持つ正と負の異常の一覧、およびグラフのラベル付け文字列を含むテーブルを受け取ります。 この関数は、 plotly JSON を含む単一のセル テーブルを返します。 必要に応じて、 Real-Time ダッシュボード タイルにデータをレンダリングできます。 詳細については、「 Plotly (プレビュー)」を参照してください。

Note

非対話型の異常グラフを表示するために、Azure Data Explorer のネイティブ " | render anomalychart" メソッドを使用することを検討してください。

前提条件

一般公開されている PlotlyTemplate テーブルから、必要な 'anomaly' テンプレートを抽出します。 ターゲット データベースから次の KQL コマンドを実行して、サンプル データベースからデータベースにこのテーブルをコピーします。

.set PlotlyTemplate <| cluster('help.kusto.windows.net').database('Samples').PlotlyTemplate

構文

T | invoke plotly_anomaly_fl(time_col, val_col, baseline_col, time_high_col, val_high_col, size_high_col, time_low_col, val_low__col, size_low_col, chart_title, series_name, val_name)

構文規則について詳しく知る。

パラメーター

件名 タイプ Required 説明
time_col string ✔️ 元の時系列のタイム ポイントの動的配列を含む列の名前
val_col string ✔️ 元の時系列の値を含む列の名前
baseline_col string ✔️ 基準時系列の値を含む列の名前。 通常、異常は、予想されるベースライン値からの大きな値オフセットによって検出されます。
time_high_col string ✔️ 高値 (ベースラインより上) の異常のタイム ポイントを含む列の名前
val_high_col string ✔️ 異常が高い値を含む列の名前
size_high_col string ✔️ 高い異常のマーカー サイズを含む列の名前
time_low_col string ✔️ 低い異常のタイム ポイントを含む列の名前
val_low_col string ✔️ 低い異常の値を含む列の名前
size_low_col string ✔️ 低い異常のマーカー サイズを含む列の名前
chart_title string グラフ タイトル、既定値は "Anomaly Chart" です
series_name string 時系列名、既定値は "メトリック"
val_name string 値軸名、既定値は 'Value' です

関数定義

関数を定義するには、次のようにコードをクエリ定義関数として埋め込むか、データベースに格納された関数として作成します。

次の let ステートメントを使用して関数を定義。 権限は必要ありません。

重要

let ステートメント単独では実行できません。 その後に 表形式の式ステートメントが続く必要がありますplotly_anomaly_fl()の動作例を実行するには、Exampleを参照してください。

let plotly_anomaly_fl=(tbl:(*), time_col:string, val_col:string, baseline_col:string, time_high_col:string , val_high_col:string, size_high_col:string,
                                time_low_col:string, val_low_col:string, size_low_col:string,
                                chart_title:string='Anomaly chart', series_name:string='Metric', val_name:string='Value')
{
    let anomaly_chart = toscalar(PlotlyTemplate | where name == "anomaly" | project plotly);
    let tbl_ex = tbl | extend _timestamp = column_ifexists(time_col, datetime(null)), _values = column_ifexists(val_col, 0.0), _baseline = column_ifexists(baseline_col, 0.0),
                              _high_timestamp = column_ifexists(time_high_col, datetime(null)), _high_values = column_ifexists(val_high_col, 0.0), _high_size = column_ifexists(size_high_col, 1),
                              _low_timestamp = column_ifexists(time_low_col, datetime(null)), _low_values = column_ifexists(val_low_col, 0.0), _low_size = column_ifexists(size_low_col, 1);
    tbl_ex
    | extend plotly = anomaly_chart
    | extend plotly=replace_string(plotly, '$TIME_STAMPS$', tostring(_timestamp))
    | extend plotly=replace_string(plotly, '$SERIES_VALS$', tostring(_values))
    | extend plotly=replace_string(plotly, '$BASELINE_VALS$', tostring(_baseline))
    | extend plotly=replace_string(plotly, '$TIME_STAMPS_HIGH_ANOMALIES$', tostring(_high_timestamp))
    | extend plotly=replace_string(plotly, '$HIGH_ANOMALIES_VALS$', tostring(_high_values))
    | extend plotly=replace_string(plotly, '$HIGH_ANOMALIES_MARKER_SIZE$', tostring(_high_size))
    | extend plotly=replace_string(plotly, '$TIME_STAMPS_LOW_ANOMALIES$', tostring(_low_timestamp))
    | extend plotly=replace_string(plotly, '$LOW_ANOMALIES_VALS$', tostring(_low_values))
    | extend plotly=replace_string(plotly, '$LOW_ANOMALIES_MARKER_SIZE$', tostring(_low_size))
    | extend plotly=replace_string(plotly, '$TITLE$', chart_title)
    | extend plotly=replace_string(plotly, '$SERIES_NAME$', series_name)
    | extend plotly=replace_string(plotly, '$Y_NAME$', val_name)
    | project plotly
};
// Write your query to use the function here.

次の例では、 invoke 演算子 を使用して関数を実行します。

クエリ定義関数を使用するには、埋め込み関数定義の後に呼び出します。

let plotly_anomaly_fl=(tbl:(*), time_col:string, val_col:string, baseline_col:string, time_high_col:string , val_high_col:string, size_high_col:string,
                                time_low_col:string, val_low_col:string, size_low_col:string,
                                chart_title:string='Anomaly chart', series_name:string='Metric', val_name:string='Value')
{
    let anomaly_chart = toscalar(PlotlyTemplate | where name == "anomaly" | project plotly);
    let tbl_ex = tbl | extend _timestamp = column_ifexists(time_col, datetime(null)), _values = column_ifexists(val_col, 0.0), _baseline = column_ifexists(baseline_col, 0.0),
                              _high_timestamp = column_ifexists(time_high_col, datetime(null)), _high_values = column_ifexists(val_high_col, 0.0), _high_size = column_ifexists(size_high_col, 1),
                              _low_timestamp = column_ifexists(time_low_col, datetime(null)), _low_values = column_ifexists(val_low_col, 0.0), _low_size = column_ifexists(size_low_col, 1);
    tbl_ex
    | extend plotly = anomaly_chart
    | extend plotly=replace_string(plotly, '$TIME_STAMPS$', tostring(_timestamp))
    | extend plotly=replace_string(plotly, '$SERIES_VALS$', tostring(_values))
    | extend plotly=replace_string(plotly, '$BASELINE_VALS$', tostring(_baseline))
    | extend plotly=replace_string(plotly, '$TIME_STAMPS_HIGH_ANOMALIES$', tostring(_high_timestamp))
    | extend plotly=replace_string(plotly, '$HIGH_ANOMALIES_VALS$', tostring(_high_values))
    | extend plotly=replace_string(plotly, '$HIGH_ANOMALIES_MARKER_SIZE$', tostring(_high_size))
    | extend plotly=replace_string(plotly, '$TIME_STAMPS_LOW_ANOMALIES$', tostring(_low_timestamp))
    | extend plotly=replace_string(plotly, '$LOW_ANOMALIES_VALS$', tostring(_low_values))
    | extend plotly=replace_string(plotly, '$LOW_ANOMALIES_MARKER_SIZE$', tostring(_low_size))
    | extend plotly=replace_string(plotly, '$TITLE$', chart_title)
    | extend plotly=replace_string(plotly, '$SERIES_NAME$', series_name)
    | extend plotly=replace_string(plotly, '$Y_NAME$', val_name)
    | project plotly
};
let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let marker_scale = 8;
let s_name = 'TS1';
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid
| where sid == s_name
| extend (anomalies, score, baseline) = series_decompose_anomalies(num, 1.5, -1, 'linefit')
| mv-apply num1=num to typeof(double), anomalies1=anomalies to typeof(double), score1=score to typeof(double), TimeStamp1=TimeStamp to typeof(datetime)  on (
    summarize pAnomalies=make_list_if(num1, anomalies1 > 0), pTimeStamp=make_list_if(TimeStamp1, anomalies1 > 0), pSize=make_list_if(toint(score1*marker_scale), anomalies1 > 0),
              nAnomalies=make_list_if(num1, anomalies1 < 0), nTimeStamp=make_list_if(TimeStamp1, anomalies1 < 0), nSize=make_list_if(toint(-score1*marker_scale), anomalies1 < 0)
)
| invoke plotly_anomaly_fl('TimeStamp', 'num', 'baseline', 'pTimeStamp', 'pAnomalies', 'pSize', 'nTimeStamp', 'nAnomalies', 'nSize',
                           chart_title='Anomaly chart using plotly_anomaly_fl()', series_name=s_name, val_name='# of requests')
| render plotly

出力

出力は、'| を使用してレンダリングできる Plotly JSON 文字列です。または Azure Data Explorer ダッシュボード タイルに表示します。 ダッシュボード タイルの作成の詳細については、「 Azure Data Explorer ダッシュボード を使用してデータをビジュアル化する」を参照してください。

出力は、リアルタイム ダッシュボード タイルにレンダリングできる Plotly JSON 文字列です。 ダッシュボード タイルの作成の詳細については、「 Real-Time ダッシュボードを参照してください。

次の図は、上記の関数を使用した異常チャートの例を示しています。

サンプル データセットの異常グラフのスクリーンショット。

異常を拡大してポイントできます。

異常な領域のズームのスクリーンショット。異常にマウス ポインターを合わせたスクリーンショット。