Deteksi anomali dan prakiraan

Layanan cloud dan perangkat IoT menghasilkan data telemetri yang dapat digunakan untuk mendapatkan wawasan seperti memantau kesehatan layanan, proses produksi fisik, dan tren penggunaan. Melakukan analisis rangkaian waktu adalah salah satu cara untuk mengidentifikasi penyimpangan dalam pola metrik ini dibandingkan dengan pola garis besar khasnya.

Bahasa Kueri Kusto (KQL) berisi dukungan asli untuk pembuatan, manipulasi, dan analisis beberapa rangkaian waktu. Dengan KQL, Anda dapat membuat dan menganalisis ribuan rangkaian waktu dalam hitungan detik, memungkinkan solusi pemantauan dan alur kerja yang hampir real time.

Artikel ini merinci kemampuan deteksi anomali rangkaian waktu dan prakiraan KQL. Fungsi rangkaian waktu yang berlaku didasarkan pada model dekomposisi terkenal yang kuat, di mana setiap rangkaian waktu asli diurai menjadi komponen musiman, tren, dan sisa. Anomali terdeteksi oleh outlier pada komponen residual, sementara prakiraan dilakukan dengan mengekstrapolasi komponen musiman dan tren. Implementasi KQL secara signifikan meningkatkan model dekomposisi dasar dengan deteksi musiman otomatis, analisis outlier yang kuat, dan implementasi vektorisasi untuk memproses ribuan rangkaian waktu dalam hitungan detik.

Prasyarat

  • Akun Microsoft atau identitas pengguna Microsoft Entra. Langganan Azure tidak diperlukan.
  • Baca Analisis rangkaian waktu untuk gambaran umum kemampuan rangkaian waktu.

Model dekomposisi rangkaian waktu

Implementasi asli KQL untuk prediksi rangkaian waktu dan deteksi anomali menggunakan model dekomposisi terkenal. Model ini diterapkan pada rangkaian waktu metrik yang diharapkan untuk memanifestasikan perilaku berkala dan tren, seperti lalu lintas layanan, heartbeat komponen, dan pengukuran berkala IoT untuk memperkirakan nilai metrik di masa mendatang dan mendeteksi nilai anomali. Asumsi dari proses regresi ini adalah bahwa selain perilaku musiman dan tren yang diketahui sebelumnya, rangkaian waktu didistribusikan secara acak. Anda kemudian dapat memperkirakan nilai metrik di masa mendatang dari komponen musiman dan tren, garis besar bernama kolektif, dan mengabaikan bagian residu. Anda juga dapat mendeteksi nilai anomali berdasarkan analisis outlier hanya menggunakan bagian residu. Untuk membuat model dekomposisi, gunakan fungsi series_decompose(). Fungsi ini series_decompose() mengambil serangkaian rangkaian waktu dan secara otomatis menguraikan setiap rangkaian waktu ke komponen musiman, tren, residual, dan garis besarnya.

Misalnya, Anda dapat menguraikan lalu lintas layanan web internal dengan menggunakan kueri berikut:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (baseline, seasonal, trend, residual) = series_decompose(num, -1, 'linefit')  //  decomposition of a set of time series to seasonal, trend, residual, and baseline (seasonal+trend)
| render timechart with(title='Web app. traffic of a month, decomposition', ysplit=panels)

Dekomposisi rangkaian waktu.

  • Rangkaian waktu asli diberi label num (berwarna merah).
  • Proses dimulai dengan deteksi otomatis musiman dengan menggunakan fungsi series_periods_detect() dan mengekstrak pola musiman (ungu).
  • Pola musiman dikurangi dari rangkaian waktu asli dan regresi linier dijalankan menggunakan fungsi series_fit_line() untuk menemukan komponen tren (biru muda).
  • Fungsi ini mengurangi tren dan sisanya adalah komponen residu (berwarna hijau).
  • Terakhir, fungsi menambahkan komponen musiman dan tren untuk menghasilkan garis besar (berwarna biru).

Deteksi anomali rangkaian waktu

Fungsi series_decompose_anomalies() ini menemukan titik anomali pada serangkaian rangkaian waktu. Fungsi ini memanggil series_decompose() untuk membangun model dekomposisi dan kemudian berjalan series_outliers() pada komponen residu. series_outliers() menghitung skor anomali untuk setiap titik komponen residu menggunakan uji pagar Tukey. Skor anomali di atas 1,5 atau di bawah -1,5 menunjukkan kenaikan atau penurunan anomali ringan masing-masing. Skor anomali di atas 3,0 atau di bawah -3,0 menunjukkan anomali yang kuat.

Kueri berikut memungkinkan Anda mendeteksi anomali dalam lalu lintas layanan web internal:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (anomalies, score, baseline) = series_decompose_anomalies(num, 1.5, -1, 'linefit')
| render anomalychart with(anomalycolumns=anomalies, title='Web app. traffic of a month, anomalies') //use "| render anomalychart with anomalycolumns=anomalies" to render the anomalies as bold points on the series charts.

Deteksi anomali rangkaian waktu.

  • Rangkaian waktu asli (berwarna merah).
  • Komponen garis besar (musiman + tren) (berwarna biru).
  • Titik anomali (berwarna ungu) di atas rangkaian waktu asli. Poin anomali secara signifikan menyimpang dari nilai dasar yang diharapkan.

Perkiraan rangkaian waktu

Fungsi series_decompose_forecast() ini memprediksi nilai masa depan dari serangkaian rangkaian waktu. Fungsi ini memanggil series_decompose() untuk membangun model dekomposisi dan kemudian, untuk setiap rangkaian waktu, mengekstrapolasi komponen garis besar ke masa depan.

Kueri berikut memungkinkan Anda memprediksi lalu lintas layanan web minggu depan:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week by Time Series Decomposition')

Prakiraan rangkaian waktu.

  • Metrik asli (berwarna merah). Nilai mendatang hilang dan diatur ke 0, secara default.
  • Ekstrapolasi komponen garis besar (berwarna biru) untuk memprediksi nilai minggu depan.

Skalabilitas

Bahasa Kueri Kusto sintaks memungkinkan satu panggilan untuk memproses beberapa rangkaian waktu. Implementasi unik yang dioptimalkan memungkinkan performa cepat, yang sangat penting untuk deteksi anomali dan perkiraan yang efektif saat memantau ribuan penghitung dalam skenario mendekati real-time.

Kueri berikut ini memperlihatkan pemrosesan tiga rangkaian waktu secara bersamaan:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid
| extend offset=case(sid=='TS3', 4000000, sid=='TS2', 2000000, 0)   //  add artificial offset for easy visualization of multiple time series
| extend num=series_add(num, offset)
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week for 3 time series')

Skalabilitas rangkaian waktu.

Ringkasan

Dokumen ini merinci fungsi KQL asli untuk deteksi anomali rangkaian waktu dan prakiraan. Setiap rangkaian waktu asli diurai menjadi komponen musiman, tren, dan sisa untuk mendeteksi anomali dan/atau prakiraan. Fungsionalitas ini dapat digunakan untuk skenario pemantauan mendekati real-time, seperti deteksi kesalahan, pemeliharaan prediktif, dan prakiraan permintaan dan beban.