Azure Monitor クエリ クライアント ライブラリは、 Azure Monitor の 2 つのデータ プラットフォームに対して読み取り専用クエリを実行するために使用されます。
- ログ - 監視対象リソースからログとパフォーマンスのデータを収集して整理します。 Azure サービスからのプラットフォーム ログ、仮想マシン エージェントからのログとパフォーマンス データ、アプリからの使用状況とパフォーマンス データなど、さまざまなソースからのデータを 1 つの Azure Log Analytics ワークスペースに統合できます。 さまざまなデータ型は、 Kusto クエリ言語を使用してまとめて分析できます。
- メトリック - 監視対象リソースから数値データを時系列データベースに収集します。 メトリックは、一定の間隔で収集され、特定の時間におけるシステムの一部の側面を記述する数値です。 メトリックは軽量で、ほぼリアルタイムのシナリオをサポートできるため、アラートや問題の迅速な検出に役立ちます。
リソース:
はじめ
サポートされている環境
- Node.js の LTS バージョン
- Safari、Chrome、Microsoft Edge、Firefox の最新バージョン
詳細については、サポート ポリシーのを参照してください。
前提 条件
- Azure サブスクリプション
- TokenCredential 実装 (たとえば、資格情報の種類 "Azure Identity ライブラリ" など)
- ログのクエリを実行するには、次のいずれかが必要です。
- Azure Log Analytics ワークスペース
- 任意の種類の Azure リソース (ストレージ アカウント、Key Vault、Cosmos DB など)
- メトリックのクエリを実行するには、任意の種類の Azure リソース (ストレージ アカウント、Key Vault、Cosmos DB など) が必要です。
パッケージをインストールする
npm を使用して JavaScript 用 Azure Monitor Query クライアント ライブラリをインストールします。
npm install --save @azure/monitor-query
クライアントを作成する
ログまたはメトリックのクエリを実行するには、認証されたクライアントが必要です。 認証するために、次の例では @azure/identity パッケージの DefaultAzureCredential を使用します。
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, MetricsQueryClient, MetricsClient } from "@azure/monitor-query";
const credential = new DefaultAzureCredential();
// Create a LogsQueryClient
const logsQueryClient = new LogsQueryClient(credential);
// Create a MetricsQueryClient
const metricsQueryClient = new MetricsQueryClient(credential);
// Create a MetricsClient
const endpoint = " https://<endpoint>.monitor.azure.com/";
const metricsClient = new MetricsClient(endpoint, credential);
Azure ソブリン クラウド用にクライアントを構成する
既定では、ライブラリのクライアントは Azure パブリック クラウドを使用するように構成されます。 代わりにソブリン クラウドを使用するには、クライアントをインスタンス化するときに正しいエンドポイントと対象ユーザーの値を指定します。 例えば:
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, MetricsQueryClient, MetricsClient } from "@azure/monitor-query";
const credential = new DefaultAzureCredential();
// Create a LogsQueryClient
const logsQueryClient: LogsQueryClient = new LogsQueryClient(credential, {
endpoint: "https://api.loganalytics.azure.cn/v1",
audience: "https://api.loganalytics.azure.cn/.default",
});
// Create a MetricsQueryClient
const metricsQueryClient: MetricsQueryClient = new MetricsQueryClient(credential, {
endpoint: "https://management.chinacloudapi.cn",
audience: "https://monitor.azure.cn/.default",
});
// Create a MetricsClient
const endpoint = " https://<endpoint>.monitor.azure.cn/";
const metricsClient = new MetricsClient(endpoint, credential, {
audience: "https://monitor.azure.cn/.default",
});
注: 現在、 MetricsQueryClient
はメトリックのクエリに Azure Resource Manager (ARM) エンドポイントを使用しています。 このクライアントを使用する場合は、クラウドに対応する管理エンドポイントが必要です。 この詳細は、今後変更される可能性があります。
クエリを実行する
ログとメトリクスのクエリの例については、「 例 」セクションを参照してください。
主な概念
クエリ レートの制限と調整をログに記録します
Log Analytics サービスは、要求レートが高すぎると調整を適用します。 返される行の最大数などの制限は、Kusto クエリにも適用されます。 詳細については、「 クエリ API」を参照してください。
メトリック データ構造
メトリック値の各セットは、次の特性を持つ時系列です。
- 値が収集された時刻
- 値に関連付けられているリソース
- メトリックのカテゴリのように機能する名前空間
- メトリック名
- 値自体
- 多次元メトリックで説明されているように、一部のメトリックには複数のディメンションがあります。 カスタム メトリックには、最大 10 個のディメンションを含めることができます。
例
ログ クエリ
この LogsQueryClient
は、 Kusto クエリ言語を使用して Log Analytics ワークスペースのクエリを実行するために使用できます。
timespan.duration
は、ISO 8601 期間形式の文字列として指定できます。 一般的に使用される ISO 8601 の期間に用意されている Durations
定数を使用できます。
Log Analytics ワークスペース ID または Azure リソース ID でログを照会できます。 結果は、行のコレクションを含むテーブルとして返されます。
ワークスペース中心のログ クエリ
ワークスペース ID でクエリを実行するには、 LogsQueryClient.queryWorkspace
メソッドを使用します。
import { LogsQueryClient, Durations, LogsQueryResultStatus } from "@azure/monitor-query";
import { DefaultAzureCredential } from "@azure/identity";
const azureLogAnalyticsWorkspaceId = "<workspace_id>";
const logsQueryClient = new LogsQueryClient(new DefaultAzureCredential());
const kustoQuery = "AppEvents | limit 1";
const result = await logsQueryClient.queryWorkspace(azureLogAnalyticsWorkspaceId, kustoQuery, {
duration: Durations.twentyFourHours,
});
if (result.status === LogsQueryResultStatus.Success) {
const tablesFromResult = result.tables;
if (tablesFromResult.length === 0) {
console.log(`No results for query '${kustoQuery}'`);
return;
}
console.log(`This query has returned table(s) - `);
processTables(tablesFromResult);
} else {
console.log(`Error processing the query '${kustoQuery}' - ${result.partialError}`);
if (result.partialTables.length > 0) {
console.log(`This query has also returned partial data in the following table(s) - `);
processTables(result.partialTables);
}
}
function processTables(tablesFromResult) {
for (const table of tablesFromResult) {
const columnHeaderString = table.columnDescriptors
.map((column) => `${column.name}(${column.type}) `)
.join("| ");
console.log("| " + columnHeaderString);
for (const row of table.rows) {
const columnValuesString = row.map((columnValue) => `'${columnValue}' `).join("| ");
console.log("| " + columnValuesString);
}
}
}
リソース中心のログ クエリ
次の例では、Azure リソースから直接ログにクエリを実行する方法を示します。 ここでは、 queryResource
メソッドが使用され、Azure リソース ID が渡されます。 たとえば、/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{resource-provider}/{resource-type}/{resource-name}
のようにします。
リソース ID を検索するには:
- Azure portal でリソースのページに移動します。
- [概要] ブレードで、[JSON ビュー] リンクを選択します。
- 結果の JSON で、
id
プロパティの値をコピーします。
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, Durations, LogsQueryResultStatus } from "@azure/monitor-query";
const logsResourceId = "<the Resource Id for your logs resource>";
const tokenCredential = new DefaultAzureCredential();
const logsQueryClient = new LogsQueryClient(tokenCredential);
const kustoQuery = `MyTable_CL | summarize count()`;
console.log(`Running '${kustoQuery}' over the last One Hour`);
const queryLogsOptions = {
// explicitly control the amount of time the server can spend processing the query.
serverTimeoutInSeconds: 600, // sets the timeout to 10 minutes
// optionally enable returning additional statistics about the query's execution.
// (by default, this is off)
includeQueryStatistics: true,
};
const result = await logsQueryClient.queryResource(
logsResourceId,
kustoQuery,
{ duration: Durations.sevenDays },
queryLogsOptions,
);
const executionTime = (result as any)?.statistics?.query?.executionTime;
console.log(
`Results for query '${kustoQuery}', execution time: ${executionTime == null ? "unknown" : executionTime}`,
);
if (result.status === LogsQueryResultStatus.Success) {
const tablesFromResult = result.tables;
if (tablesFromResult.length === 0) {
console.log(`No results for query '${kustoQuery}'`);
return;
}
console.log(`This query has returned table(s) - `);
processTables(tablesFromResult);
} else {
console.log(`Error processing the query '${kustoQuery}' - ${result.partialError}`);
if (result.partialTables.length > 0) {
console.log(`This query has also returned partial data in the following table(s) - `);
processTables(result.partialTables);
}
}
function processTables(tablesFromResult) {
for (const table of tablesFromResult) {
const columnHeaderString = table.columnDescriptors
.map((column) => `${column.name}(${column.type}) `)
.join("| ");
console.log("| " + columnHeaderString);
for (const row of table.rows) {
const columnValuesString = row.map((columnValue) => `'${columnValue}' `).join("| ");
console.log("| " + columnValuesString);
}
}
}
ログのクエリ応答を処理する
LogsQueryClient
の queryWorkspace
関数は、LogsQueryResult
オブジェクトを返します。 オブジェクト タイプは、 LogsQuerySuccessfulResult
または LogsQueryPartialResult
です。 応答の階層を次に示します。
LogsQuerySuccessfulResult
|---statistics
|---visualization
|---status ("Success")
|---tables (list of `LogsTable` objects)
|---name
|---rows
|---columnDescriptors (list of `LogsColumn` objects)
|---name
|---type
LogsQueryPartialResult
|---statistics
|---visualization
|---status ("PartialFailure")
|---partialError
|--name
|--code
|--message
|--stack
|---partialTables (list of `LogsTable` objects)
|---name
|---rows
|---columnDescriptors (list of `LogsColumn` objects)
|---name
|---type
たとえば、テーブルで応答を処理するには、次のようにします。
function processTables(tablesFromResult) {
for (const table of tablesFromResult) {
const columnHeaderString = table.columnDescriptors
.map((column) => `${column.name}(${column.type}) `)
.join("| ");
console.log("| " + columnHeaderString);
for (const row of table.rows) {
const columnValuesString = row.map((columnValue) => `'${columnValue}' `).join("| ");
console.log("| " + columnValuesString);
}
}
}
完全なサンプルは ここにあります。
バッチ ログ クエリ
次の例では、バッチ クエリ API を使用して複数のクエリを同時に送信する方法を示します。 クエリは、 BatchQuery
オブジェクトのリストとして表すことができます。
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, LogsQueryResultStatus } from "@azure/monitor-query";
const monitorWorkspaceId = "<workspace_id>";
const tokenCredential = new DefaultAzureCredential();
const logsQueryClient = new LogsQueryClient(tokenCredential);
const kqlQuery = "AppEvents | project TimeGenerated, Name, AppRoleInstance | limit 1";
const queriesBatch = [
{
workspaceId: monitorWorkspaceId,
query: kqlQuery,
timespan: { duration: "P1D" },
},
{
workspaceId: monitorWorkspaceId,
query: "AzureActivity | summarize count()",
timespan: { duration: "PT1H" },
},
{
workspaceId: monitorWorkspaceId,
query:
"AppRequests | take 10 | summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId",
timespan: { duration: "PT1H" },
},
{
workspaceId: monitorWorkspaceId,
query: "AppRequests | take 2",
timespan: { duration: "PT1H" },
includeQueryStatistics: true,
},
];
const result = await logsQueryClient.queryBatch(queriesBatch);
if (result == null) {
throw new Error("No response for query");
}
let i = 0;
for (const response of result) {
console.log(`Results for query with query: ${queriesBatch[i]}`);
if (response.status === LogsQueryResultStatus.Success) {
console.log(
`Printing results from query '${queriesBatch[i].query}' for '${queriesBatch[i].timespan}'`,
);
processTables(response.tables);
} else if (response.status === LogsQueryResultStatus.PartialFailure) {
console.log(
`Printing partial results from query '${queriesBatch[i].query}' for '${queriesBatch[i].timespan}'`,
);
processTables(response.partialTables);
console.log(
` Query had errors:${response.partialError.message} with code ${response.partialError.code}`,
);
} else {
console.log(`Printing errors from query '${queriesBatch[i].query}'`);
console.log(` Query had errors:${response.message} with code ${response.code}`);
}
// next query
i++;
}
function processTables(tablesFromResult) {
for (const table of tablesFromResult) {
const columnHeaderString = table.columnDescriptors
.map((column) => `${column.name}(${column.type}) `)
.join("| ");
console.log("| " + columnHeaderString);
for (const row of table.rows) {
const columnValuesString = row.map((columnValue) => `'${columnValue}' `).join("| ");
console.log("| " + columnValuesString);
}
}
}
ログのバッチ クエリ応答を処理する
LogsQueryClient
の queryBatch
関数は、LogsQueryBatchResult
オブジェクトを返します。
LogsQueryBatchResult
には、次の可能なタイプのオブジェクトのリストが含まれています。
LogsQueryPartialResult
LogsQuerySuccessfulResult
LogsQueryError
応答の階層を次に示します。
LogsQuerySuccessfulResult
|---statistics
|---visualization
|---status ("Success")
|---tables (list of `LogsTable` objects)
|---name
|---rows
|---columnDescriptors (list of `LogsColumn` objects)
|---name
|---type
LogsQueryPartialResult
|---statistics
|---visualization
|---status ("PartialFailure")
|---partialError
|--name
|--code
|--message
|--stack
|---partialTables (list of `LogsTable` objects)
|---name
|---rows
|---columnDescriptors (list of `LogsColumn` objects)
|---name
|---type
LogsQueryError
|--name
|--code
|--message
|--stack
|--status ("Failure")
たとえば、次のコードはバッチ ログクエリ応答を処理します。
import { LogsQueryResultStatus } from "@azure/monitor-query";
async function processBatchResult(result, queriesBatch) {
let i = 0;
for (const response of result) {
console.log(`Results for query with query: ${queriesBatch[i]}`);
if (response.status === LogsQueryResultStatus.Success) {
console.log(
`Printing results from query '${queriesBatch[i].query}' for '${queriesBatch[i].timespan}'`,
);
processTables(response.tables);
} else if (response.status === LogsQueryResultStatus.PartialFailure) {
console.log(
`Printing partial results from query '${queriesBatch[i].query}' for '${queriesBatch[i].timespan}'`,
);
processTables(response.partialTables);
console.log(
` Query had errors:${response.partialError.message} with code ${response.partialError.code}`,
);
} else {
console.log(`Printing errors from query '${queriesBatch[i].query}'`);
console.log(` Query had errors:${response.message} with code ${response.code}`);
}
// next query
i++;
}
}
function processTables(tablesFromResult) {
for (const table of tablesFromResult) {
const columnHeaderString = table.columnDescriptors
.map((column) => `${column.name}(${column.type}) `)
.join("| ");
console.log("| " + columnHeaderString);
for (const row of table.rows) {
const columnValuesString = row.map((columnValue) => `'${columnValue}' `).join("| ");
console.log("| " + columnValuesString);
}
}
}
完全なサンプルは ここにあります。
高度なログクエリシナリオ
ログクエリのタイムアウトを設定する
一部のログ クエリの実行には 3 分以上かかります。 既定のサーバー タイムアウトは 3 分です。 サーバーのタイムアウトを最大 10 分まで増やすことができます。 次の例では、 LogsQueryOptions
オブジェクトの serverTimeoutInSeconds
プロパティを使用して、サーバーのタイムアウトを 10 分に増やしています。
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, Durations } from "@azure/monitor-query";
const azureLogAnalyticsWorkspaceId = "<workspace_id>";
const tokenCredential = new DefaultAzureCredential();
const logsQueryClient = new LogsQueryClient(tokenCredential);
const kqlQuery = "AppEvents | project TimeGenerated, Name, AppRoleInstance | limit 1";
// setting optional parameters
const queryLogsOptions = {
// explicitly control the amount of time the server can spend processing the query.
serverTimeoutInSeconds: 600, // 600 seconds = 10 minutes
};
const result = await logsQueryClient.queryWorkspace(
azureLogAnalyticsWorkspaceId,
kqlQuery,
{ duration: Durations.twentyFourHours },
queryLogsOptions,
);
const status = result.status;
複数のワークスペースに対してクエリを実行する
同じログ クエリを複数の Log Analytics ワークスペースで実行できます。 Kusto クエリに加えて、次のパラメーターが必要です。
-
workspaceId
- 最初の (プライマリ) ワークスペース ID。 -
additionalWorkspaces
- ワークスペースの一覧 (workspaceId
パラメーターで指定されたワークスペースを除く)。 パラメーターのリスト アイテムは、次の識別子形式で構成できます。- 修飾されたワークスペース名
- ワークスペース ID
- Azure リソース ID
たとえば、次のクエリは 3 つのワークスペースで実行されます。
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, Durations } from "@azure/monitor-query";
const azureLogAnalyticsWorkspaceId = "<workspace_id>";
const tokenCredential = new DefaultAzureCredential();
const logsQueryClient = new LogsQueryClient(tokenCredential);
const kqlQuery = "AppEvents | project TimeGenerated, Name, AppRoleInstance | limit 1";
// setting optional parameters
const queryLogsOptions = {
additionalWorkspaces: ["<workspace2>", "<workspace3>"],
};
const result = await logsQueryClient.queryWorkspace(
azureLogAnalyticsWorkspaceId,
kqlQuery,
{ duration: Durations.twentyFourHours },
queryLogsOptions,
);
const status = result.status;
各ワークスペースの結果を表示するには、 TenantId
列を使用して結果を並べ替えるか、Kusto クエリで結果をフィルター処理します。
結果を TenantId で並べ替える
AppEvents | order by TenantId
TenantId で結果をフィルター処理する
AppEvents | filter TenantId == "<workspace2>"
完全なサンプルは ここにあります。
統計情報を含める
CPU やメモリ消費量などのクエリ実行統計をログに取得するには:
-
LogsQueryOptions.includeQueryStatistics
プロパティをtrue
に設定します。 -
LogsQueryResult
オブジェクト内のstatistics
フィールドにアクセスします。
次の例では、クエリの実行時間を出力します。
import { LogsQueryClient, Durations } from "@azure/monitor-query";
import { DefaultAzureCredential } from "@azure/identity";
const monitorWorkspaceId = "<workspace_id>";
const logsQueryClient = new LogsQueryClient(new DefaultAzureCredential());
const kustoQuery = "AzureActivity | top 10 by TimeGenerated";
const result = await logsQueryClient.queryWorkspace(
monitorWorkspaceId,
kustoQuery,
{ duration: Durations.oneDay },
{
includeQueryStatistics: true,
},
);
const executionTime = (result as any)?.statistics?.query?.executionTime;
console.log(
`Results for query '${kustoQuery}', execution time: ${executionTime == null ? "unknown" : executionTime}`,
);
statistics
ペイロードの構造はクエリによって異なるため、Record<string, unknown>
戻り値の型が使用されます。 未加工の JSON 応答が含まれています。 統計は、JSON の query
プロパティ内にあります。 例えば:
{
"query": {
"executionTime": 0.0156478,
"resourceUsage": {...},
"inputDatasetStatistics": {...},
"datasetStatistics": [{...}]
}
}
視覚化を含める
render 演算子を使用してログクエリの視覚化データを取得するには:
-
LogsQueryOptions.includeVisualization
プロパティをtrue
に設定します。 -
LogsQueryResult
オブジェクト内のvisualization
フィールドにアクセスします。
例えば:
import { LogsQueryClient, Durations } from "@azure/monitor-query";
import { DefaultAzureCredential } from "@azure/identity";
const monitorWorkspaceId = "<workspace_id>";
const logsQueryClient = new LogsQueryClient(new DefaultAzureCredential());
const result = await logsQueryClient.queryWorkspace(
monitorWorkspaceId,
`StormEvents
| summarize event_count = count() by State
| where event_count > 10
| project State, event_count
| render columnchart`,
{ duration: Durations.oneDay },
{
includeVisualization: true,
},
);
console.log("visualization result:", result.visualization);
visualization
ペイロードの構造はクエリによって異なるため、Record<string, unknown>
戻り値の型が使用されます。 未加工の JSON 応答が含まれています。 例えば:
{
"visualization": "columnchart",
"title": "the chart title",
"accumulate": false,
"isQuerySorted": false,
"kind": null,
"legend": null,
"series": null,
"yMin": "NaN",
"yMax": "NaN",
"xAxis": null,
"xColumn": null,
"xTitle": "x axis title",
"yAxis": null,
"yColumns": null,
"ySplit": null,
"yTitle": null,
"anomalyColumns": null
}
メトリック クエリ
次の例では、 Azure Metrics Advisor サブスクリプションのメトリックを取得します。
リソース URI は、メトリックが照会されるリソースの URI である必要があります。 通常は /subscriptions/<id>/resourceGroups/<rg-name>/providers/<source>/topics/<resource-name>
という形式です。
リソース URI を検索するには:
- Azure portal でリソースのページに移動します。
- [概要] ブレードで、[JSON ビュー] リンクを選択します。
- 結果の JSON で、
id
プロパティの値をコピーします。
import { DefaultAzureCredential } from "@azure/identity";
import { MetricsQueryClient, Durations } from "@azure/monitor-query";
const metricsResourceId = "<the Resource Id for your metrics resource>";
const tokenCredential = new DefaultAzureCredential();
const metricsQueryClient = new MetricsQueryClient(tokenCredential);
const metricNames = [];
const metricDefinitions = metricsQueryClient.listMetricDefinitions(metricsResourceId);
for await (const { id, name } of metricDefinitions) {
console.log(` metricDefinitions - ${id}, ${name}`);
if (name) {
metricNames.push(name);
}
}
const [firstMetricName, secondMetricName] = metricNames;
if (firstMetricName && secondMetricName) {
console.log(`Picking an example metric to query: ${firstMetricName} and ${secondMetricName}`);
const metricsResponse = await metricsQueryClient.queryResource(
metricsResourceId,
[firstMetricName, secondMetricName],
{
granularity: "PT1M",
timespan: { duration: Durations.fiveMinutes },
},
);
console.log(
`Query cost: ${metricsResponse.cost}, interval: ${metricsResponse.granularity}, time span: ${metricsResponse.timespan}`,
);
const metrics = metricsResponse.metrics;
console.log(`Metrics:`, JSON.stringify(metrics, undefined, 2));
const metric = metricsResponse.getMetricByName(firstMetricName);
console.log(`Selected Metric: ${firstMetricName}`, JSON.stringify(metric, undefined, 2));
} else {
console.error(`Metric names are not defined - ${firstMetricName} and ${secondMetricName}`);
}
前のサンプルでは、metricsResponse
のメトリック結果は、ユーザーが queryResource
関数の metricNames
配列引数でメトリック名を指定した順序に従って並べ替えられています。 ユーザーが [firstMetricName, secondMetricName]
を指定した場合、firstMetricName
の結果は、metricResponse
の secondMetricName
の結果の前に表示されます。
メトリック クエリの応答を処理する
metrics queryResource
関数は、 QueryMetricsResult
オブジェクトを返します。
QueryMetricsResult
オブジェクトには、Metric
型のオブジェクト、interval
、namespace
、timespan
のリストなどのプロパティが含まれています。
Metric
オブジェクトリストには、metrics
プロパティを使用してアクセスできます。 このリストの各 Metric
オブジェクトには、 TimeSeriesElement
オブジェクトのリストが含まれています。 各 TimeSeriesElement
には、 data
プロパティと metadataValues
プロパティが含まれています。 ビジュアル形式では、応答のオブジェクト階層は次の構造のようになります。
QueryMetricsResult
|---cost
|---timespan (of type `QueryTimeInterval`)
|---granularity
|---namespace
|---resourceRegion
|---metrics (list of `Metric` objects)
|---id
|---type
|---name
|---unit
|---displayDescription
|---errorCode
|---timeseries (list of `TimeSeriesElement` objects)
|---metadataValues
|---data (list of data points represented by `MetricValue` objects)
|---timeStamp
|---average
|---minimum
|---maximum
|---total
|---count
|---getMetricByName(metricName): Metric | undefined (convenience method)
応答の処理例
import { DefaultAzureCredential } from "@azure/identity";
import { MetricsQueryClient, Durations } from "@azure/monitor-query";
const metricsResourceId = "<the Resource Id for your metrics resource>";
const tokenCredential = new DefaultAzureCredential();
const metricsQueryClient = new MetricsQueryClient(tokenCredential);
console.log(`Picking an example metric to query: MatchedEventCount`);
const metricsResponse = await metricsQueryClient.queryResource(
metricsResourceId,
["MatchedEventCount"],
{
timespan: {
duration: Durations.fiveMinutes,
},
granularity: "PT1M",
aggregations: ["Count"],
},
);
console.log(
`Query cost: ${metricsResponse.cost}, granularity: ${metricsResponse.granularity}, time span: ${metricsResponse.timespan}`,
);
const metrics = metricsResponse.metrics;
for (const metric of metrics) {
console.log(metric.name);
for (const timeseriesElement of metric.timeseries) {
for (const metricValue of timeseriesElement.data!) {
if (metricValue.count !== 0) {
console.log(`There are ${metricValue.count} matched events at ${metricValue.timeStamp}`);
}
}
}
}
完全なサンプルは ここにあります。
複数のリソースのメトリックのクエリを実行する
1 つの要求で複数の Azure リソースのメトリックをクエリするには、 MetricsClient.queryResources
メソッドを使用します。 このメソッドは次のとおりです。
-
MetricsClient
メソッドとは異なるAPIを呼び出します。 - クライアントの作成時にリージョン エンドポイントが必要です。 (例: https://westus3.metrics.monitor.azure.com")。
各 Azure リソースは次の場所に存在する必要があります。
- クライアントの作成時に指定されたエンドポイントと同じリージョン。
- 同じ Azure サブスクリプション。
その上:
- ユーザーは、Azure サブスクリプション レベルで監視データを読み取る権限を持っている必要があります。 たとえば、クエリ対象のサブスクリプションに対する 監視閲覧者ロール などです。
- クエリを実行するメトリックを含むメトリック名前空間を指定する必要があります。 メトリクス名前空間のリストについては、「 リソースタイプ別のサポートされているメトリクスとログカテゴリ」を参照してください。
import { DefaultAzureCredential } from "@azure/identity";
import { MetricsClient } from "@azure/monitor-query";
const resourceIds = [
"/subscriptions/0000000-0000-000-0000-000000/resourceGroups/test/providers/Microsoft.OperationalInsights/workspaces/test-logs",
"/subscriptions/0000000-0000-000-0000-000000/resourceGroups/test/providers/Microsoft.OperationalInsights/workspaces/test-logs2",
];
const metricsNamespace = "<YOUR_METRICS_NAMESPACE>";
const metricNames = ["requests", "count"];
const endpoint = " https://<endpoint>.monitor.azure.com/";
const credential = new DefaultAzureCredential();
const metricsClient = new MetricsClient(endpoint, credential);
const result = await metricsClient.queryResources(resourceIds, metricNames, metricsNamespace);
各 Azure リソースの種類で使用できるメトリックとディメンションのインベントリについては、「 Azure Monitor でサポートされているメトリック」を参照してください。
トラブルシューティング
さまざまな障害シナリオを診断するには、 トラブルシューティング ガイドを参照してください。
次の手順
Azure Monitor の詳細については、 Azure Monitor サービスのドキュメントを参照してください。
貢献
このライブラリに投稿する場合は、コードをビルドしてテストする方法の詳細については、投稿ガイド を参照してください。
このモジュールのテストは、ライブ テストと単体テストの組み合わせであり、Azure Monitor インスタンスを用意する必要があります。 テストを実行するには、次を実行する必要があります。
rush update
rush build -t @azure/monitor-query
cd into sdk/monitor/monitor-query
-
sample.env
ファイルを.env
- エディターで
.env
ファイルを開き、値を入力します。 -
npm run test
。
詳細については、 テスト フォルダをご覧ください。
関連プロジェクト
- Microsoft Azure SDK for JavaScript の
- Azure Monitor
Azure SDK for JavaScript