チュートリアル: ノートブックを使用して Azure Monitor ログ データを分析する
ノートブックは、ライブ コード、数式、視覚化、テキストを使用してドキュメントを作成および共有できる統合環境です。 ノートブックと Log Analytics ワークスペースを統合すると、前の手順の結果に基づいて各ステップでコードを実行するマルチステップ プロセスを作成できます。 このような合理化されたプロセスを使用して、機械学習パイプライン、高度な分析ツール、サポート ニーズに対応したトラブルシューティング ガイド (TSG) などを構築できます。
ノートブックと Log Analytics ワークスペースを統合すると、次のことができます。
- 任意の言語で KQL クエリとカスタム コードを実行します。
- 新しい機械学習モデル、カスタム タイムライン、プロセス ツリーなど、新しい分析と視覚化機能を導入します。
- オンプレミスのデータ セットなど、Azure Monitor ログの外部にデータ セットを統合します。
- クエリ API の制限を使用して、Azure portal と比較してサービスの制限を増やします。
このチュートリアルでは、以下の内容を学習します。
- Azure Monitor クエリ クライアント ライブラリと AzureI dentity クライアント ライブラリを使用してノートブックを Log Analytics ワークスペースと統合する
- ノートブックで Log Analytics ワークスペースからデータを探索して視覚化する
- ノートブックから Log Analytics ワークスペースのカスタム テーブルにデータを取り込む (省略可能)
ノートブックを使用して Azure Monitor ログのデータを分析する機械学習パイプラインをビルドする方法の例については、「サンプル ノートブック: 機械学習手法を使用して Azure Monitor ログの異常を検出する」を参照してください。
ヒント
API 関連の制限を回避するには、より大きなクエリを複数の小さなクエリに分割します。
前提条件
このチュートリアルには、次のものが必要です。
コンピューティング インスタンス を備えた Azure Machine Learning のワークスペース 。
- ノートブック。
- Python 3.8 以降に設定されたカーネル。
次のロールとアクセス許可:
Azure Monitor ログで: Logs Analytics 共同作成者ロールからデータを読み取り、Logs Analytics ワークスペースにデータを送信します 。 詳細については、「Log Analytics ワークスペースへのアクセスを管理する」を参照してください。
Azure Machine Learning で:
- 必要に応じて、新しい Azure Machine Learning ワークスペースを作成するための、リソース グループ レベルの所有者または共同作成者ロール。
- ノートブックを実行する Azure Machine Learning ワークスペースへの共同作成者ロール。
詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理」を参照してください。
ツールとノートブック
このチュートリアルでは、次のツールを使用します。
ツール | 説明 |
---|---|
Azure Monitor クエリ クライアント ライブラリ | Azure Monitor ログ内のデータに対して読み取り専用クエリを実行できます。 |
Azure ID クライアント ライブラリ | Azure SDK クライアントが Microsoft Entra ID で認証できるようにします。 |
Azure Monitor インジェスト クライアント ライブラリ | ログ インジェスト API を使用して、カスタム ログを Azure Monitor に送信できます。 Log Analytics ワークスペース内のカスタム テーブルに分析されたデータを取り込むには必須 (省略可能) |
データ収集ルール、 データ収集エンドポイント、および 登録済みアプリケーション | Log Analytics ワークスペース内のカスタム テーブルに分析されたデータを取り込むには必須 (省略可能) |
使用できるその他のクエリ ライブラリは次のとおりです。
- Kqlmagic ライブラリ を使用すると、Log Analytics ツールから KQL クエリを実行するのと同じ方法で、ノートブック内で KQL クエリを直接実行できます。
- MSTICPY ライブラリ は、組み込みの KQL 時系列および機械学習機能を呼び出すテンプレート化されたクエリを提供し、Log Analytics ワークスペース内のデータの高度な視覚化ツールと分析を提供します。
高度な分析のためのその他の Microsoft ノートブック エクスペリエンスは次のとおりです。
1. Log Analytics ワークスペースをノートブックと統合する
Log Analytics ワークスペースに対してクエリを実行するようにノートブックを設定します。
Pandas データ分析ライブラリ Plotly 視覚化ライブラリと共に、Azure Monitor クエリ、Azure Identity、Azure Monitor インジェスト クライアント ライブラリをインストールします。
import sys !{sys.executable} -m pip install --upgrade azure-monitor-query azure-identity azure-monitor-ingestion !{sys.executable} -m pip install --upgrade pandas plotly
次の
LOGS_WORKSPACE_ID
変数を Log Analytics ワークスペースの ID に設定します。 変数は現在、ノートブックのデモに使用できる Azure Monitor デモ ワークスペースを使用するように設定されています。LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
Azure Monitor ログの認証とクエリを実行するように
LogsQueryClient
を設定します。このコードは、
DefaultAzureCredential
を使用して認証するようにLogsQueryClient
を設定します。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
は Microsoft Entra トークン資格情報を使った認証のみをサポートします。 ただし、カスタム認証ポリシーを渡して API キーの使用を有効にすることはできます。 これにより、クライアントは デモ ワークスペースに対してクエリを実行できます。 このデモ ワークスペースの可用性とアクセスは変更される可能性があるため、独自の Log Analytics ワークスペースを使用することをお勧めします。Log Analytics ワークスペースで特定のクエリを実行し、結果を Pandas DataFrame として返す
query_logs_workspace
と呼ばれるヘルパー関数を定義します。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. ノートブックで Log Analytics ワークスペースからデータを探索して視覚化する
ノートブックからクエリを実行して、ワークスペース内のデータを見てみましょう。
このクエリでは、過去 1 週間に Log Analytics ワークスペースの各テーブル (データ型) に取り込んだデータの量 (メガバイト単位) を確認します。
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)
結果の DataFrame には、Log Analytics ワークスペース内の各テーブルの 1 時間ごとのインジェストが表示されます。
次に、Pandas DataFrame に基づいて、時間の経過に伴うさまざまなデータ型の時間単位の使用状況を示すグラフとしてデータを表示してみましょう。
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()
結果の グラフ は次のようになります。
ノートブック内の Log Analytics ワークスペースからログ データのクエリと視覚化が正常に完了しました。
3. データを分析する
簡単な例として、最初の 5 行を見てみましょう。
analyzed_df = df.head(5)
Azure Monitor ログのデータを分析する機械学習手法を実装する方法の例については、「サンプル ノートブック: 機械学習手法を使用して Azure Monitor ログの異常を検出する」を参照してください。
4. Log Analytics ワークスペース内のカスタム テーブルに分析されたデータを取り込む (省略可能)
Log Analytics ワークスペース内のカスタム テーブルに分析結果を送信して、アラートをトリガーしたり、さらに分析できるようにしたりします。
Log Analytics ワークスペースにデータを送信するには、「チュートリアル: ログ インジェスト API を使って Azure Monitor ログにデータを送信する (Azure portal)」で説明されているように、カスタム テーブル、データ収集エンドポイント、データ収集ルール、データ収集ルールを使うアクセス許可を持つ登録済みの Microsoft Entra アプリケーションが必要です。
カスタム テーブルを作成する場合:
次のサンプル ファイルをアップロードして、テーブル スキーマを定義します。
[ { "TimeGenerated": "2023-03-19T19:56:43.7447391Z", "ActualUsage": 40.1, "DataType": "AzureDiagnostics" } ]
ログ インジェスト API に必要な定数を定義します。
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
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}")
Note
Log Analytics ワークスペースにテーブルを作成すると、取り込まれたデータがテーブルに表示されるまでに最大 15 分かかることがあります。
カスタム テーブルにデータが表示されることを確認します。
次のステップ
以下の方法についての詳細を確認します。