Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Azure Monitor lekérdezési naplók ügyféloldali kódtára csak olvasható lekérdezések végrehajtására szolgál a Azure Monitor naplók adatplatformján:
- Naplók – Napló- és teljesítményadatokat gyűjt és rendszerez a figyelt erőforrásokból. A különböző forrásokból származó adatok, például az Azure-szolgáltatások platformnaplói, a virtuálisgép-ügynökök napló- és teljesítményadatai, valamint az alkalmazások használati és teljesítményadatai egyetlen Azure Log Analytics-munkaterületen összevonhatók. A különböző adattípusok együtt elemezhetők a Kusto lekérdezési nyelv használatával.
Áttérés tanácsadói programból @azure/monitor-query⚠️
Az Áttelepítési útmutatóban részletes útmutatást talál arról, hogyan frissítheti az alkalmazáskódot az eredeti @azure/monitor-query csomagról a könyvtárba @azure/monitor-query-logs .
Erőforrások:
Kezdő lépések
Támogatott környezetek
- A Node.jsLTS-változatai
- A Safari, a Chrome, a Microsoft Edge és a Firefox legújabb verziói
További információért tekintse meg támogatási szabályzatunkat.
Előfeltételek
- Azure-előfizetés
- Egy TokenCredential implementáció, például egy Azure Identity Library hitelesítő adattípus.
- A naplók lekérdezéséhez a következő dolgok egyikére van szüksége:
- Egy Azure Log Analytics-munkaterület
- Bármilyen típusú Azure-erőforrás (Storage-fiók, Key Vault, Cosmos DB stb.)
A csomag telepítése
Telepítse a JavaScripthez készült Azure Monitor Query ügyféloldali kódtárat az npm használatával:
npm install --save @azure/monitor-query-logs
Az ügyfél létrehozása
A naplók lekérdezéséhez hitelesített ügyfélre van szükség. A hitelesítéshez az alábbi példa a @azure/identity csomag DefaultAzureCredential értékét használja.
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient } from "@azure/monitor-query-logs";
const credential = new DefaultAzureCredential();
// Create a LogsQueryClient
const logsQueryClient = new LogsQueryClient(credential);
Ügyfél konfigurálása az Azure szuverén felhőhöz
Alapértelmezés szerint a kódtár ügyfelei az Azure nyilvános felhő használatára vannak konfigurálva. Ha ehelyett szuverén felhőt szeretne használni, adja meg a megfelelő végpontot és célközönség értékét az ügyfél példányosításakor. Például:
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient } from "@azure/monitor-query-logs";
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",
});
Hajtsa végre a lekérdezést
A naplók lekérdezésére vonatkozó példákért tekintse meg a Példák szakaszt.
Főbb fogalmak
Naplók lekérdezési sebességkorlátai és szabályozása
A Log Analytics szolgáltatás szabályozást alkalmaz, ha a kérések aránya túl magas. A korlátok, például a visszaadott sorok maximális száma a Kusto-lekérdezésekre is érvényesek. További információ: Lekérdezési API.
Példák
Naplók lekérdezése
A LogsQueryClient Log Analytics-munkaterület lekérdezésére használható a Kusto lekérdezési nyelv használatával. Karakterláncként timespan.duration adható meg ISO 8601 időtartamú formátumban. Használhatja az Durations ISO 8601 gyakran használt időtartamokhoz megadott állandókat.
A naplókat a Log Analytics-munkaterület azonosítója vagy az Azure-erőforrás-azonosító alapján kérdezheti le. Az eredményt a rendszer sorok gyűjteményét tartalmazó táblázatként adja vissza.
Munkaterület-központú naplók lekérdezése
A munkaterület-azonosító szerinti lekérdezéshez használja a következő LogsQueryClient.queryWorkspace módszert:
import { LogsQueryClient, Durations, LogsQueryResultStatus } from "@azure/monitor-query-logs";
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);
}
}
Erőforrás-központú naplók lekérdezése
Az alábbi példa bemutatja, hogyan kérdezheti le a naplókat közvetlenül egy Azure-erőforrásból. Itt a queryResource metódust használjuk, és a rendszer átadja az Azure-erőforrás-azonosítót. Például: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{resource-provider}/{resource-type}/{resource-name}.
Az erőforrás-azonosító megkeresése:
- Lépjen az erőforrás oldalára a Azure Portal.
- Az Áttekintés panelen válassza a JSON-nézet hivatkozást.
- Az eredményül kapott JSON-ban másolja ki a
idtulajdonság értékét.
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, Durations, LogsQueryResultStatus } from "@azure/monitor-query-logs";
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,
);
console.log(`Results for query '${kustoQuery}'`);
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);
}
}
Naplók lekérdezési válaszának kezelése
A queryWorkspace függvény LogsQueryClient egy objektumot LogsQueryResult ad vissza. Az objektum típusa lehet LogsQuerySuccessfulResult vagy .LogsQueryPartialResult A válasz hierarchiája a következő:
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
Például egy válasz táblákkal való kezeléséhez:
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);
}
}
}
A teljes minta itt található.
Kötegelt naplók lekérdezése
Az alábbi példa több lekérdezés egyidejű küldését mutatja be a kötegelt lekérdezési API használatával. A lekérdezések objektumok listájaként BatchQuery ábrázolhatók.
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, LogsQueryResultStatus } from "@azure/monitor-query-logs";
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++;
}
Naplók kezelése kötegelt lekérdezési válasz
A queryBatch függvény LogsQueryClient egy objektumot LogsQueryBatchResult ad vissza.
LogsQueryBatchResult A következő lehetséges típusú objektumok listáját tartalmazza:
LogsQueryPartialResultLogsQuerySuccessfulResultLogsQueryError
A válasz hierarchiája a következő:
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")
A következő kód például egy kötegelt naplók lekérdezési választ kezel:
import { LogsQueryResultStatus } from "@azure/monitor-query-logs";
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);
}
}
}
A teljes minta itt található.
Speciális naplók lekérdezési forgatókönyvei
Naplók lekérdezési időtúllépésének beállítása
Egyes naplólekérdezések végrehajtása 3 percnél tovább tart. A kiszolgáló alapértelmezett időtúllépése 3 perc. A kiszolgáló időtúllépését legfeljebb 10 percre növelheti. A következő példában az LogsQueryOptions objektum serverTimeoutInSeconds tulajdonságával 10 percre növelheti a kiszolgáló időtúllépését:
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, Durations } from "@azure/monitor-query-logs";
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;
Több munkaterület lekérdezése
Ugyanaz a naplólekérdezés több Log Analytics-munkaterületen is végrehajtható. A Kusto-lekérdezés mellett a következő paraméterekre van szükség:
-
workspaceId- Az első (elsődleges) munkaterület-azonosító. -
additionalWorkspaces- A munkaterületek listája, kivéve aworkspaceIdparaméterben megadott munkaterületet. A paraméter listaelemei a következő azonosítóformátumokból állhatnak:- Minősített munkaterületnevek
- Munkaterület-azonosítók
- Azure-erőforrásazonosítók
A következő lekérdezés például három munkaterületen fut:
import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient, Durations } from "@azure/monitor-query-logs";
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;
Az egyes munkaterületek eredményeinek megtekintéséhez az TenantId oszlop használatával rendezheti az eredményeket, vagy szűrheti őket a Kusto-lekérdezésben.
Eredmények rendelése TenantId szerint
AppEvents | order by TenantId
Eredmények szűrése TenantId szerint
AppEvents | filter TenantId == "<workspace2>"
A teljes minta itt található.
Statisztikák belefoglalása
Naplók lekérdezés-végrehajtási statisztikáinak, például a processzor- és memóriahasználatnak a lekérése:
- Állítsa a
LogsQueryOptions.includeQueryStatisticstulajdonságottrueértékre. - Nyissa meg az objektumon
statisticsbelüli mezőtLogsQueryResult.
Az alábbi példa kinyomtatja a lekérdezés végrehajtási idejét:
import { LogsQueryClient, Durations } from "@azure/monitor-query-logs";
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,
},
);
console.log(`Results for query '${kustoQuery}'`);
Mivel a statistics hasznos adatok szerkezete lekérdezésenként változik, a rendszer visszatérési típust Record<string, unknown> használ. A nyers JSON-választ tartalmazza. A statisztikák a query JSON tulajdonságában találhatók. Például:
{
"query": {
"executionTime": 0.0156478,
"resourceUsage": {...},
"inputDatasetStatistics": {...},
"datasetStatistics": [{...}]
}
}
Vizualizáció belefoglalása
Vizualizációs adatok lekérése naplólekérdezésekhez a render operátor használatával:
- Állítsa a
LogsQueryOptions.includeVisualizationtulajdonságottrueértékre. - Nyissa meg az objektumon
visualizationbelüli mezőtLogsQueryResult.
Például:
import { LogsQueryClient, Durations } from "@azure/monitor-query-logs";
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);
Mivel a visualization hasznos adatok szerkezete lekérdezésenként változik, a rendszer visszatérési típust Record<string, unknown> használ. A nyers JSON-választ tartalmazza. Például:
{
"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
}
Hibaelhárítás
A különböző hibaforgatókönyvek diagnosztizálásához tekintse meg a hibaelhárítási útmutatót.
Következő lépések
További információ a Azure Monitor: Azure Monitor szolgáltatás dokumentációja.
Közreműködés
Ha hozzá szeretne járulni ehhez a kódtárhoz, olvassa el a közreműködői útmutatót, amelyből többet is megtudhat a kód összeállításáról és teszteléséről.
Ennek a modulnak a tesztjei élő és egységtesztek keverékei, amelyekhez Azure Monitor-példányra van szükség. A tesztek végrehajtásához a következőt kell futtatnia:
rush updaterush build -t @azure/monitor-query-logscd into sdk/monitor/monitor-query- Másolja a fájlt
sample.enva.env - Nyissa meg a fájlt
.envegy szerkesztőben, és töltse ki az értékeket. -
npm run test.
További részletekért tekintse meg a tesztek mappát.
Kapcsolódó projektek
Azure SDK for JavaScript