Bagikan melalui


plotly_anomaly_fl()

Berlaku untuk: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Fungsi plotly_anomaly_fl() ini adalah fungsi yang ditentukan pengguna (UDF) yang memungkinkan Anda menyesuaikan templat plotly untuk membuat bagan anomali interaktif.

Fungsi ini menerima tabel yang berisi sumber dan rangkaian waktu garis besar, daftar anomali positif dan negatif dengan ukuran masing-masing, dan string pelabelan bagan. Fungsi mengembalikan tabel sel tunggal yang berisi JSON plotly. Secara opsional, Anda dapat merender data dalam petak dasbor Azure Data Explorer. Untuk informasi selengkapnya, lihat Plotly (pratinjau).

Fungsi ini menerima tabel yang berisi sumber dan rangkaian waktu garis besar, daftar anomali positif dan negatif dengan ukuran masing-masing, dan string pelabelan bagan. Fungsi mengembalikan tabel sel tunggal yang berisi JSON plotly. Secara opsional, Anda dapat merender data dalam petak peta dasbor Real-Time. Untuk informasi selengkapnya, lihat Plotly (pratinjau).

Catatan

Pertimbangkan untuk menggunakan metode asli " | render anomalychart" Azure Data Explorer untuk merender bagan anomali non-interaktif.

Prasyarat

Ekstrak templat 'anomali' yang diperlukan dari tabel yang tersedia PlotlyTemplate untuk umum. Salin tabel ini dari database Sampel ke database Anda dengan menjalankan perintah KQL berikut dari database target Anda:

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

Sintaks

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

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Tipe Wajib Deskripsi
time_col string ✔️ Nama kolom yang berisi array dinamis titik waktu dari rangkaian waktu asli
val_col string ✔️ Nama kolom yang berisi nilai rangkaian waktu asli
baseline_col string ✔️ Nama kolom yang berisi nilai rangkaian waktu garis besar. Anomali biasanya terdeteksi oleh offset nilai besar dari nilai garis besar yang diharapkan.
time_high_col string ✔️ Nama kolom yang berisi titik waktu anomali tinggi (di atas garis besar)
val_high_col string ✔️ Nama kolom yang berisi nilai anomali tinggi
size_high_col string ✔️ Nama kolom yang berisi ukuran penanda anomali tinggi
time_low_col string ✔️ Nama kolom yang berisi titik waktu anomali rendah
val_low_col string ✔️ Nama kolom yang berisi nilai anomali rendah
size_low_col string ✔️ Nama kolom yang berisi ukuran penanda anomali rendah
chart_title string Judul bagan, defaultnya adalah 'Bagan Anomali'
series_name string Nama rangkaian waktu, defaultnya adalah 'Metrik'
val_name string Nama sumbu nilai, defaultnya adalah 'Nilai'

Definisi fungsi

Anda dapat menentukan fungsi dengan menyematkan kodenya sebagai fungsi yang ditentukan kueri, atau membuatnya sebagai fungsi tersimpan dalam database Anda, sebagai berikut:

Tentukan fungsi menggunakan pernyataan let berikut. Tidak ada izin yang diperlukan.

Penting

Pernyataan let tidak dapat berjalan sendiri. Ini harus diikuti oleh pernyataan ekspresi tabular. Untuk menjalankan contoh plotly_anomaly_fl()kerja , lihat Contoh.

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.

Contoh

Contoh berikut menggunakan operator pemanggilan untuk menjalankan fungsi.

Untuk menggunakan fungsi yang ditentukan kueri, panggil setelah definisi fungsi yang disematkan.

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

Hasil

Outputnya adalah string JSON Plotly yang dapat dirender menggunakan '| render plotly' atau dalam petak dasbor Azure Data Explorer. Untuk informasi selengkapnya tentang membuat petak dasbor, lihat Memvisualisasikan data dengan dasbor Azure Data Explorer .

Output adalah string JSON Plotly yang dapat dirender dalam petak dasbor Real-Time. Untuk informasi selengkapnya tentang membuat petak dasbor, lihat Dasbor Real Time.

Gambar berikut menunjukkan sampel bagan anomali menggunakan fungsi di atas:

Cuplikan layar bagan anomali himpunan data sampel.

Anda dapat memperbesar dan mengarahkan mouse ke atas anomali:

Cuplikan layar zoom di wilayah anomali.Cuplikan layar hover di atas anomali.