Öğretici: Not defteri kullanarak Azure İzleyici Günlüklerindeki verileri analiz etme

Not defterleri canlı kod, denklemler, görselleştirmeler ve metinlerle belge oluşturmanıza ve paylaşmanıza olanak sağlayan tümleşik ortamlardır. Bir not defterini Log Analytics çalışma alanıyla tümleştirmek, önceki adımın sonuçlarına göre her adımda kod çalıştıran çok adımlı bir işlem oluşturmanıza olanak tanır. Makine öğrenmesi işlem hatları, gelişmiş analiz araçları, destek ihtiyaçları için sorun giderme kılavuzları (TSG) ve daha fazlasını oluşturmak için bu tür kolaylaştırılmış işlemleri kullanabilirsiniz.

Not defterini Log Analytics çalışma alanıyla tümleştirmek şunları da sağlar:

  • KQL sorgularını ve özel kodu herhangi bir dilde çalıştırın.
  • Yeni makine öğrenmesi modelleri, özel zaman çizelgeleri ve işlem ağaçları gibi yeni analiz ve görselleştirme özelliklerini tanıtın.
  • Şirket içi veri kümeleri gibi veri kümelerini Azure İzleyici Günlükleri dışında tümleştirin.
  • Azure portalıyla karşılaştırıldığında Sorgu API'sini kullanarak artan hizmet sınırlarından yararlanın.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Azure İzleyici Sorgu istemci kitaplığını ve Azure Identity istemci kitaplığını kullanarak bir not defterini Log Analytics çalışma alanınızla tümleştirme
  • Log Analytics çalışma alanınızdaki verileri bir not defterinde keşfetme ve görselleştirme
  • Not defterinizdeki verileri Log Analytics çalışma alanınızdaki özel bir tabloya alma (isteğe bağlı)

Not defteri kullanarak Azure İzleyici Günlüklerindeki verileri analiz etmek için bir makine öğrenmesi işlem hattı oluşturma örneği için şu örnek not defterine bakın: Makine öğrenmesi tekniklerini kullanarak Azure İzleyici Günlüklerindeki anomalileri algılama.

İpucu

API ile ilgili sınırlamaları geçici olarak çözmek için büyük sorguları birden çok küçük sorguya bölün.

Önkoşullar

Bu öğretici için şunları yapmanız gerekir:

  • CPU işlem örneğine sahip bir Azure Machine Learning çalışma alanı:

    • Bir not defteri.
    • Python 3.8 veya üzeri olarak ayarlanmış bir çekirdek.
  • Aşağıdaki roller ve izinler:

    • Azure İzleyici Günlükleri'nde: Logs Analytics çalışma alanınızdaki verileri okumak ve bu çalışma alanına veri göndermek için Logs Analytics Katkıda Bulunanı rolü. Daha fazla bilgi için bkz . Log Analytics çalışma alanlarına erişimi yönetme.

    • Azure Machine Learning'de:

      • Gerekirse yeni bir Azure Machine Learning çalışma alanı oluşturmak için kaynak grubu düzeyinde Sahip veya Katkıda Bulunan rolü.
      • Not defterinizi çalıştırdığınız Azure Machine Learning çalışma alanında Katkıda Bulunan rolü.

      Daha fazla bilgi için bkz . Azure Machine Learning çalışma alanına erişimi yönetme.

Araçlar ve not defterleri

Bu öğreticide şu araçları kullanacaksınız:

Araç Açıklama
Azure İzleyici Sorgusu istemci kitaplığı Azure İzleyici Günlüklerindeki veriler üzerinde salt okunur sorgular çalıştırmanızı sağlar.
Azure Identity istemci kitaplığı Azure SDK istemcilerinin Microsoft Entra Id ile kimlik doğrulaması gerçekleştirmesini sağlar.
Azure İzleyici Alımı istemci kitaplığı Günlük Alımı API'sini kullanarak Azure İzleyici'ye özel günlükler göndermenizi sağlar. Analiz edilen verileri Log Analytics çalışma alanınızdaki özel bir tabloya almak için gereklidir (isteğe bağlı)
Veri toplama kuralı, veri toplama uç noktası ve kayıtlı bir uygulama Analiz edilen verileri Log Analytics çalışma alanınızdaki özel bir tabloya almak için gereklidir (isteğe bağlı)

Kullanabileceğiniz diğer sorgu kitaplıkları şunlardır:

  • Kqlmagic kitaplığı , Log Analytics aracından KQL sorgularını çalıştırdığınız şekilde doğrudan bir not defteri içinde KQL sorguları çalıştırmanıza olanak tanır.
  • MSTICPY kitaplığı , yerleşik KQL zaman serisini ve makine öğrenmesi özelliklerini çağıran şablonlu sorgular sağlar ve Log Analytics çalışma alanında gelişmiş görselleştirme araçları ve veri çözümlemeleri sağlar.

Gelişmiş analiz için diğer Microsoft not defteri deneyimleri şunlardır:

1. Log Analytics çalışma alanınızı not defterinizle tümleştirme

Log Analytics çalışma alanınızı sorgulamak için not defterinizi ayarlayın:

  1. Azure İzleyici Sorgusu, Azure Kimliği ve Azure İzleyici Alımı istemci kitaplıklarının yanı sıra Pandas veri çözümleme kitaplığı, Plotly görselleştirme kitaplığını yükleyin:

    import sys
    
    !{sys.executable} -m pip install --upgrade azure-monitor-query azure-identity azure-monitor-ingestion
    
    !{sys.executable} -m pip install --upgrade pandas plotly 
    
  2. LOGS_WORKSPACE_ID Aşağıdaki değişkeni Log Analytics çalışma alanınızın kimliğine ayarlayın. Değişkeni şu anda not defterinin tanıtımını yapmak için kullanabileceğiniz Azure İzleyici Tanıtım çalışma alanını kullanacak şekilde ayarlanmıştır.

    LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
    
  3. Azure İzleyici Günlüklerinin kimliğini doğrulamak ve sorgulamak için ayarlayın LogsQueryClient .

    Bu kod kullanarak DefaultAzureCredentialkimlik doğrulaması yapmak için ayarlarLogsQueryClient:

    from azure.core.credentials import AzureKeyCredential
    from azure.core.pipeline.policies import AzureKeyCredentialPolicy
    from azure.identity import DefaultAzureCredential
    from azure.monitor.query import LogsQueryClient
    
    if LOGS_WORKSPACE_ID == "DEMO_WORKSPACE":
        credential = AzureKeyCredential("DEMO_KEY")
        authentication_policy = AzureKeyCredentialPolicy(name="X-Api-Key", credential=credential)
    else:
        credential = DefaultAzureCredential()
        authentication_policy = None
    
    logs_query_client = LogsQueryClient(credential, authentication_policy=authentication_policy)
    

    LogsQueryClient genellikle yalnızca Microsoft Entra belirteci kimlik bilgileriyle kimlik doğrulamayı destekler. Ancak, API anahtarlarının kullanımını etkinleştirmek için özel bir kimlik doğrulama ilkesi geçirebiliriz. Bu, istemcinin tanıtım çalışma alanını sorgulamasına olanak tanır. Bu tanıtım çalışma alanına yönelik kullanılabilirlik ve erişim değişebilir, bu nedenle kendi Log Analytics çalışma alanınızı kullanmanızı öneririz.

  4. Log Analytics çalışma alanında belirli bir sorguyu çalıştırmak ve sonuçları Pandas DataFrame olarak döndürmek için adlı query_logs_workspacebir yardımcı işlev tanımlayın.

    import pandas as pd
    import plotly.express as px
    
    from azure.monitor.query import LogsQueryStatus
    from azure.core.exceptions import HttpResponseError
    
    
    def query_logs_workspace(query):
        try:
            response = logs_query_client.query_workspace(LOGS_WORKSPACE_ID, query, timespan=None)
            if response.status == LogsQueryStatus.PARTIAL:
                error = response.partial_error
                data = response.partial_data
                print(error.message)
            elif response.status == LogsQueryStatus.SUCCESS:
                data = response.tables
            for table in data:
                my_data = pd.DataFrame(data=table.rows, columns=table.columns)        
        except HttpResponseError as err:
            print("something fatal happened")
            print (err)
        return my_data
    

2. Not defterinizdeki Log Analytics çalışma alanınızdaki verileri keşfetme ve görselleştirme

Şimdi not defterinden bir sorgu çalıştırarak çalışma alanında bazı verilere bakalım:

  1. Bu sorgu, log analytics çalışma alanınızdaki her bir tabloya (veri türleri) geçen hafta içinde her saat için ne kadar veri (Megabayt) aktardığınız denetler:

    TABLE = "Usage"
    
    QUERY = f"""
    let starttime = 7d; // Start date for the time series, counting back from the current date
    let endtime = 0d; // today 
    {TABLE} | project TimeGenerated, DataType, Quantity 
    | where TimeGenerated between (ago(starttime)..ago(endtime))
    | summarize ActualUsage=sum(Quantity) by TimeGenerated=bin(TimeGenerated, 1h), DataType
    """
    
    df = query_logs_workspace(QUERY)
    display(df)
    

    Sonuçta elde edilen DataFrame, Log Analytics çalışma alanında tabloların her birinde saatlik alımı gösterir:

    Log Analytics çalışma alanından alınan günlük alma verileriyle bir not defterinde oluşturulan DataFrame'in ekran görüntüsü.

  2. Şimdi verileri Pandas DataFrame'i temel alarak çeşitli veri türlerinin zaman içindeki saatlik kullanımını gösteren bir grafik olarak görüntüleyelim:

    df = df.sort_values(by="TimeGenerated")
    graph = px.line(df, x='TimeGenerated', y="ActualUsage", color='DataType', title="Usage in the last week - All data types")
    graph.show()
    

    Sonuçta elde edilen grafik şöyle görünür:

    Yedi gün içinde Log Analytics çalışma alanında tabloların her birine alınan veri miktarını gösteren grafik.

    Log Analytics çalışma alanınızdaki günlük verilerini not defterinizde başarıyla sorgulayıp görselleştirdiniz.

3. Verileri analiz etme

Basit bir örnek olarak, ilk beş satırı ele alalım:

analyzed_df = df.head(5)

Azure İzleyici Günlüklerindeki verileri analiz etmek için makine öğrenmesi teknikleri uygulama örneği için şu örnek not defterine bakın: Makine öğrenmesi tekniklerini kullanarak Azure İzleyici Günlüklerindeki anomalileri algılama.

4. Analiz edilen verileri Log Analytics çalışma alanınızdaki özel bir tabloya alma (isteğe bağlı)

Uyarıları tetikleyebilmek veya daha fazla analiz için kullanılabilir hale getirmek için çözümleme sonuçlarınızı Log Analytics çalışma alanınızdaki özel bir tabloya gönderin.

  1. Log Analytics çalışma alanınıza veri göndermek için özel bir tabloya, veri toplama uç noktasına, veri toplama kuralına ve Veri toplama kuralını kullanma iznine sahip kayıtlı bir Microsoft Entra uygulamasına ihtiyacınız vardır. Öğretici: Günlük alma API'si (Azure portalı) ile Azure İzleyici Günlüklerine veri gönderme.

    Özel tablonuzu oluştururken:

    1. Tablo şemasını tanımlamak için bu örnek dosyayı karşıya yükleyin:

      [
        {
          "TimeGenerated": "2023-03-19T19:56:43.7447391Z",    
          "ActualUsage": 40.1,    
          "DataType": "AzureDiagnostics"     
        } 
      ]
      
  2. Günlük Alımı API'sinde ihtiyacınız olan sabitleri tanımlayın:

    os.environ['AZURE_TENANT_ID'] = "<Tenant ID>"; #ID of the tenant where the data collection endpoint resides
    os.environ['AZURE_CLIENT_ID'] = "<Application ID>"; #Application ID to which you granted permissions to your data collection rule
    os.environ['AZURE_CLIENT_SECRET'] = "<Client secret>"; #Secret created for the application
    
    
    
    os.environ['LOGS_DCR_STREAM_NAME'] = "<Custom stream name>" ##Name of the custom stream from the data collection rule
    os.environ['LOGS_DCR_RULE_ID'] = "<Data collection rule immutableId>" # immutableId of your data collection rule
    os.environ['DATA_COLLECTION_ENDPOINT'] =  "<Logs ingestion URL of your endpoint>" # URL that looks like this: https://xxxx.ingest.monitor.azure.com
    
  3. Verileri Log Analytics çalışma alanınızdaki özel tabloya alın:

    from azure.core.exceptions import HttpResponseError
    from azure.identity import ClientSecretCredential
    from azure.monitor.ingestion import LogsIngestionClient
    import json
    
    
    credential = ClientSecretCredential(
        tenant_id=AZURE_TENANT_ID,
        client_id=AZURE_CLIENT_ID,
        client_secret=AZURE_CLIENT_SECRET
    )
    
    client = LogsIngestionClient(endpoint=DATA_COLLECTION_ENDPOINT, credential=credential, logging_enable=True)
    
    body = json.loads(analyzed_df.to_json(orient='records', date_format='iso'))
    
    try:
       response =  client.upload(rule_id=LOGS_DCR_RULE_ID, stream_name=LOGS_DCR_STREAM_NAME, logs=body)
       print("Upload request accepted")
    except HttpResponseError as e:
        print(f"Upload failed: {e}")
    

    Not

    Log Analytics çalışma alanınızda tablo oluşturduğunuzda, alınan verilerin tabloda görünmesi 15 dakika kadar sürebilir.

  4. Verilerin artık özel tablonuzda göründüğünü doğrulayın.

    Log Analytics'te not defterinden alınan analiz sonuçlarının alındığı özel bir tablodaki sorguyu gösteren ekran görüntüsü.

Sonraki adımlar

Şu konularda daha fazla bilgi edinin: