Zaman serisi analizi
Bulut hizmetleri ve IoT cihazları, hizmet durumunu, fiziksel üretim süreçlerini ve kullanım eğilimlerini izleme gibi içgörüler elde etmek için kullanılabilecek telemetri verileri oluşturur. Zaman serisi analizi gerçekleştirmek, bu ölçümlerin desenindeki sapmaları tipik taban çizgisi desenlerine göre belirlemenin bir yoludur.
Kusto Sorgu Dili (KQL), birden çok zaman serisi oluşturma, işleme ve analiz için yerel destek içerir. Bu makalede, KQL'nin saniyeler içinde binlerce zaman serisi oluşturmak ve analiz etmek ve neredeyse gerçek zamanlı izleme çözümleri ve iş akışları sağlamak için nasıl kullanıldığını öğrenin.
Zaman serisi oluşturma
Bu bölümde, işlecini kullanarak make-series
basit ve sezgisel bir şekilde büyük bir düzenli zaman serisi kümesi oluşturacak ve gerektiğinde eksik değerleri dolduracağız.
Zaman serisi analizinin ilk adımı, özgün telemetri tablosunu bölümleyip bir zaman serisi kümesine dönüştürmektir. Tabloda genellikle bir zaman damgası sütunu, bağlamsal boyutlar ve isteğe bağlı ölçümler bulunur. Boyutlar verileri bölümlendirmek için kullanılır. Amaç, düzenli zaman aralıklarında bölüm başına binlerce zaman serisi oluşturmaktır.
Giriş tablosu demo_make_series1 rastgele web hizmeti trafiğinin 600.000 kaydını içerir. 10 kaydı örneklemek için aşağıdaki komutu kullanın:
demo_make_series1 | take 10
Sonuçta elde edilen tablo bir zaman damgası sütunu, üç bağlamsal boyut sütunu içerir ve ölçüm içermez:
TimeStamp | BrowserVer | OsVer | Ülke/Bölge |
---|---|---|---|
2016-08-25 09:12:35.4020000 | Chrome 51.0 | Windows 7 | Birleşik Krallık |
2016-08-25 09:12:41.1120000 | Chrome 52.0 | Windows 10 | |
2016-08-25 09:12:46.2300000 | Chrome 52.0 | Windows 7 | Birleşik Krallık |
2016-08-25 09:12:46.5100000 | Chrome 52.0 | Windows 10 | Birleşik Krallık |
2016-08-25 09:12:46.5570000 | Chrome 52.0 | Windows 10 | Litvanya Cumhuriyeti |
2016-08-25 09:12:47.0470000 | Chrome 52.0 | Windows 8.1 | Hindistan |
2016-08-25 09:12:51.3600000 | Chrome 52.0 | Windows 10 | Birleşik Krallık |
2016-08-25 09:12:51.6930000 | Chrome 52.0 | Windows 7 | Hollanda |
2016-08-25 09:12:56.4240000 | Chrome 52.0 | Windows 10 | Birleşik Krallık |
2016-08-25 09:13:08.7230000 | Chrome 52.0 | Windows 10 | Hindistan |
Ölçüm olmadığından, yalnızca aşağıdaki sorguyu kullanarak işletim sistemi tarafından bölümlenmiş trafik sayısını temsil eden bir zaman serisi kümesi oluşturabiliriz:
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-series
üç zaman serisi kümesi oluşturmak için işlecini kullanın. Burada:num=count()
: trafik zaman serisifrom min_t to max_t step 1h
: zaman serisi, zaman aralığındaki 1 saatlik bölmelerde oluşturulur (tablo kayıtlarının en eski ve en yeni zaman damgaları)default=0
: eksik bölmelerin normal zaman serisi oluşturması için doldurma yöntemini belirtin. Alternatif olarak, değişiklikler için ,series_fill_forward()
series_fill_backward()
veseries_fill_linear()
kullanınseries_fill_const()
by OsVer
: işletim sistemine göre bölümleme
- Gerçek zaman serisi veri yapısı, her zaman kutusu başına toplanan değerin sayısal dizisidir. Görselleştirme için kullanırız
render timechart
.
Yukarıdaki tabloda üç bölüm vardır. Grafikte görüldüğü gibi her işletim sistemi sürümü için ayrı bir zaman serisi oluşturabiliriz: Windows 10 (kırmızı), 7 (mavi) ve 8.1 (yeşil):
Zaman serisi analiz işlevleri
Bu bölümde tipik seri işleme işlevlerini gerçekleştireceğiz. Bir zaman serisi kümesi oluşturulduktan sonra, KQL bunları işlemek ve analiz etmek için artan bir işlev listesini destekler. Zaman serisini işlemek ve analiz etmek için birkaç temsili işlevi açıklayacağız.
Filtreleme
Filtreleme, sinyal işlemede yaygın bir uygulamadır ve zaman serisi işleme görevleri (örneğin, gürültülü bir sinyali düzeltme, değişiklik algılama) için kullanışlıdır.
- İki genel filtreleme işlevi vardır:
series_fir()
: FIR filtresi uygulama. Değişiklik algılama için hareketli ortalamanın basit hesaplanması ve zaman serisinin farklılaşması için kullanılır.series_iir()
: IIR filtresi uygulama. Üstel düzeltme ve kümülatif toplam için kullanılır.
Extend
sorguya 5 bölme boyutunda ( ma_num adlı) yeni bir hareketli ortalama seri ekleyerek ayarlanan zaman serisi:
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
Regresyon analizi
Azure Veri Gezgini, zaman serisinin eğilimini tahmin etmek için segmentlere ayrılmış doğrusal regresyon analizini destekler.
- Genel eğilim algılama için en iyi çizgiyi bir zaman serisine sığdırmak için series_fit_line() kullanın.
- İzleme senaryolarında yararlı olan taban çizgisine göre eğilim değişikliklerini algılamak için series_fit_2lines() kullanın.
series_fit_line()
Zaman serisi sorgusundaki ve series_fit_2lines()
işlevleri örneği:
demo_series2
| extend series_fit_2lines(y), series_fit_line(y)
| render linechart with(xcolumn=x)
- Mavi: orijinal zaman serisi
- Yeşil: takılmış çizgi
- Kırmızı: iki takılmış çizgi
Not
İşlev atlama (düzey değişikliği) noktasını doğru algıladı.
Mevsimsellik algılama
Birçok ölçüm mevsimsel (periyodik) desenleri izler. Bulut hizmetlerinin kullanıcı trafiği genellikle iş gününün ortasında en yüksek, gece ve hafta sonu en düşük günlük ve haftalık desenler içerir. IoT algılayıcıları düzenli aralıklarla ölçülür. Sıcaklık, basınç veya nem gibi fiziksel ölçümler mevsimsel davranış da gösterebilir.
Aşağıdaki örnek, bir web hizmetinin bir aylık trafiğine (2 saatlik bölmeler) mevsimsellik algılama uygular:
demo_series3
| render timechart
- Zaman serisindeki dönemleri otomatik olarak algılamak için series_periods_detect() kullanın.
- Bir ölçümün belirli ayrı dönemlere sahip olması gerektiğini biliyorsak ve bunların mevcut olduğunu doğrulamak istiyorsak series_periods_validate() kullanın.
Not
Belirli ayrı dönemler yoksa bu bir anomalidir
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
Dönem | Notalar | gün |
---|---|---|
84 | 0.820622786055595 | 7 |
12 | 0.764601405803502 | 1 |
işlevi günlük ve haftalık mevsimselliği algılar. Hafta sonu günleri hafta içi günlerden farklı olduğundan günlük puanlar haftalıktan daha azdır.
Öğe temelli işlevler
Aritmetik ve mantıksal işlemler bir zaman serisinde yapılabilir. series_subtract() kullanarak artık zaman serisini, yani özgün ham ölçüm ile düzeltilmiş ölçüm arasındaki farkı hesaplayabilir ve artık sinyalde anomalileri arayabiliriz:
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 in 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
- Mavi: orijinal zaman serisi
- Kırmızı: düzeltilmiş zaman serisi
- Yeşil: artık zaman serisi
Zaman serisi iş akışı uygun ölçekte
Aşağıdaki örnekte, anomali algılama için bu işlevlerin saniyeler içinde binlerce zaman serisinde nasıl büyük ölçekte çalışabileceği gösterilmektedir. Bir DB hizmetinin dört gün içindeki okuma sayısı ölçümünün birkaç örnek telemetri kaydını görmek için aşağıdaki sorguyu çalıştırın:
demo_many_series1
| take 4
TIMESTAMP | Loc | 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 |
Ve basit istatistikler:
demo_many_series1
| summarize num=count(), min_t=min(TIMESTAMP), max_t=max(TIMESTAMP)
sayı | min_t | max_t |
---|---|---|
2177472 | 2016-09-08 00:00:00.0000000 | 2016-09-11 23:00:00.0000000 |
Okuma ölçümünün 1 saatlik bölmelerinde (toplam dört gün * 24 saat = 96 nokta) bir zaman serisi oluşturmak normal desen dalgalanmalarına neden olur:
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)
Yukarıdaki davranış yanıltıcıdır, çünkü tek normal zaman serisi anormal desenlere sahip olabilecek binlerce farklı örnekten toplanır. Bu nedenle, örnek başına bir zaman serisi oluştururuz. Örnek Loc (konum), İşlem (işlem) ve DB (belirli makine) tarafından tanımlanır.
Kaç zaman serisi oluşturabiliriz?
demo_many_series1
| summarize by Loc, Op, DB
| count
Count |
---|
18339 |
Şimdi okuma sayısı ölçümünün 18339 zaman serisini oluşturacağız. Yan tümcesini by
make-series deyimine ekliyor, doğrusal regresyon uyguluyoruz ve en önemli azalan eğilime sahip ilk iki zaman serisini seçiyoruz:
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)')
Örnekleri görüntüleme:
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
Loc | Op | DB | Eğim |
---|---|---|---|
Loc 15 | 37 | 1151 | -102743.910227889 |
Loc 13 | 37 | 1249 | -86303.2334644601 |
İki dakikadan kısa bir sürede 20.000'e yakın zaman serisi analiz edildi ve okuma sayısının aniden düştüğü iki anormal zaman serisi algılandı.
Bu gelişmiş özellikler hızlı performansla birlikte zaman serisi analizi için benzersiz ve güçlü bir çözüm sağlar.
İlgili içerik
- KQL ile anomali algılama ve tahmin etme hakkında bilgi edinin.
- KQL ile makine öğrenmesi özellikleri hakkında bilgi edinin.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin