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ą:
- Notesy usługi Azure Synapse Analytics
- Notesy usługi Microsoft Fabric
- Notesy programu Visual Studio Code
1. Integrowanie obszaru roboczego usługi Log Analytics z notesem
Skonfiguruj notes, aby wykonywać zapytania dotyczące obszaru roboczego usługi Log Analytics:
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
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"
Konfigurowanie
LogsQueryClient
uwierzytelniania i wykonywania zapytań dotyczących dzienników usługi Azure Monitor.Ten kod konfiguruje się
LogsQueryClient
do uwierzytelniania przy użyciu poleceniaDefaultAzureCredential
: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.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:
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:
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:
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.
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:
Przekaż ten przykładowy plik, aby zdefiniować schemat tabeli:
[ { "TimeGenerated": "2023-03-19T19:56:43.7447391Z", "ActualUsage": 40.1, "DataType": "AzureDiagnostics" } ]
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
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.
Sprawdź, czy dane są teraz wyświetlane w tabeli niestandardowej.
Następne kroki
Dowiedz się więcej na temat wykonywania następujących czynności:
- Planowanie potoku uczenia maszynowego.
- Wykrywanie i analizowanie anomalii przy użyciu języka KQL.