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 serisi
    • from 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() ve series_fill_linear() kullanın series_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 bölümü.

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

Zaman serisi filtreleme.

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)

Zaman serisi regresyonu.

  • 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 serisi mevsimselliği.

  • 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

Zaman serisi işlemleri.

  • 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) 

Uygun ölçekte zaman serisi.

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)')

Zaman serisi ilk iki.

Ö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.