Zaman serisi analizi

Sürüm açılan listesini kullanarak hizmetler arasında geçiş yapın. Gezinti hakkında daha fazla bilgi edinin.
Şunlar için geçerlidir: ✅ Microsoft Fabric ✅ Azure Veri Gezgini ✅ Azure İzleyici ✅ Microsoft Sentinel

Bulut hizmetleri ve IoT cihazları hizmet durumu, üretim süreçleri ve kullanım eğilimleri hakkında içgörüler elde etmek için kullanabileceğiniz telemetri verileri oluşturur. Zaman serisi analizi, tipik taban çizgisi desenlerinden sapmaları belirlemenize yardımcı olur.

Kusto Sorgu Dili (KQL), birden çok zaman serisi oluşturmak, işlemek ve analiz etmek için yerel desteğe sahiptir. Bu makalede, gerçek zamanlıya yakın izleme çözümlerini ve iş akışlarını etkinleştirmek üzere saniyeler içinde binlerce zaman serisi oluşturmak ve analiz etmek için KQL'in nasıl kullanılacağı gösterilmektedir.

Zaman serisi oluşturma

işlecini make-series kullanarak büyük bir düzenli zaman serisi kümesi oluşturun ve eksik değerleri gerektiği gibi doldurun. Telemetri tablosunu bölümleyip bir zaman serisi kümesine dönüştürün. 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:

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, işletim sistemine göre bölümlenen trafik öğesi sayısını temsil eden bir zaman serisi oluşturun.

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 
  • üç zaman serisi oluşturmak için işlecini make-series kullanın; burada:
    • num=count(): trafik sayısı.
    • from min_t to max_t step 1h: zaman serisini tablonun en eskisinden en yeni zaman damgasına kadar birer saatlik dilimlerde oluşturur.
    • default=0: normal zaman serisi oluşturmak için eksik bölmeler için doldurma yöntemini belirtir. Alternatif olarak, farklı doldurma davranışı için , series_fill_const(), series_fill_forward()ve series_fill_backward() kullanınseries_fill_linear().
    • by OsVer: işletim sistemine göre bölümler.
  • Zaman serisi veri yapısı, her zaman dilimi için toplanan değerlerin sayısal bir dizisidir. Görselleştirme için kullanın render timechart .

Yukarıdaki tabloda üç bölüm vardır (Windows 10, Windows 7 ve Windows 8.1). Grafik, her işletim sistemi sürümü için ayrı bir zaman serisi gösterir:

Windows 10, Windows 7 ve Windows 8.1 için ayrı çizgiler içeren bir zaman serisi grafiğinin ekran görüntüsü.

Zaman serisi çözümleme 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 ortalama ve zaman serisinin farklılaşmasının basit hesaplamasında kullanılır.
    • series_iir(): IIR filtresi uygulama. Üstel düzeltme ve kümülatif toplam için kullanılır.
  • Extend 5 bölmeli yeni bir hareketli ortalama serisi (ma_num olarak adlandırılır) sorguya eklenerek 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

Zaman serisinin eğilimini tahmin etmek için segmentlere ayrılmış doğrusal regresyon analizi kullanılabilir.

  • Genel eğilim algılama için bir zaman serisine en iyi satırı sığdırmak için series_fit_line() kullanın.
  • İzleme senaryolarında yararlı olan eğilim değişikliklerini taban çizgisine göre 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: uygun çizgi
  • Kırmızı: iki uyarlanmış çizgi

Uyarı

İş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 izler. Bulut hizmetlerinin kullanıcı trafiği genellikle iş gününün ortasında en yüksek, gece ve hafta sonu için 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ği üzerinde mevsimselliği iki saatlik aralıklarla algılar.

demo_series3
| render timechart 

Zaman serisi mevsimselliği.

  • Zaman serisindeki dönemleri otomatik olarak algılamak için series_periods_detect() kullanın; burada:
    • num: analiz için zaman serisi
    • 0.: gün cinsinden minimum dönem uzunluğu (0, minimum değil anlamına gelir)
    • 14d/2h: gün cinsinden maksimum süre uzunluğu, 2 saatlik bölmelere ayrılmış 14 gündür.
    • 2: algılanacak dönem sayısı
  • Bir ölçümün belirli ayrı dönemleri olması gerektiğini biliyor ve bunların var olduğunu doğrulamak istiyorsak series_periods_validate() kullanın.

Uyarı

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
Adet dönemleri Puanlar Günler
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.

Öğeye göre işlevler

Aritmetik ve mantıksal işlemler bir zaman serisinde yapılabilir. series_subtract() kullanarak, özgün ham ölçüm ile düzeltilmiş ölçüm arasındaki fark olan artık zaman serisini 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 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: kalıntı zaman serisi

Zaman serisi iş akışı geniş ölçekte

Bu örnekte, saniyeler içinde binlerce zaman serisinde büyük ölçekte çalışan anomali algılama gösterilmektedir. Dört gün içinde veritabanı hizmeti okuma sayısı ölçümü için örnek telemetri kayıtlarını görmek için aşağıdaki sorguyu çalıştırın:

demo_many_series1
| take 4 
ZAMAN DAMGASI 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 İki yüz elli beş 0

Basit istatistikleri görüntüleyin:

demo_many_series1
| summarize num=count(), min_t=min(TIMESTAMP), max_t=max(TIMESTAMP) 
Num 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ölmelerindeki zaman serisi (dört gün × 24 saat = 96 nokta) normal saatlik dalgalanmayı gösterir:

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) 

Normal saatlik dalgalanmalarla dört gün içindeki ortalama okuma sayısını gösteren zaman serisi grafiğinin ekran görüntüsü.

Tek bir normal zaman serisi anormal desenlere sahip olabilecek binlerce örnekten toplandığından bu davranış yanıltıcıdır. Loc (konum), İşlem (işlem) ve DB (belirli makine) tarafından tanımlanan örnek başına bir zaman serisi oluşturun.

Kaç zaman serisi oluşturabilirsiniz?

demo_many_series1
| summarize by Loc, Op, DB
| count
Sayı
18339

Okuma sayısı ölçümü için 18.339 zaman serisi oluşturun. by yan tümcesini make-series deyimine ekleyin, doğrusal regresyon uygulayın ve en belirgin azalan eğilime sahip ilk iki zaman serisini seçin.

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

Normal trafiğe kıyasla okuma sayıları keskin bir şekilde azalan iki zaman serisinin ekran görüntüsü.

Ö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 yamaç
Loc 15 37 1151 -104,498.46510358342
Loc 13 37 1249 -86,614.02919932814

İki dakikadan daha az bir süre içinde sorgu yaklaşık 20.000 zaman serisini analiz eder ve ani okuma sayısı düşüşüyle ikisini algılar.

Bu özellikler ve platform performansı, zaman serisi analizi için güçlü bir çözüm sağlar.