Udostępnij za pośrednictwem


Samouczek: analizowanie danych w dziennikach usługi Azure Monitor przy użyciu notesu

Notesy to zintegrowane środowiska, które umożliwiają tworzenie i udostępnianie dokumentów za pomocą kodu na żywo, równań, wizualizacji i tekstu. Zintegrowanie notesu z obszarem roboczym usługi Log Analytics umożliwia utworzenie wieloetapowego procesu, który uruchamia kod w każdym kroku na podstawie wyników poprzedniego kroku. Takich usprawnionych procesów można używać do tworzenia potoków uczenia maszynowego, zaawansowanych narzędzi do analizy, przewodników rozwiązywania problemów (TSG) na potrzeby pomocy technicznej i nie tylko.

Integrowanie notesu z obszarem roboczym usługi Log Analytics umożliwia również:

  • Uruchamianie zapytań KQL i kodu niestandardowego w dowolnym języku.
  • Wprowadzenie nowych funkcji analizy i wizualizacji, takich jak nowe modele uczenia maszynowego, niestandardowe osie czasu i drzewa procesów.
  • Integrowanie zestawów danych poza dziennikami usługi Azure Monitor, takimi jak lokalne zestawy danych.
  • Skorzystaj ze zwiększonych limitów usług przy użyciu limitów interfejsu API zapytań w porównaniu z witryną Azure Portal.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Integrowanie notesu z obszarem roboczym usługi Log Analytics przy użyciu biblioteki klienta zapytań usługi Azure Monitor i biblioteki klienta tożsamości platformy Azure
  • Eksplorowanie i wizualizowanie danych z obszaru roboczego usługi Log Analytics w notesie
  • Pozyskiwanie danych z notesu do tabeli niestandardowej w obszarze roboczym usługi Log Analytics (opcjonalnie)

Aby zapoznać się z przykładem tworzenia potoku uczenia maszynowego w celu analizowania danych w dziennikach usługi Azure Monitor przy użyciu notesu, zobacz ten przykładowy notes: Wykrywanie anomalii w dziennikach usługi Azure Monitor przy użyciu technik uczenia maszynowego.

Napiwek

Aby obejść ograniczenia związane z interfejsem API, podziel większe zapytania na wiele mniejszych zapytań.

Wymagania wstępne

W celu skorzystania z tego samouczka potrzebne są następujące elementy:

  • Obszar roboczy usługi Azure Machine Learning z wystąpieniem obliczeniowym procesora CPU z:

    • Notes.
    • Jądro ustawione na język Python w wersji 3.8 lub nowszej.
  • Następujące role i uprawnienia:

    • W dziennikach usługi Azure Monitor: rola Współautor usługi Logs Analytics do odczytywania danych z i wysyłania danych do obszaru roboczego usługi Logs Analytics. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do obszarów roboczych usługi Log Analytics.

    • W usłudze Azure Machine Learning:

      • Rola właściciela lub współautora na poziomie grupy zasobów w celu utworzenia nowego obszaru roboczego usługi Azure Machine Learning w razie potrzeby.
      • Rola Współautor w obszarze roboczym usługi Azure Machine Learning, w którym jest uruchamiany notes.

      Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do obszaru roboczego usługi Azure Machine Learning.

Narzędzia i notesy

W tym samouczku użyjesz następujących narzędzi:

Narzędzie opis
Biblioteka klienta zapytań usługi Azure Monitor Umożliwia uruchamianie zapytań tylko do odczytu dotyczących danych w dziennikach usługi Azure Monitor.
Biblioteka klienta tożsamości platformy Azure Umożliwia klientom zestawu Azure SDK uwierzytelnianie za pomocą identyfikatora Entra firmy Microsoft.
Biblioteka klienta pozyskiwania usługi Azure Monitor Umożliwia wysyłanie dzienników niestandardowych do usługi Azure Monitor przy użyciu interfejsu API pozyskiwania dzienników. Wymagane do pozyskiwania analizowanych danych w tabeli niestandardowej w obszarze roboczym usługi Log Analytics (opcjonalnie)
Reguła zbierania danych, punkt końcowy zbierania danych i zarejestrowana aplikacja Wymagane do pozyskiwania analizowanych danych w tabeli niestandardowej w obszarze roboczym usługi Log Analytics (opcjonalnie)

Inne biblioteki zapytań, których można użyć, obejmują:

  • Biblioteka Kqlmagic umożliwia uruchamianie zapytań KQL bezpośrednio wewnątrz notesu w taki sam sposób, jak uruchamianie zapytań KQL z narzędzia usługi Log Analytics.
  • Biblioteka MSTICPY udostępnia szablonowe zapytania, które wywołują wbudowane funkcje szeregów czasowych KQL i uczenia maszynowego oraz udostępnia zaawansowane narzędzia do wizualizacji i analizy danych w obszarze roboczym usługi Log Analytics.

Inne środowiska notesów firmy Microsoft do zaawansowanej analizy obejmują:

1. Integrowanie obszaru roboczego usługi Log Analytics z notesem

Skonfiguruj notes, aby wykonywać zapytania dotyczące obszaru roboczego usługi Log Analytics:

  1. Zainstaluj biblioteki klienta pozyskiwania zapytań usługi Azure Monitor, tożsamości platformy Azure i usługi Azure Monitor wraz z biblioteką analizy danych Pandas, biblioteką wizualizacji Plotly:

    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. Ustaw poniższą zmienną LOGS_WORKSPACE_ID na identyfikator obszaru roboczego usługi Log Analytics. Zmienna jest obecnie ustawiona tak, aby korzystała z obszaru roboczego Pokaz usługi Azure Monitor, którego można użyć do pokazu notesu.

    LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
    
  3. Konfigurowanie LogsQueryClient uwierzytelniania i wykonywania zapytań dotyczących dzienników usługi Azure Monitor.

    Ten kod konfiguruje się LogsQueryClient do uwierzytelniania przy użyciu polecenia DefaultAzureCredential:

    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 Zazwyczaj obsługuje tylko uwierzytelnianie przy użyciu poświadczeń tokenu entra firmy Microsoft. Można jednak przekazać niestandardowe zasady uwierzytelniania, aby umożliwić korzystanie z kluczy interfejsu API. Dzięki temu klient może wykonywać zapytania dotyczące obszaru roboczego demonstracyjnego. Dostępność i dostęp do tego demonstracyjnego obszaru roboczego mogą ulec zmianie, dlatego zalecamy korzystanie z własnego obszaru roboczego usługi Log Analytics.

  4. Zdefiniuj funkcję pomocnika o nazwie query_logs_workspace, aby uruchomić dane zapytanie w obszarze roboczym usługi Log Analytics i zwrócić wyniki jako ramkę danych biblioteki Pandas.

    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. Eksplorowanie i wizualizowanie danych z obszaru roboczego usługi Log Analytics w notesie

Przyjrzyjmy się niektórym danym w obszarze roboczym, uruchamiając zapytanie z notesu:

  1. To zapytanie sprawdza, ile danych (w megabajtach) pozyskanych do każdej z tabel (typów danych) w obszarze roboczym usługi Log Analytics co godzinę w ciągu ostatniego tygodnia:

    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)
    

    Wynikowa ramka danych pokazuje pozyskiwanie godzinowe w każdej z tabel w obszarze roboczym usługi Log Analytics:

    Zrzut ekranu przedstawiający ramkę danych wygenerowaną w notesie z danymi pozyskiwania dzienników pobranymi z obszaru roboczego usługi Log Analytics.

  2. Teraz wyświetlmy dane jako wykres pokazujący godzinowe użycie dla różnych typów danych w czasie na podstawie ramki danych Pandas:

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

    Wynikowy wykres wygląda następująco:

    Wykres przedstawiający ilość danych pozyskanych do każdej z tabel w obszarze roboczym usługi Log Analytics w ciągu siedmiu dni.

    Pomyślnie wykonano zapytanie o dane dziennika z obszaru roboczego usługi Log Analytics i zwizualizowane w notesie.

3. Analizowanie danych

W prostym przykładzie weźmy pięć pierwszych wierszy:

analyzed_df = df.head(5)

Aby zapoznać się z przykładem implementowania technik uczenia maszynowego do analizowania danych w dziennikach usługi Azure Monitor, zobacz ten przykładowy notes: Wykrywanie anomalii w dziennikach usługi Azure Monitor przy użyciu technik uczenia maszynowego.

4. Pozyskiwanie analizowanych danych w tabeli niestandardowej w obszarze roboczym usługi Log Analytics (opcjonalnie)

Wyślij wyniki analizy do tabeli niestandardowej w obszarze roboczym usługi Log Analytics, aby wyzwolić alerty lub udostępnić je do dalszej analizy.

  1. Aby wysyłać dane do obszaru roboczego usługi Log Analytics, potrzebujesz niestandardowej tabeli, punktu końcowego zbierania danych, reguły zbierania danych i zarejestrowanej aplikacji Microsoft Entra z uprawnieniami do używania reguły zbierania danych, jak wyjaśniono w artykule Samouczek: wysyłanie danych do dzienników usługi Azure Monitor przy użyciu interfejsu API pozyskiwania dzienników (Azure Portal).

    Podczas tworzenia tabeli niestandardowej:

    1. Przekaż ten przykładowy plik, aby zdefiniować schemat tabeli:

      [
        {
          "TimeGenerated": "2023-03-19T19:56:43.7447391Z",    
          "ActualUsage": 40.1,    
          "DataType": "AzureDiagnostics"     
        } 
      ]
      
  2. Zdefiniuj stałe potrzebne dla interfejsu API pozyskiwania dzienników:

    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. Pozyskiwanie danych do tabeli niestandardowej w obszarze roboczym usługi Log Analytics:

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

    Uwaga

    Utworzenie tabeli w obszarze roboczym usługi Log Analytics może potrwać do 15 minut, aż pozyskane dane pojawią się w tabeli.

  4. Sprawdź, czy dane są teraz wyświetlane w tabeli niestandardowej.

    Zrzut ekranu przedstawiający zapytanie w usłudze Log Analytics w tabeli niestandardowej, do której pozyskano wyniki analizy z notesu.

Następne kroki

Dowiedz się więcej na temat wykonywania następujących czynności: