Azure Veri Gezgini'de zaman serisi analizi

Azure Veri Gezgini (ADX), bulut hizmetlerinden veya IoT cihazlarından telemetri verilerini toplama işlemini gerçekleştirir. Bu veriler hizmet durumunu izleme, fiziksel üretim süreçleri ve kullanım eğilimleri gibi çeşitli içgörüler için analiz edilir. Analiz, seçilen ölçümlerin zaman serisinde yapılır ve desende tipik temel deseniyle karşılaştırıldığında bir sapma bulur. ADX, birden çok zaman serisinin oluşturulması, işlemesi ve analizi için yerel destek içerir. Bu konu başlığında, Azure Veri Gezgini ve iş akışlarını neredeyse gerçek zamanlı izleme çözümlerine ve iş akışlarına olanak sağlayan binlercezaman serisini oluşturmak ve analiz etmek için nasıl kullanılır?

Zaman serisi oluşturma

Bu bölümde işleci kullanarak basit ve sezgisel bir şekilde büyük bir normal zaman serisi kümesi oluşturacağız ve eksik make-series değerleri gerektiğinde dolduracağız. Zaman serisi analizinin ilk adımı, özgün telemetri tablosuna bölümleme ve dönüştürmeyi 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 yer alır. Boyutlar, verileri bölümlendirmek için kullanılır. Burada amaç, bölüm başına düzenli aralıklarla binlerce zaman serisi oluşturmaktır.

Aşağıdaki giriş demo_make_series1 rastgele web hizmeti trafiğinin 600.000 kaydı 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 tabloda bir zaman damgası sütunu, üç bağlamsal boyut sütunu ve hiç ölçüm yoktur:

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 Litvan 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çümler yoktur, yalnızca trafik sayısını temsil eden ve aşağıdaki sorguyu kullanarak işletim sistemi tarafından bölümlenmiş bir dizi zaman serisi oluşturabilirsiniz:

[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
| render timechart 
  • Üç zaman make-series serisi kümesi oluşturmak için işleci kullanın; burada:
    • num=count(): trafik zaman serisi
    • range(min_t, max_t, 1h): zaman serisi, zaman aralığındaki 1 saatlik binlerde oluşturulur (tablo kayıtlarının en eski ve en yeni zaman damgası)
    • default=0: normal zaman serisi oluşturmak için eksik depolar için fill yöntemini belirtin. Alternatif olarak değişiklikler series_fill_const() için series_fill_forward() , ve series_fill_backward()series_fill_linear() kullanın
    • byOsVer: işletim sistemi tarafından bölümleme
  • Gerçek zaman serisi veri yapısı, her zaman kutusu başına toplanan değerin sayısal bir dizisidir. Görselleştirme için render timechart kullanıyoruz.

Yukarıdaki tabloda üç bölüm vardır. Grafikte görülen her işletim sistemi sürümü için Windows 10 (kırmızı), 7 (mavi) ve 8.1 (yeşil) olmak için ayrı bir zaman serisi oluşturabiliriz:

Zaman serisi bölümü.

Zaman serisi analiz işlevleri

Bu bölümde tipik seri işleme işlevlerini gerçekleştiracağız. Bir zaman serisi kümesi oluşturulduktan sonra, Azure Veri Gezgini zaman serisi belgelerinde bulunarak bunları işleyip analiz etmek için artan bir işlev listesini destekler. Zaman serilerini işleme ve analiz etme için birkaç temsili işlevi açıklaacağız.

Filtreleme

Filtreleme, sinyal işlemede yaygın olarak kullanılan bir uygulamadır ve zaman serisi işleme görevleri için kullanışlıdır (örneğin, gürültülü bir sinyali düzleştirme, 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 ve zaman serisinin farklarının basit bir şekilde hesaplanması 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 günlük (ma_num adlı) boyuta sahip yeni bir hareketli Extendek ma_num 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

Zaman serisi filtreleme.

Regresyon analizi

ADX, zaman serisinin eğilimini tahmin etmek için kesimli doğrusal regresyon analizini destekler.

  • Genel series_fit_line algılama için en iyi satırı bir zaman serisine sığdırmak için series_fit_line() kullanın.
  • İzleme senaryolarında yararlı olan temele göre eğilim değişikliklerini algılamak için series_fit_2lines() kullanın.

Bir zaman series_fit_line() serisi series_fit_2lines() sorgusunda ve 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)

Zaman serisi regresyonu.

  • Mavi: özgün zaman serisi
  • Yeşil: uygun çizgi
  • Kırmızı: iki uygun çizgi

Not

İşlev atlama (düzey değişikliği) noktasını doğru bir şekilde algıladı.

Mevsimsellik algılama

Birçok ölçüm mevsimsel (düzenli) desenleri takip eder. Bulut hizmetlerinin kullanıcı trafiği genellikle iş günü ortası en yüksek, gece ve hafta sonu en düşük olan günlük ve haftalık desenleri 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 çöp kutusu) mevsimsellik algılama uygular:

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

demo_series3
| render timechart 

Zaman serisi mevsimselliği.

  • Zaman series_periods_detect() kullanarak zaman serisinde dönemleri otomatik olarak algıla.
  • Bir ölçümün belirli ayrı dönemlere sahip olması gerektiğini biliyorsanız ve bunların mevcut olduğunu doğrulamak için series_periods_validate() kullanın.

Not

Belirli ayrı 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, haftanın günlerinden farklı olduğundan günlük puanlar haftalık puanlardan daha düşük olur.

Öğe açısından işlevler

Aritmetik ve mantıksal işlemler bir zaman serisinde yapılabilir. series_subtract() kullanarak artık zaman serisini hesaplarız, yani özgün ham ölçüm ile düzleştirmeli ölçüm arasındaki fark ve artık sinyalinde anomalileri arayabilirsiniz:

[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

Zaman serisi işlemleri.

  • Mavi: özgün zaman serisi
  • Kırmızı: düzleştirmeli 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 binlerce zaman serisinde saniyeler içinde nasıl büyük ölçekte çalıştırılları gösterilmiştir. Dört gün içinde veritabanı hizmetinin okuma sayısı ölçümlerinin birkaç örnek telemetri kaydı 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çümlerinin 1 saatlik depolarında bir zaman serisinin (toplam dört gün * 24 saat = 96 nokta) bir zaman serisinin inşası, normal desen dalgalanması ile sonuç verir:

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

Büyük ölçekte zaman serisi.

Tek bir normal zaman serisi anormal desenlere sahip binlerce farklı örnekten toplanmış olduğu için yukarıdaki davranış yanıltıcıdır. Bu nedenle örnek başına bir zaman serisi oluşturuz. Örnek Loc (konum), anonOp (işlem) ve DB (belirli makine) ile 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çümlerinin 18339 zaman serisini oluşturacak. Make-series deyimine yan tümcesini ekler, doğrusal regresyon uygulayabilir ve en önemli azalan eğilime sahip ilk by iki zaman serisini seçeriz:

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

Zaman serisi ilk iki.

Ö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 Azure Veri Gezgini 20.000'e yakın zaman serisi analiz edildi ve okuma sayısı aniden bırakılan iki anormal zaman serisi algılandı.

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

Sonraki adımlar