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