Pustaka klien Azure Monitor Query untuk JavaScript - versi 1.3.0
Pustaka klien Azure Monitor Query digunakan untuk menjalankan kueri baca-saja terhadap dua platform data Azure Monitor:
- Log - Mengumpulkan dan mengatur data log dan performa dari sumber daya yang dipantau. Data dari berbagai sumber seperti log platform dari layanan Azure, data log dan performa dari agen komputer virtual, serta data penggunaan dan performa dari aplikasi dapat dikonsolidasikan ke dalam satu ruang kerja Azure Log Analytics. Berbagai jenis data dapat dianalisis bersama menggunakan Bahasa Kueri Kusto.
- Metrik - Mengumpulkan data numerik dari sumber daya yang dipantau ke dalam database rangkaian waktu. Metrik adalah nilai numerik yang dikumpulkan secara interval dan menggambarkan beberapa aspek sistem pada waktu tertentu. Metrik ringan dan mampu mendukung skenario mendekati real-time, membuatnya berguna untuk memperingatkan dan mendeteksi masalah dengan cepat.
Sumber Daya:
Memulai
Lingkungan yang didukung
- Versi LTS dari Node.js
- Versi terbaru Safari, Chrome, Microsoft Edge, dan Firefox
Untuk informasi selengkapnya, lihat kebijakan dukungan kami.
Prasyarat
- Langganan Azure
- Implementasi TokenCredential , seperti jenis kredensial pustaka Azure Identity.
- Untuk mengkueri Log, Anda memerlukan salah satu hal berikut:
- Ruang kerja Azure Log Analytics
- Sumber daya Azure dalam bentuk apa pun (Akun Penyimpanan, Key Vault, Cosmos DB, dll.)
- Untuk mengkueri Metrik, Anda memerlukan sumber daya Azure dalam bentuk apa pun (Akun Penyimpanan, Key Vault, Cosmos DB, dll.).
Instal paketnya
Instal pustaka klien Kueri Azure Monitor untuk JavaScript dengan npm:
npm install --save @azure/monitor-query
Membuat klien
Klien yang diautentikasi diperlukan untuk mengkueri Log atau Metrik. Untuk mengautentikasi, contoh berikut menggunakan DefaultAzureCredential dari paket @azure/identitas .
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, MetricsQueryClient, MetricsBatchQueryClient } from "@azure/monitor-query";
const credential = new DefaultAzureCredential();
const logsQueryClient: LogsQueryClient = new LogsQueryClient(credential);
// or
const metricsQueryClient: MetricsQueryClient = new MetricsQueryClient(credential);
// or
const endPoint: string = "<YOUR_METRICS_ENDPOINT>"; //for example, https://eastus.metrics.monitor.azure.com/
const metricsQueryClient: MetricsQueryClient = new MetricsQueryClient(endPoint, credential);
Mengonfigurasi klien untuk sovereign cloud Azure
Secara default, klien pustaka dikonfigurasi untuk menggunakan Azure Public Cloud. Untuk menggunakan sovereign cloud sebagai gantinya, berikan nilai titik akhir dan audiens yang benar saat membuat instans klien. Contohnya:
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, MetricsQueryClient, MetricsClient } from "@azure/monitor-query";
const credential = new DefaultAzureCredential();
const logsQueryClient: LogsQueryClient = new LogsQueryClient(credential, {
endpoint: "https://api.loganalytics.azure.cn/v1",
audience: "https://api.loganalytics.azure.cn/.default",
});
// or
const metricsQueryClient: MetricsQueryClient = new MetricsQueryClient(credential, {
endpoint: "https://management.chinacloudapi.cn",
audience: "https://monitor.azure.cn/.default",
});
// or
const endPoint: string = "<YOUR_METRICS_ENDPOINT>"; //for example, https://eastus.metrics.monitor.azure.com/
const metricsClient: MetricsClient = new MetricsClient(endPoint, credential, {
audience: "https://monitor.azure.cn/.default",
});
Catatan: Saat ini, MetricsQueryClient
menggunakan titik akhir Azure Resource Manager (ARM) untuk mengkueri metrik. Anda memerlukan titik akhir manajemen yang sesuai untuk cloud Anda saat menggunakan klien ini. Detail ini dapat berubah di masa mendatang.
Mengeksekusi kueri
Untuk contoh kueri Log dan Metrik, lihat bagian Contoh .
Konsep utama
Mencatat batas laju kueri dan pembatasan
Layanan Analitik Log menerapkan pembatasan saat tingkat permintaan terlalu tinggi. Batas, seperti jumlah maksimum baris yang dikembalikan, juga diterapkan pada kueri Kusto. Untuk informasi selengkapnya, lihat API Kueri.
Struktur data metrik
Setiap set nilai metrik adalah rangkaian waktu dengan karakteristik berikut:
- Waktu nilai dikumpulkan
- Sumber daya yang terkait dengan nilai
- Namespace yang bertindak seperti kategori untuk metrik
- Nama metrik
- Nilai itu sendiri
- Beberapa metrik memiliki beberapa dimensi seperti yang dijelaskan dalam metrik multi-dimensi. Metrik khusus dapat memiliki hingga 10 dimensi.
Contoh
Kueri log
LogsQueryClient
dapat digunakan untuk mengkueri ruang kerja Analitik Log menggunakan Bahasa Kueri Kusto. timespan.duration
dapat ditentukan sebagai string dalam format durasi ISO 8601. Anda dapat menggunakan Durations
konstanta yang disediakan untuk beberapa durasi ISO 8601 yang umum digunakan.
Anda dapat mengkueri log menurut ID ruang kerja Log Analytics atau ID sumber daya Azure. Hasilnya dikembalikan sebagai tabel dengan kumpulan baris.
Kueri log yang bersentrik ruang kerja
Untuk mengkueri menurut ID ruang kerja, gunakan LogsQueryClient.queryWorkspace
metode :
import { DefaultAzureCredential } from "@azure/identity";
import { Durations, LogsQueryClient, LogsQueryResultStatus, LogsTable } from "@azure/monitor-query";
const azureLogAnalyticsWorkspaceId = "<the Workspace Id for your Azure Log Analytics resource>";
const logsQueryClient = new LogsQueryClient(new DefaultAzureCredential());
async function run() {
const kustoQuery = "AppEvents | limit 1";
const result = await logsQueryClient.queryWorkspace(azureLogAnalyticsWorkspaceId, kustoQuery, {
duration: Durations.twentyFourHours,
});
if (result.status === LogsQueryResultStatus.Success) {
const tablesFromResult: LogsTable[] = 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);
}
}
}
async function processTables(tablesFromResult: LogsTable[]) {
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);
}
}
}
run().catch((err) => console.log("ERROR:", err));
Kueri log yang bersentris sumber daya
Contoh berikut menunjukkan cara mengkueri log langsung dari sumber daya Azure. Di sini, queryResource
metode digunakan dan ID sumber daya Azure diteruskan. Contohnya,/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{resource-provider}/{resource-type}/{resource-name}
.
Untuk menemukan ID sumber daya:
- Navigasi ke halaman sumber daya Anda di portal Microsoft Azure.
- Dari bilah Gambaran Umum , pilih tautan Tampilan JSON .
- Dalam JSON yang dihasilkan, salin nilai
id
properti .
/**
* @summary Demonstrates how to run a query against a Log Analytics workspace, using an Azure resource ID.
*/
import { DefaultAzureCredential } from "@azure/identity";
import {
Durations,
LogsQueryClient,
LogsTable,
LogsQueryOptions,
LogsQueryResultStatus,
} from "@azure/monitor-query";
import * as dotenv from "dotenv";
dotenv.config();
const logsResourceId = process.env.LOGS_RESOURCE_ID;
export async function main() {
const tokenCredential = new DefaultAzureCredential();
const logsQueryClient = new LogsQueryClient(tokenCredential);
if (!logsResourceId) {
throw new Error("LOGS_RESOURCE_ID must be set in the environment for this sample");
}
const kustoQuery = `MyTable_CL | summarize count()`;
console.log(`Running '${kustoQuery}' over the last One Hour`);
const queryLogsOptions: LogsQueryOptions = {
// 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.statistics && result.statistics.query && (result.statistics.query as any).executionTime;
console.log(
`Results for query '${kustoQuery}', execution time: ${
executionTime == null ? "unknown" : executionTime
}`,
);
if (result.status === LogsQueryResultStatus.Success) {
const tablesFromResult: LogsTable[] = 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);
}
}
}
async function processTables(tablesFromResult: LogsTable[]) {
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);
}
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
process.exit(1);
});
Menangani respons kueri log
Fungsi queryWorkspace
LogsQueryClient
mengembalikan LogsQueryResult
objek. Jenis objek dapat berupa LogsQuerySuccessfulResult
atau LogsQueryPartialResult
. Berikut adalah hierarki respons:
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
Misalnya, untuk menangani respons dengan tabel:
async function processTables(tablesFromResult: LogsTable[]) {
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);
}
}
}
Sampel lengkap dapat ditemukan di sini.
Kueri log batch
Contoh berikut menunjukkan pengiriman beberapa kueri secara bersamaan menggunakan API kueri batch. Kueri dapat direpresentasikan sebagai daftar BatchQuery
objek.
export async function main() {
if (!monitorWorkspaceId) {
throw new Error("MONITOR_WORKSPACE_ID must be set in the environment for this sample");
}
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++;
}
}
async function processTables(tablesFromResult: LogsTable[]) {
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);
}
}
}
Menangani respons kueri batch log
Fungsi queryBatch
LogsQueryClient
mengembalikan LogsQueryBatchResult
objek. LogsQueryBatchResult
berisi daftar objek dengan jenis yang mungkin berikut ini:
LogsQueryPartialResult
LogsQuerySuccessfulResult
LogsQueryError
Berikut adalah hierarki respons:
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")
Misalnya, kode berikut menangani respons kueri log batch:
async function processBatchResult(result: LogsQueryBatchResult) {
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++;
}
}
async function processTables(tablesFromResult: LogsTable[]) {
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);
}
}
}
Sampel lengkap dapat ditemukan di sini.
Skenario kueri log tingkat lanjut
Mengatur batas waktu kueri log
Beberapa kueri log membutuhkan waktu lebih dari 3 menit untuk dijalankan. Batas waktu server default adalah 3 menit. Anda dapat meningkatkan batas waktu server hingga maksimum 10 menit. Dalam contoh berikut, LogsQueryOptions
properti objek serverTimeoutInSeconds
digunakan untuk meningkatkan batas waktu server menjadi 10 menit:
// setting optional parameters
const queryLogsOptions: LogsQueryOptions = {
// 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,
kustoQuery,
{ duration: Durations.twentyFourHours },
queryLogsOptions,
);
const tablesFromResult = result.tables;
Mengkueri beberapa ruang kerja
Kueri log yang sama dapat dijalankan di beberapa ruang kerja Analitik Log. Selain kueri Kusto, parameter berikut diperlukan:
workspaceId
- ID ruang kerja pertama (utama).additionalWorkspaces
- Daftar ruang kerja, tidak termasuk ruang kerja yang disediakan dalamworkspaceId
parameter . Item daftar parameter dapat terdiri dari format pengidentifikasi berikut:- Nama ruang kerja yang memenuhi syarat
- ID ruang kerja
- ID sumber daya Azure
Misalnya, kueri berikut dijalankan di tiga ruang kerja:
const queryLogsOptions: LogsQueryOptions = {
additionalWorkspaces: ["<workspace2>", "<workspace3>"],
};
const kustoQuery = "AppEvents | limit 10";
const result = await logsQueryClient.queryWorkspace(
azureLogAnalyticsWorkspaceId,
kustoQuery,
{ duration: Durations.twentyFourHours },
queryLogsOptions,
);
Untuk menampilkan hasil untuk setiap ruang kerja, gunakan TenantId
kolom untuk mengurutkan hasil atau memfilternya dalam kueri Kusto.
Hasil pesanan menurut TenantId
AppEvents | order by TenantId
Memfilter hasil menurut TenantId
AppEvents | filter TenantId == "<workspace2>"
Sampel lengkap dapat ditemukan di sini.
Sertakan statistik
Untuk mendapatkan statistik eksekusi kueri log, seperti konsumsi CPU dan memori:
- Atur properti
LogsQueryOptions.includeQueryStatistics
ketrue
. - Akses bidang di
statistics
dalamLogsQueryResult
objek .
Contoh berikut mencetak waktu eksekusi kueri:
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.statistics && result.statistics.query && result.statistics.query.executionTime;
console.log(
`Results for query '${kustoQuery}', execution time: ${
executionTime == null ? "unknown" : executionTime
}`,
);
Karena struktur statistics
payload bervariasi menurut kueri, Record<string, unknown>
jenis pengembalian digunakan. Ini berisi respons JSON mentah. Statistik ditemukan dalam query
properti JSON. Contohnya:
{
"query": {
"executionTime": 0.0156478,
"resourceUsage": {...},
"inputDatasetStatistics": {...},
"datasetStatistics": [{...}]
}
}
Sertakan visualisasi
Untuk mendapatkan data visualisasi untuk kueri log menggunakan operator render:
- Atur properti
LogsQueryOptions.includeVisualization
ketrue
. - Akses bidang di
visualization
dalamLogsQueryResult
objek .
Contohnya:
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);
Karena struktur visualization
payload bervariasi menurut kueri, Record<string, unknown>
jenis pengembalian digunakan. Ini berisi respons JSON mentah. Contohnya:
{
"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
}
Kueri metrik
Contoh berikut mendapatkan metrik untuk langganan Azure Metrics Advisor .
URI sumber daya harus merupakan sumber daya yang metriknya sedang dikueri. Biasanya formatnya /subscriptions/<id>/resourceGroups/<rg-name>/providers/<source>/topics/<resource-name>
.
Untuk menemukan URI sumber daya:
- Navigasi ke halaman sumber daya Anda di portal Microsoft Azure.
- Dari bilah Gambaran Umum , pilih tautan Tampilan JSON .
- Dalam JSON yang dihasilkan, salin nilai
id
properti .
import { DefaultAzureCredential } from "@azure/identity";
import { Durations, Metric, MetricsQueryClient } from "@azure/monitor-query";
import * as dotenv from "dotenv";
dotenv.config();
const metricsResourceId = process.env.METRICS_RESOURCE_ID;
export async function main() {
const tokenCredential = new DefaultAzureCredential();
const metricsQueryClient = new MetricsQueryClient(tokenCredential);
if (!metricsResourceId) {
throw new Error("METRICS_RESOURCE_ID must be set in the environment for this sample");
}
const iterator = metricsQueryClient.listMetricDefinitions(metricsResourceId);
let result = await iterator.next();
let metricNames: string[] = [];
for await (const result of iterator) {
console.log(` metricDefinitions - ${result.id}, ${result.name}`);
if (result.name) {
metricNames.push(result.name);
}
}
const firstMetricName = metricNames[0];
const secondMetricName = metricNames[1];
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: Metric[] = 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}`);
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
process.exit(1);
});
Dalam sampel sebelumnya, hasil metrik diurutkan metricsResponse
sesuai dengan urutan pengguna menentukan nama metrik dalam metricNames
argumen array untuk fungsi tersebut queryResource
. Jika pengguna menentukan [firstMetricName, secondMetricName]
, hasil untuk firstMetricName
akan muncul sebelum hasil untuk secondMetricName
di metricResponse
.
Menangani respons kueri metrik
Fungsi metrik queryResource
mengembalikan QueryMetricsResult
objek. Objek QueryMetricsResult
berisi properti seperti daftar Metric
objek -typed, interval
, , namespace
dan timespan
. Daftar Metric
objek dapat diakses menggunakan metrics
properti . Setiap Metric
objek dalam daftar ini berisi daftar TimeSeriesElement
objek. Masing-masing TimeSeriesElement
berisi data
properti dan metadataValues
. Dalam bentuk visual, hierarki objek respons menyerupai struktur berikut:
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)
Contoh respons penanganan
import { DefaultAzureCredential } from "@azure/identity";
import { Durations, Metric, MetricsQueryClient } from "@azure/monitor-query";
import * as dotenv from "dotenv";
dotenv.config();
const metricsResourceId = process.env.METRICS_RESOURCE_ID;
export async function main() {
const tokenCredential = new DefaultAzureCredential();
const metricsQueryClient = new MetricsQueryClient(tokenCredential);
if (!metricsResourceId) {
throw new Error(
"METRICS_RESOURCE_ID for an Azure Metrics Advisor subscription must be set in the environment for this sample",
);
}
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: Metric[] = 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}`);
}
}
}
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
process.exit(1);
});
Sampel lengkap dapat ditemukan di sini.
Metrik kueri untuk beberapa sumber daya
Untuk mengkueri metrik untuk beberapa sumber daya Azure dalam satu permintaan, gunakan metode .MetricsClient.queryResources
Metode ini:
- Memanggil API yang berbeda dari
MetricsClient
metode . - Memerlukan titik akhir regional saat membuat klien. Misalnya, "https://westus3.metrics.monitor.azure.com".
Setiap sumber daya Azure harus berada di:
- Wilayah yang sama dengan titik akhir yang ditentukan saat membuat klien.
- Langganan Azure yang sama.
Selanjutnya:
- Pengguna harus berwenang untuk membaca data pemantauan di tingkat langganan Azure. Misalnya, peran Pembaca Pemantauan pada langganan yang akan dikueri.
- Namespace metrik yang berisi metrik yang akan dikueri harus disediakan. Untuk daftar namespace metrik, lihat Metrik yang didukung dan kategori log menurut jenis sumber daya.
let resourceIds: string[] = [
"/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",
];
let metricsNamespace: string = "<YOUR_METRICS_NAMESPACE>";
let metricNames: string[] = ["requests", "count"];
const endpoint: string = "<YOUR_METRICS_ENDPOINT>"; //for example, https://eastus.metrics.monitor.azure.com/
const credential = new DefaultAzureCredential();
const metricsClient: MetricsClient = new MetricsClient(
endpoint,
credential
);
const result: : MetricsQueryResult[] = await metricsClient.queryResources(
resourceIds,
metricNames,
metricsNamespace
);
Untuk inventarsi metrik dan dimensi yang tersedia untuk setiap jenis sumber daya Azure, lihat Metrik yang didukung dengan Azure Monitor.
Pemecahan Masalah
Untuk mendiagnosis berbagai skenario kegagalan, lihat panduan pemecahan masalah.
Langkah berikutnya
Untuk mempelajari selengkapnya tentang Azure Monitor, lihat dokumentasi layanan Azure Monitor.
Berkontribusi
Jika Anda ingin berkontribusi pada pustaka ini, baca panduan berkontribusi untuk mempelajari selengkapnya tentang cara membuat dan menguji kode.
Pengujian modul ini adalah campuran pengujian langsung dan unit, yang mengharuskan Anda memiliki instans Azure Monitor. Untuk menjalankan pengujian, Anda harus menjalankan:
rush update
rush build -t @azure/monitor-query
cd into sdk/monitor/monitor-query
- Salin file ke
sample.env
.env
.env
Buka file di editor dan isi nilainya.npm run test
.
Untuk detail selengkapnya, lihat folder pengujian kami.
Proyek terkait
Azure SDK for JavaScript
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk