Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Beralih layanan menggunakan menu tarik-turun Versi. Pelajari selengkapnya tentang navigasi.
Berlaku untuk: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Layanan cloud dan perangkat IoT menghasilkan telemetri yang dapat Anda gunakan untuk mendapatkan wawasan tentang kesehatan layanan, proses produksi, dan tren penggunaan. Analisis rangkaian waktu membantu Anda mengidentifikasi penyimpangan dari pola garis besar yang khas.
Kusto Query Language (KQL) memiliki dukungan asli untuk membuat, memanipulasi, dan menganalisis beberapa rangkaian waktu. Artikel ini memperlihatkan cara menggunakan KQL untuk membuat dan menganalisis ribuan rangkaian waktu dalam hitungan detik untuk mengaktifkan solusi pemantauan dan alur kerja yang mendekati real-time.
Pembuatan rangkaian waktu
Buat rangkaian waktu reguler yang besar menggunakan operator make-series dan isi nilai yang hilang sesuai kebutuhan.
Partisi dan ubah tabel telemetri menjadi serangkaian rangkaian waktu. Tabel biasanya berisi kolom tanda waktu, dimensi kontekstual, dan metrik opsional. Dimensi digunakan untuk mempartisi data. Tujuannya adalah untuk membuat ribuan rangkaian waktu per partisi secara berkala.
Tabel input demo_make_series1 berisi 600K rekaman lalu lintas layanan web sembarang. Gunakan perintah berikut untuk mengambil sampel 10 rekaman:
demo_make_series1 | take 10
Tabel yang dihasilkan berisi kolom tanda waktu, tiga kolom dimensi kontekstual, dan tanpa metrik:
| Penanda Waktu | BrowserVer | OsVer | Negara/Wilayah |
|---|---|---|---|
| 2016-08-25 09:12:35.4020000 | Chrome 51.0 | Windows 7 | Inggris Raya |
| 2016-08-25 09:12:41.1120000 | Chrome 52.0 | Windows 10 | |
| 2016-08-25 09:12:46.2300000 | Chrome 52.0 | Windows 7 | Inggris Raya |
| 2016-08-25 09:12:46.5100000 | Chrome 52.0 | Windows 10 | Inggris Raya |
| 2016-08-25 09:12:46.5570000 | Chrome 52.0 | Windows 10 | Republik Lituania |
| 2016-08-25 09:12:47.0470000 | Chrome 52.0 | Windows 8.1 | India |
| 2016-08-25 09:12:51.3600000 | Chrome 52.0 | Windows 10 | Inggris Raya |
| 2016-08-25 09:12:51.6930000 | Chrome 52.0 | Windows 7 | Belanda |
| 2016-08-25 09:12:56.4240000 | Chrome 52.0 | Windows 10 | Inggris Raya |
| 2016-08-25 09:13:08.7230000 | Chrome 52.0 | Windows 10 | India |
Karena tidak ada metrik, bangun rangkaian waktu yang mewakili jumlah lalu lintas, yang dipartisi berdasarkan OS.
let min_t = toscalar(demo_make_series1 | summarize min(TimeStamp));
let max_t = toscalar(demo_make_series1 | summarize max(TimeStamp));
demo_make_series1
| make-series num=count() default=0 on TimeStamp from min_t to max_t step 1h by OsVer
| render timechart
-
make-seriesGunakan operator untuk membuat tiga rangkaian waktu, di mana:-
num=count(): jumlah lalu lintas. -
from min_t to max_t step 1h: membuat rangkaian waktu dalam bin satu jam dari tanda waktu terlama hingga terbaru pada tabel. -
default=0: menentukan metode pengisian untuk bin yang hilang untuk membuat rangkaian waktu reguler. Atau, gunakanseries_fill_const(),series_fill_forward(),series_fill_backward(), danseries_fill_linear()untuk perilaku pengisian yang berbeda. -
by OsVer: partisi menurut OS.
-
- Struktur data rangkaian waktu adalah array numerik dari nilai agregat untuk setiap bin waktu. Gunakan
render timechartuntuk visualisasi.
Tabel di atas memiliki tiga partisi (Windows 10, Windows 7, dan Windows 8.1). Bagan menunjukkan rangkaian waktu terpisah untuk setiap versi OS:
Fungsi analisis rangkaian waktu
Di bagian ini, kita akan melakukan fungsi pemrosesan seri yang khas. Setelah serangkaian rangkaian waktu dibuat, KQL mendukung daftar fungsi yang berkembang untuk memproses dan menganalisisnya. Kami akan menjelaskan beberapa fungsi perwakilan untuk memproses dan menganalisis rangkaian waktu.
Penyaringan
Pemfilteran adalah praktik umum dalam pemrosesan sinyal dan berguna untuk tugas pemrosesan rangkaian waktu (misalnya, menghaluskan sinyal bising, deteksi perubahan).
- Ada dua fungsi pemfilteran generik:
-
series_fir(): Menerapkan filter FIR. Digunakan untuk perhitungan sederhana rata-rata bergerak dan diferensiasi rangkaian waktu untuk deteksi perubahan. -
series_iir(): Menerapkan filter IIR. Digunakan untuk perataan eksponensial dan jumlah kumulatif.
-
-
Extendrangkaian waktu yang ditetapkan dengan menambahkan seri rata-rata bergerak baru dengan ukuran 5 bin (bernama ma_num) ke kueri:
let min_t = toscalar(demo_make_series1 | summarize min(TimeStamp));
let max_t = toscalar(demo_make_series1 | summarize max(TimeStamp));
demo_make_series1
| make-series num=count() default=0 on TimeStamp from min_t to max_t step 1h by OsVer
| extend ma_num=series_fir(num, repeat(1, 5), true, true)
| render timechart
Analisis regresi
Analisis regresi linier tersegmentasi dapat digunakan untuk memperkirakan tren rangkaian waktu.
- Gunakan series_fit_line() untuk mendapat garis terbaik yang sesuai dengan deret waktu guna mendeteksi tren umum.
- Gunakan series_fit_2lines() untuk mendeteksi perubahan tren, relatif terhadap garis besar, yang berguna dalam skenario pemantauan.
Contoh series_fit_line() dan series_fit_2lines() fungsi dalam kueri rangkaian waktu:
demo_series2
| extend series_fit_2lines(y), series_fit_line(y)
| render linechart with(xcolumn=x)
- Biru: rangkaian waktu asli
- Hijau: garis lurus
- Merah: dua garis terpasang
Nota
Fungsi ini secara akurat mendeteksi titik lompat (perubahan tingkat).
Deteksi musiman
Banyak metrik mengikuti pola musiman (berkala). Lalu lintas pengguna layanan cloud biasanya berisi pola harian dan mingguan yang tertinggi di sekitar pertengahan hari kerja dan terendah di malam hari dan selama akhir pekan. Sensor IoT mengukur dalam interval berkala. Pengukuran fisik seperti suhu, tekanan, atau kelembaban juga dapat menunjukkan perilaku musiman.
Contoh berikut menerapkan deteksi musiman pada lalu lintas satu bulan layanan web (bin 2 jam):
demo_series3
| render timechart
- Gunakan series_periods_detect() untuk mendeteksi periode dalam rangkaian waktu secara otomatis, di mana:
-
num: rangkaian waktu yang akan dianalisis -
0.: panjang periode minimum dalam hari (0 berarti tidak minimum) -
14d/2h: periode maksimum dalam hitungan hari, yaitu 14 hari terbagi dalam bin 2 jam -
2: jumlah periode yang akan dideteksi
-
- Gunakan series_periods_validate() jika kita tahu bahwa metrik harus memiliki periode yang berbeda dan kami ingin memverifikasi bahwa metrik tersebut ada.
Nota
Ini adalah anomali jika periode tertentu yang berbeda tidak ada
demo_series3
| project (periods, scores) = series_periods_detect(num, 0., 14d/2h, 2) //to detect the periods in the time series
| mv-expand periods, scores
| extend days=2h*todouble(periods)/1d
| Periode | Skor | Hari |
|---|---|---|
| 84 | 0.820622786055595 | 7 |
| 12 | 0.764601405803502 | 1 |
Fungsi ini mendeteksi musiman harian dan mingguan. Skor harian kurang dari mingguan karena hari akhir pekan berbeda dari hari kerja.
Fungsi elemen-sebaris
Operasi aritmatika dan logis dapat dilakukan pada rangkaian waktu. Menggunakan series_subtract() kita dapat menghitung rangkaian waktu residual, yaitu perbedaan antara metrik mentah asli dan yang dihaluskan, dan mencari anomali dalam sinyal residu:
let min_t = toscalar(demo_make_series1 | summarize min(TimeStamp));
let max_t = toscalar(demo_make_series1 | summarize max(TimeStamp));
demo_make_series1
| make-series num=count() default=0 on TimeStamp from min_t to max_t step 1h by OsVer
| extend ma_num=series_fir(num, repeat(1, 5), true, true)
| extend residual_num=series_subtract(num, ma_num) //to calculate residual time series
| where OsVer == "Windows 10" // filter on Win 10 to visualize a cleaner chart
| render timechart
- Biru: rangkaian waktu asli
- Merah: rangkaian waktu yang dihaluskan
- Hijau: sisa rangkaian waktu
Alur kerja rangkaian waktu dalam skala besar
Contoh ini menunjukkan deteksi anomali yang berjalan dalam skala besar pada ribuan rangkaian waktu dalam hitungan detik. Untuk melihat sampel rekaman telemetri untuk metrik jumlah baca layanan DB selama empat hari, jalankan kueri berikut:
demo_many_series1
| take 4
| TIMESTAMP | Lokasi | Op | DB | DataRead |
|---|---|---|---|---|
| 2016-09-11 21:00:00.0000000 | Loc 9 | 5117853934049630089 | 262 | 0 |
| 2016-09-11 21:00:00.0000000 | Loc 9 | 5117853934049630089 | 241 | 0 |
| 2016-09-11 21:00:00.0000000 | Loc 9 | -865998331941149874 | 262 | 279862 |
| 2016-09-11 21:00:00.0000000 | Loc 9 | 371921734563783410 | 255 | 0 |
Lihat statistik sederhana:
demo_many_series1
| summarize num=count(), min_t=min(TIMESTAMP), max_t=max(TIMESTAMP)
| Num | min_t | max_t |
|---|---|---|
| 2177472 | 2016-09-08 00:00:00.0000000 | 2016-09-11 23:00:00.0000000 |
Rangkaian waktu dalam bin 1 jam metrik baca (empat hari × 24 jam = 96 poin) menunjukkan fluktuasi per jam normal:
let min_t = toscalar(demo_many_series1 | summarize min(TIMESTAMP));
let max_t = toscalar(demo_many_series1 | summarize max(TIMESTAMP));
demo_many_series1
| make-series reads=avg(DataRead) on TIMESTAMP from min_t to max_t step 1h
| render timechart with(ymin=0)
Perilaku ini menyesatkan karena rangkaian waktu normal tunggal dikumpulkan dari ribuan instans yang dapat memiliki pola abnormal. Buat rangkaian waktu per instans yang ditentukan oleh Loc (lokasi), Op (operasi), dan DB (komputer tertentu).
Berapa banyak rangkaian waktu yang dapat Anda buat?
demo_many_series1
| summarize by Loc, Op, DB
| count
| Jumlah |
|---|
| 18339 |
Buat 18.339 rangkaian waktu untuk metrik jumlah baca.
by Tambahkan klausul ke pernyataan make-series, terapkan regresi linier, dan pilih dua rangkaian waktu teratas dengan tren penurunan paling signifikan:
let min_t = toscalar(demo_many_series1 | summarize min(TIMESTAMP));
let max_t = toscalar(demo_many_series1 | summarize max(TIMESTAMP));
demo_many_series1
| make-series reads=avg(DataRead) on TIMESTAMP from min_t to max_t step 1h by Loc, Op, DB
| extend (rsquare, slope) = series_fit_line(reads)
| top 2 by slope asc
| render timechart with(title='Service Traffic Outage for 2 instances (out of 18339)')
Tampilkan contoh:
let min_t = toscalar(demo_many_series1 | summarize min(TIMESTAMP));
let max_t = toscalar(demo_many_series1 | summarize max(TIMESTAMP));
demo_many_series1
| make-series reads=avg(DataRead) on TIMESTAMP from min_t to max_t step 1h by Loc, Op, DB
| extend (rsquare, slope) = series_fit_line(reads)
| top 2 by slope asc
| project Loc, Op, DB, slope
| Lokasi | Op | DB | lereng |
|---|---|---|---|
| Loc 15 | 37 | 1151 | -104,498.46510358342 |
| Loc 13 | 37 | 1249 | -86,614.02919932814 |
Dalam waktu kurang dari dua menit, kueri menganalisis hampir 20.000 rangkaian waktu dan mendeteksi dua dengan penurunan jumlah baca tiba-tiba.
Kemampuan dan performa platform ini memberikan solusi yang kuat untuk analisis rangkaian waktu.
Konten terkait
- Deteksi anomali dan prakiraan dengan KQL.
- Kemampuan pembelajaran mesin dengan KQL.