Azure Monitor-Erfassungsclientbibliothek für .NET– Version 1.1.1
Die Azure Monitor-Erfassungsclientbibliothek wird verwendet, um benutzerdefinierte Protokolle an Azure Monitor zu senden.
Mit dieser Bibliothek können Sie Daten aus praktisch jeder Quelle an unterstützte integrierte Tabellen oder an benutzerdefinierte Tabellen senden, die Sie im Log Analytics-Arbeitsbereich erstellen. Sie können sogar das Schema integrierter Tabellen mit benutzerdefinierten Spalten erweitern.
Ressourcen:
Erste Schritte
Voraussetzungen
- Ein Azure-Abonnement
- Eine TokenCredential-Implementierung, z. B. ein Anmeldeinformationstyp der Azure Identity-Bibliothek.
- Ein Datensammlungsendpunkt
- Eine Datensammlungsregel
- Ein Log Analytics-Arbeitsbereich
Installieren des Pakets
Installieren Sie die Azure Monitor Ingestion-Clientbibliothek für .NET mit NuGet:
dotnet add package Azure.Monitor.Ingestion
Authentifizieren des Clients
Ein authentifizierter Client ist erforderlich, um Daten zu erfassen. Erstellen Sie zum Authentifizieren eine instance einer TokenCredential
Klasse. Übergeben Sie ihn an den Konstruktor der LogsIngestionClient
-Klasse.
Für die Authentifizierung wird im folgenden Beispiel aus dem Azure.Identity
Paket verwendetDefaultAzureCredential
:
var endpoint = new Uri("<data_collection_endpoint_uri>");
var credential = new DefaultAzureCredential();
var client = new LogsIngestionClient(endpoint, credential);
Konfigurieren des Clients für Azure Sovereign Cloud
Standardmäßig LogsIngestionClient
ist für die Verbindung mit der öffentlichen Azure-Cloud konfiguriert. Um stattdessen eine Verbindung mit einer Sovereign Cloud herzustellen, legen Sie die LogsIngestionClientOptions.Audience
-Eigenschaft fest. Beispiel:
var endpoint = new Uri("<data_collection_endpoint_uri>");
var credential = new DefaultAzureCredential();
var clientOptions = new LogsIngestionClientOptions
{
Audience = LogsIngestionAudience.AzureChina
};
var client = new LogsIngestionClient(endpoint, credential, clientOptions);
Hochladen der Protokolle
Beispiele für die Protokollerfassung finden Sie im Abschnitt Beispiele .
Wichtige Begriffe
Datensammlungsendpunkt
Mit Datensammlungsendpunkten (Data Collection Endpoint, DCEs) können Sie Erfassungseinstellungen für Azure Monitor eindeutig konfigurieren. Dieser Artikel bietet eine Übersicht über DCEs, einschließlich ihres Inhalts, ihrer Struktur und wie Sie sie erstellen und damit arbeiten können.
Datensammlungsregel
Datensammlungsregeln (Data Collection Rules, DCRs) definieren von Azure Monitor gesammelte Daten und geben an, wie und wo diese Daten gesendet oder gespeichert werden sollen. Der REST-API-Aufruf muss eine zu verwendende DCR angeben. Eine einzelne DCR kann mehrere DCRs unterstützen, weshalb Sie eine andere DCR für verschiedene Quellen und Zieltabellen angeben können.
Das DCR muss die Struktur der Eingabedaten und die Struktur der Zieltabelle erkennen. Wenn die beiden nicht übereinstimmen, kann eine Transformation durchgeführt werden, um die Quelldaten so zu konvertieren, dass sie mit der Zieltabelle kompatibel sind. Sie können die Transformation auch verwenden, um Quelldaten zu filtern und andere Berechnungen oder Konvertierungen durchzuführen.
Weitere Informationen finden Sie unter Datensammlungsregeln in Azure Monitor.
Log Analytics-Arbeitsbereichstabellen
Benutzerdefinierte Protokolle können Daten an jede von Ihnen erstellte benutzerdefinierte Tabelle und an bestimmte integrierte Tabellen in Ihrem Log Analytics-Arbeitsbereich senden. Die Zieltabelle muss existieren, bevor Sie Daten an sie senden können. Die folgenden integrierten Tabellen werden derzeit unterstützt:
Threadsicherheit
Wir garantieren, dass alle Client-instance Methoden threadsicher und unabhängig voneinander sind (Richtlinie). Dieser Entwurf stellt sicher, dass die Empfehlung, Clientinstanzen wiederzuverwenden, immer sicher ist, auch über Threads hinweg.
Zusätzliche Konzepte
Clientoptionen | Zugreifen auf die Antwort | Vorgänge | mit langer AusführungsdauerBehandeln von Fehlern | Diagnose | Spott | Clientlebensdauer
Beispiele
- Registrieren des Clients mit Abhängigkeitsinjektion
- Hochladen von benutzerdefinierten Protokollen
- Hochladen von benutzerdefinierten Protokollen als IEnumerable
- Hochladen benutzerdefinierter Protokolle als IEnumerable mit EventHandler
- Überprüfen von Protokollen
Mithilfe von Beispielen können Sie sich mit verschiedenen APIs vertraut machen.
Registrieren des Clients mit Abhängigkeitsinjektion
Rufen AddLogsIngestionClient
Sie die -Methode auf, um sich beim Abhängigkeitsinjektionscontainer (Dependency Injection, DI) zu registrierenLogsIngestionClient
. Weitere Informationen finden Sie unter Registrieren des Clients.
Hochladen von benutzerdefinierten Protokollen
Sie können Protokolle entweder mit der LogsIngestionClient.Upload
-Methode oder der LogsIngestionClient.UploadAsync
-Methode hochladen. Beachten Sie die Grenzwerte für die Datenerfassung. Diese Methode verfügt über einen optionalen Parameter: string contentEncoding. Dies bezieht sich auf die Codierung von RequestContent, die übergeben wird. Wenn Sie inhalte übergeben, die bereits bearbeitet wurden, legen Sie den contentEncoding-Parameter fest. Wenn Ihr Inhalt beispielsweise gzippt ist, legen Sie contentEncoding auf "gzip" fest. Wenn dieser Parameter nicht festgelegt ist, ist das Standardverhalten, dass alle Eingaben gzipiert werden.
var endpoint = new Uri("<data_collection_endpoint>");
var ruleId = "<data_collection_rule_id>";
var streamName = "<stream_name>";
var credential = new DefaultAzureCredential();
LogsIngestionClient client = new(endpoint, credential);
DateTimeOffset currentTime = DateTimeOffset.UtcNow;
// Use BinaryData to serialize instances of an anonymous type into JSON
BinaryData data = BinaryData.FromObjectAsJson(
new[] {
new
{
Time = currentTime,
Computer = "Computer1",
AdditionalContext = new
{
InstanceName = "user1",
TimeZone = "Pacific Time",
Level = 4,
CounterName = "AppMetric1",
CounterValue = 15.3
}
},
new
{
Time = currentTime,
Computer = "Computer2",
AdditionalContext = new
{
InstanceName = "user2",
TimeZone = "Central Time",
Level = 3,
CounterName = "AppMetric1",
CounterValue = 23.5
}
},
});
// Upload our logs
Response response = await client.UploadAsync(
ruleId,
streamName,
RequestContent.Create(data)).ConfigureAwait(false);
Hochladen von benutzerdefinierten Protokollen als IEnumerable
Sie können Protokolle auch mithilfe der LogsIngestionClient.Upload
-Methode oder hochladen, in der LogsIngestionClient.UploadAsync
Protokolle in einem generischen IEnumerable
Typ zusammen mit einem optionalen LogsUploadOptions
Parameter übergeben werden. Der LogsUploadOptions
Parameter enthält ein Serialisierungsprogramm, eine Parallelität und einen EventHandler.
var endpoint = new Uri("<data_collection_endpoint_uri>");
var ruleId = "<data_collection_rule_id>";
var streamName = "<stream_name>";
var credential = new DefaultAzureCredential();
LogsIngestionClient client = new(endpoint, credential);
DateTimeOffset currentTime = DateTimeOffset.UtcNow;
var entries = new List<Object>();
for (int i = 0; i < 100; i++)
{
entries.Add(
new {
Time = currentTime,
Computer = "Computer" + i.ToString(),
AdditionalContext = i
}
);
}
// Upload our logs
Response response = await client.UploadAsync(ruleId, streamName, entries).ConfigureAwait(false);
Hochladen benutzerdefinierter Protokolle als IEnumerable mit EventHandler
Sie können Protokolle entweder mit der LogsIngestionClient.Upload
-Methode oder der LogsIngestionClient.UploadAsync
-Methode hochladen. In diesen beiden Methoden werden Protokolle in einem generischen IEnumerable
Typ übergeben. Darüber hinaus gibt es einen LogsUploadOptions
-typed-Parameter, in dem ein Serialisierer, Parallelität und EventHandler festgelegt werden können. Das Standardserialisierungsprogramm ist auf System.Text.Json
festgelegt, aber Sie können das Serialisierungsprogramm übergeben, das Sie verwenden möchten. Die MaxConcurrency
-Eigenschaft legt die Anzahl der Threads fest, die in der UploadAsync
-Methode verwendet werden. Der Standardwert ist 5, und dieser Parameter wird in der Upload
-Methode nicht verwendet. Der EventHandler wird für die Fehlerbehandlung verwendet. Es bietet dem Benutzer die Möglichkeit, den Upload abzubrechen, wenn ein Batch fehlschlägt, und auf die fehlerhaften Protokolle und die entsprechende Ausnahme zuzugreifen. Wenn ein Upload fehlschlägt, wird ohne den EventHandler eine AggregateException
ausgelöst.
var endpoint = new Uri("<data_collection_endpoint_uri>");
var ruleId = "<data_collection_rule_id>";
var streamName = "<stream_name>";
var credential = new DefaultAzureCredential();
LogsIngestionClient client = new(endpoint, credential);
DateTimeOffset currentTime = DateTimeOffset.UtcNow;
var entries = new List<Object>();
for (int i = 0; i < 100; i++)
{
entries.Add(
new {
Time = currentTime,
Computer = "Computer" + i.ToString(),
AdditionalContext = i
}
);
}
// Set concurrency and EventHandler in LogsUploadOptions
LogsUploadOptions options = new LogsUploadOptions();
options.MaxConcurrency = 10;
options.UploadFailed += Options_UploadFailed;
// Upload our logs
Response response = await client.UploadAsync(ruleId, streamName, entries, options).ConfigureAwait(false);
Task Options_UploadFailed(LogsUploadFailedEventArgs e)
{
// Throw exception from EventHandler to stop Upload if there is a failure
IReadOnlyList<object> failedLogs = e.FailedLogs;
// 413 status is RequestTooLarge - don't throw here because other batches can successfully upload
if ((e.Exception is RequestFailedException) && (((RequestFailedException)e.Exception).Status != 413))
throw e.Exception;
else
return Task.CompletedTask;
}
Überprüfen von Protokollen
Sie können überprüfen, ob Ihre Daten ordnungsgemäß hochgeladen wurden, indem Sie die Azure Monitor-Abfragebibliothek verwenden. Führen Sie zuerst das Beispiel Zum Hochladen von benutzerdefinierten Protokollen aus, bevor Sie die Protokolle überprüfen.
var workspaceId = "<log_analytics_workspace_id>";
var tableName = "<table_name>";
var credential = new DefaultAzureCredential();
LogsQueryClient logsQueryClient = new(credential);
LogsBatchQuery batch = new();
string query = tableName + " | Count;";
string countQueryId = batch.AddWorkspaceQuery(
workspaceId,
query,
new QueryTimeRange(TimeSpan.FromDays(1)));
Response<LogsBatchQueryResultCollection> queryResponse =
await logsQueryClient.QueryBatchAsync(batch).ConfigureAwait(false);
Console.WriteLine("Table entry count: " +
queryResponse.Value.GetResult<int>(countQueryId).Single());
Problembehandlung
Ausführliche Informationen zur Diagnose verschiedener Fehlerszenarien finden Sie in unserem Leitfaden zur Problembehandlung.
Nächste Schritte
Weitere Informationen zu Azure Monitor finden Sie in der Dokumentation zum Azure Monitor-Dienst.
Mitwirken
Beiträge und Vorschläge für dieses Projekt sind willkommen. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. Ausführliche Informationen finden Sie unter https://cla.microsoft.com.
Wenn Sie einen Pull Request (PR) übermitteln, überprüft ein CLA-Bot automatisch, ob Sie eine Lizenzvereinbarung bereitstellen und den PR entsprechend ergänzen müssen. Beispielsweise Bezeichnungen und Kommentare. Folgen Sie den Anweisungen des Bots. Sie müssen die CLA nur einmal für alle Repositorys mit unserer CLA signieren.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex , oder wenden Sie sich bei opencode@microsoft.com Fragen oder Kommentaren an.
Azure SDK for .NET