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-seriesserisi kümesi oluşturmak için işleci kullanın; burada:num=count(): trafik zaman serisirange(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şikliklerseries_fill_const()içinseries_fill_forward(), veseries_fill_backward()series_fill_linear()kullanınbyOsVer: 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 timechartkullanı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 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.
Extendsorguya 5 günlük (ma_num adlı) boyuta sahip yeni bir hareketliExtendek 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

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)

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

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

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

Ö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
- Zaman serisi anomali algılama ve tahmin hakkında bilgi Azure Veri Gezgini.
- Makine öğrenmesi özellikleri hakkında bilgi Azure Veri Gezgini.