Azure Veri Gezgini zaman serisi analizi

Azure Veri Gezgini (ADX), bulut hizmetlerinden veya IoT cihazlarından gelen telemetri verilerinin devam eden koleksiyonunu gerçekleştirir. Bu veriler, hizmet durumunu, fiziksel üretim süreçlerini ve kullanım eğilimlerini izleme gibi çeşitli içgörüler için analiz edilebilir. Analiz, tipik taban çizgisi desenine kıyasla desendeki bir sapmayı bulmak için seçilen ölçümlerin zaman serisinde gerçekleştirilir. ADX, birden çok zaman serisinin oluşturulması, değiştirilmesi ve analizi için yerel destek içerir. Bu konu başlığında Azure Veri Gezgini'nin saniyeler içinde binlerce zaman serisi oluşturup analiz ederek neredeyse gerçek zamanlı izleme çözümleri ve iş akışları sağlamak için nasıl kullanıldığını öğreneceksiniz.

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:

[Sorguyu çalıştırmak için tıklayı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:

Zaman damgası 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:

[Sorguyu çalıştırmak için tıklayın]

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

Time series partition.

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, Azure Veri Gezgini bunları işlemek ve analiz etmek için zaman serisi belgelerinde bulunabilecek 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 için yararlıdır (örneğin, gürültülü bir sinyali düzeltme, değişiklik algılama).

  • İ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:

[Sorguyu çalıştırmak için tıklayın]

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 range(min_t, max_t, 1h) by OsVer
| extend ma_num=series_fir(num, repeat(1, 5), true, true)
| render timechart

Time series filtering.

Regresyon analizi

ADX, 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:

[Sorguyu çalıştırmak için tıklayın]

demo_series2
| extend series_fit_2lines(y), series_fit_line(y)
| render linechart with(xcolumn=x)

Time series regression.

  • 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 de mevsimsel davranış gösterebilir.

Aşağıdaki örnek, bir web hizmetinin bir aylık trafiğine (2 saatlik bölmeler) mevsimsellik algılama uygular:

[Sorguyu çalıştırmak için tıklayın]

demo_series3
| render timechart 

Time series seasonality.

  • 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 var olduğunu doğrulamak istiyorsak series_periods_validate() kullanın.

Not

Belirli belirli dönemler yoksa bu bir anomalidir

[Sorguyu çalıştırmak için tıklayın]

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 küçüktür.

Öğe açısından 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 sinyaldeki anomalileri arayabiliriz:

[Sorguyu çalıştırmak için tıklayın]

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 range(min_t, max_t, 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

Time series operations.

  • Mavi: orijinal zaman serisi
  • Kırmızı: düzleştirilmiş zaman serisi
  • Yeşil: artık zaman serisi

Büyük ölçekte zaman serisi iş akışı

Aşağıdaki örnekte bu işlevlerin anomali algılama için 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:

[Sorguyu çalıştırmak için tıklayın]

demo_many_series1
| take 4 
TIMESTAMP Loc anonOp 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:

[Sorguyu çalıştırmak için tıklayın]

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:

[Sorguyu çalıştırmak için tıklayın]

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 in range(min_t, max_t, 1h)
| render timechart with(ymin=0) 

Time series at scale.

Yukarıdaki davranış yanıltıcıdır çünkü tek bir 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), anonOp (işlem) ve DB (belirli bir makine) tarafından tanımlanır.

Kaç zaman serisi oluşturabiliriz?

[Sorguyu çalıştırmak için tıklayın]

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 uyguluyor ve en önemli azalan eğilime sahip ilk iki zaman serisini seçiyoruz:

[Sorguyu çalıştırmak için tıklayın]

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 in range(min_t, max_t, 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)')

Time series top two.

Örnekleri görüntüleme:

[Sorguyu çalıştırmak için tıklayın]

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 in range(min_t, max_t, 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üre içinde Azure Veri Gezgini 20.000'e yakın zaman serisini analiz etti ve okuma sayısının aniden düştüğü iki anormal zaman serisi algılandı.

Azure Veri Gezgini hızlı performansla birleştirilen bu gelişmiş özellikler, zaman serisi analizi için benzersiz ve güçlü bir çözüm sağlar.

Sonraki adımlar