Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med exportfunktionen för orkestreringshistorik kan appen extrahera körningshistorik för terminalorkestreringsinstanser (slutförd, misslyckad eller avslutad status) från Durable Task Scheduler och skriva dem till Azure Blob Storage. Använd den här funktionen för granskning, efterlevnad, analys och långsiktig arkivering av orkestreringsdata utanför schemaläggaren.
Anmärkning
Exportfunktionen för orkestreringshistorik är för närvarande i förhandsversion och tillgänglig för Durable Task .NET SDK. Det kräver paketet Microsoft.DurableTask.ExportHistory.
Tips/Råd
Ett fullständigt, körbart referensexempel finns på ExportHistoryWebApp. Vi rekommenderar att du använder den som referens när du följer den här guiden.
Så här fungerar export av orkestreringshistorik
Exporthistoriken använder varaktiga entiteter och orkestreringar internt för att hantera exportjobb på ett tillförlitligt sätt med följande process.
- Du skapar ett exportjobb via
ExportHistoryClient, anger ett tidsfönster och exportläge. - SDK:n skapar en varaktig entitet (
ExportJob) som spårar jobbets tillstånd och förlopp. - En intern orkestrering visar en lista över terminalorkestreringsinstanser som matchar det angivna tidsfönstret och statusfilter.
- För varje matchande instans hämtar en aktivitet den fullständiga körningshistoriken från Durable Task Scheduler.
- Historiken serialiseras (JSONL med gzip-komprimering som standard) och skrivs till Azure Blob Storage.
- Jobbet kontrollerar sina framsteg så att det kan återupptas om det avbryts.
Exportlägen för batch- och kontinuerliga jobb
Exporthistorik stöder två lägen:
| Läge | Beteende |
|---|---|
| Batch | Exporterar instanser som nått ett terminaltillstånd inom ett fast tidsfönster (completedTimeFrom till completedTimeTo) och markerar sedan jobbet som slutfört. |
| Kontinuerlig | Tails terminalinstanser kontinuerligt från completedTimeFrom och framåt, utan sluttid. Jobbet förblir aktivt tills du tar bort det. |
Förutsättningar
- .NET 8 SDK eller senare
- En hållbar Task Scheduler-uppgiftshubb (eller lokal emulator)
- Ett Azure Storage-konto (eller Azurite för lokal utveckling)
- Följande NuGet-paket:
Microsoft.DurableTask.ExportHistoryMicrosoft.DurableTask.Client.AzureManagedMicrosoft.DurableTask.Worker.AzureManaged
Aktivera export av orkestreringshistorik
Installera exporthistorikpaketet.
dotnet add package Microsoft.DurableTask.ExportHistoryInstallera Azure hanterade klient- och arbetspaketen för Durable Task Scheduler.
dotnet add package Microsoft.DurableTask.Client.AzureManaged dotnet add package Microsoft.DurableTask.Worker.AzureManagedRegistrera exporthistorik för både arbetaren och klienten.
using Microsoft.DurableTask.Client; using Microsoft.DurableTask.Client.AzureManaged; using Microsoft.DurableTask.ExportHistory; using Microsoft.DurableTask.Worker; using Microsoft.DurableTask.Worker.AzureManaged; string connectionString = builder.Configuration.GetValue<string>("DURABLE_TASK_CONNECTION_STRING") ?? throw new InvalidOperationException("Missing DURABLE_TASK_CONNECTION_STRING"); string storageConnectionString = builder.Configuration.GetValue<string>("EXPORT_HISTORY_STORAGE_CONNECTION_STRING") ?? throw new InvalidOperationException("Missing EXPORT_HISTORY_STORAGE_CONNECTION_STRING"); string containerName = builder.Configuration.GetValue<string>("EXPORT_HISTORY_CONTAINER_NAME") ?? throw new InvalidOperationException("Missing EXPORT_HISTORY_CONTAINER_NAME"); // Register the worker with export history support. // This registers internal entities, orchestrations, and activities that manage export jobs. builder.Services.AddDurableTaskWorker(worker => { worker.UseDurableTaskScheduler(connectionString); worker.UseExportHistory(); }); // Register the client with export history support. // This configures the Azure Blob Storage destination and registers the ExportHistoryClient. builder.Services.AddDurableTaskClient(client => { client.UseDurableTaskScheduler(connectionString); client.UseExportHistory(options => { options.ConnectionString = storageConnectionString; options.ContainerName = containerName; // Optional: set a virtual folder path prefix for blob names (for example, "exports/daily"). // When set, blobs are written to "{prefix}/{hash}.{ext}" instead of "{hash}.{ext}". options.Prefix = builder.Configuration.GetValue<string>("EXPORT_HISTORY_PREFIX"); }); });
Skapa och hantera exportjobb
När du har aktiverat exporthistoriken använder du ExportHistoryClient för att skapa och hantera jobb.
Skapa ett batchexportjobb
I följande exempel exporterar ett batchexportjobb alla orkestreringsinstanser som nått ett terminaltillstånd inom ett fast tidsfönster.
ExportHistoryClient exportClient = app.Services.GetRequiredService<ExportHistoryClient>();
ExportJobCreationOptions options = new(
mode: ExportMode.Batch,
completedTimeFrom: DateTimeOffset.UtcNow.AddHours(-24),
completedTimeTo: DateTimeOffset.UtcNow,
destination: new ExportDestination("my-export-container")
{
// Virtual folder path prefix applied to all blob names for this job
Prefix = "exports/daily",
});
ExportHistoryJobClient jobClient = await exportClient.CreateJobAsync(options);
ExportJobDescription description = await jobClient.DescribeAsync();
Skapa ett kontinuerligt exportjobb
I följande exempel följer ett kontinuerligt exportjobb terminaler oändligt från en starttidpunkt.
ExportJobCreationOptions options = new(
mode: ExportMode.Continuous,
completedTimeFrom: DateTimeOffset.UtcNow,
completedTimeTo: null,
destination: null);
ExportHistoryJobClient jobClient = await exportClient.CreateJobAsync(options);
När destination är null använder jobbet standardcontainern och prefixet som konfigurerats i ExportHistoryStorageOptions.
Hämta information om exportjobb
Använd följande kod för att hämta ett jobbs fullständiga beskrivning, inklusive dess status, förloppsräknare och eventuella fel.
ExportJobDescription? job = await exportClient.GetJobAsync("my-job-id");
Anmärkning
GetJobAsync genererar ExportJobNotFoundException om det angivna jobb-ID:t inte finns. Hantera det här undantaget när du frågar efter jobb som kan ha tagits bort.
Omfattar ExportJobDescription :
| Fastighet | Beskrivning |
|---|---|
JobId |
Den unika jobbidentifieraren. |
Status |
Aktuell status: Pending, Active, Failedeller Completed. |
CreatedAt |
När jobbet skapades. |
LastModifiedAt |
När jobbet senast uppdaterades. |
ScannedInstances |
Totalt antal instanser som genomsökts hittills. |
ExportedInstances |
Totalt antal instanser som exporterats hittills. |
LastError |
Senaste felmeddelandet, om det finns något. |
Lista arbeten
Exportera en lista över aktiva jobb med hjälp av kod som liknar följande exempel.
ExportJobQuery query = new()
{
Status = ExportJobStatus.Active,
CreatedFrom = DateTimeOffset.UtcNow.AddDays(-7),
PageSize = 50,
};
AsyncPageable<ExportJobDescription> jobs = exportClient.ListJobsAsync(query);
await foreach (ExportJobDescription job in jobs)
{
Console.WriteLine($"{job.JobId}: {job.Status} ({job.ExportedInstances} exported)");
}
Stöder ExportJobQuery följande filteregenskaper:
| Fastighet | Beskrivning |
|---|---|
Status |
Filtrera efter jobbstatus: Pending, Active, Failedeller Completed. |
JobIdPrefix |
Filtrera jobb vars ID börjar med det här prefixet. |
CreatedFrom |
Returnera endast jobb som skapats vid eller efter den här tiden. |
CreatedTo |
Returnera endast jobb som skapats vid eller före den här tiden. |
PageSize |
Maximalt antal resultat per sida. |
ContinuationToken |
Token för att hämta nästa sida med resultat. |
Ta bort ett jobb
Använd följande kod för att ta bort ett jobb.
ExportHistoryJobClient jobClient = exportClient.GetJobClient("my-job-id");
await jobClient.DeleteAsync();
Anmärkning
DeleteAsync kastar ExportJobNotFoundException om jobbet inte finns. Att ta bort ett jobb tar inte bort redan exporterade blobar från Azure Blob Storage.
Alternativ för att skapa exportjobb
Klassen ExportJobCreationOptions styr exportjobbets beteende och innehåller följande parametrar.
| Parameter | Obligatoriskt | Beskrivning | Standardinställning |
|---|---|---|---|
mode |
Ja |
Batch för ett fast fönster eller Continuous för pågående export. |
— |
completedTimeFrom |
Ja (Batch) | Start av tidsfönstret (inklusive), baserat på när instanser nådde ett terminaltillstånd. För Kontinuerligt läge är standardvärdet UtcNow om det inte tillhandahålls. |
— |
completedTimeTo |
Ja (Batch) | Slutet av tidsfönstret (inklusive). Måste utelämnas i kontinuerligt läge. Det kan inte vara i framtiden. | — |
destination |
No | Åsidosätt standardblobcontainern och prefixet för denna uppgift. | Använder standard från ExportHistoryStorageOptions |
jobId |
No | Anpassad jobbidentifierare. | Automatiskt genererat GUID |
format |
No | Exportformat: JSONL (gzip-komprimerad) eller JSON (okomprimerad). | JSONL med gzip |
runtimeStatus |
No | Filtrera efter terminalstatusar: Completed, Failed, Terminated. |
Alla terminalstatusar |
maxInstancesPerBatch |
No | Antal instanser som ska bearbetas per batch (1–1 000). | 100 |
Var exporterade data lagras i Azure Blob Storage
Exporterad historik skrivs till Azure Blob Storage med följande parametrar.
-
Container: standard från
EXPORT_HISTORY_CONTAINER_NAME, eller åsidosättning per jobbdestination. -
Blobnamn: härledd från en SHA-256-hash av
(completedTimestamp, instanceId). -
Filformat:
- Förvalt:
.jsonl.gz(JSON-rader, gzip-komprimerade – en historikhändelse per rad) - Valfritt:
.json(okomprimerad JSON-matris med historikhändelser)
- Förvalt:
-
Blobsökväg med prefix: när ett prefix har konfigurerats (till exempel
exports/daily) blirexports/daily/{hash}.{ext}blobsökvägen . Utan ett prefix skrivs bloben direkt till containerroten som{hash}.{ext}.
Varje blob innehåller en instanceId metadatatagg för spårning.
Miljövariabler för konfiguration av exporthistorik
Använd dessa miljövariabler med Durable Task .NET SDK exporthistorikexempel.
| Variabel | Beskrivning | Standardexempel |
|---|---|---|
DURABLE_TASK_CONNECTION_STRING |
Anslutningssträng för Durable Task Scheduler | Endpoint=http://localhost:8080;TaskHub=default;Authentication=None |
EXPORT_HISTORY_STORAGE_CONNECTION_STRING |
Azure Storage reťazec pripojenia för exporterade historikblobar | UseDevelopmentStorage=true |
EXPORT_HISTORY_CONTAINER_NAME |
Blobcontainer för exporterad historik | export-history |
EXPORT_HISTORY_PREFIX |
Valfritt prefix för sökväg till virtuell mapp för blobnamn | Inaktivera |
ASPNETCORE_URLS |
Lyssna på URL:er för exemplets HTTP-värd | standardinställning för ramverk |
Azure behörigheter för exporthistorik
När du använder Azure resurser i stället för lokala emulatorer behöver appidentiteten åtkomst till Durable Task Scheduler och Blob Storage:
- Bevilja
Durable Task Data Contributorpå appens aktivitetshubb. - Bevilja
Storage Blob Data Contributorför lagringskontot som lagrar exporterade historikblobar.
Viktiga överväganden för exportjobb
Samtidiga rensningsåtgärder:
Om du rensar orkestreringsinstanser medan ett exportjobb körs kan det påverka exporten. Instanser som rensas innan exporten läser dem kommer att saknas i de exporterade data. Undvik att köra rensningsåtgärder samtidigt med aktiva exportjobb som täcker samma tidsperiod.Rensning av blob:
Om du tar bort ett exportjobb tas inte de exporterade blobarna bort från Azure Blob Storage. Om du behöver ta bort exporterade data tar du bort blobarna från lagringskontot separat.
Kontrollera att exporten fungerar
När du har skapat ett exportjobb kontrollerar du att det fungerar genom att söka efter båda signalerna:
- Jobbstatusen övergår från
PendingtillActiveoch till slut tillCompleted(för Batch-läge). - Blobposter visas i den konfigurerade exportcontainern.
Du kan kontrollera jobbets status programmatiskt.
ExportJobDescription? job;
do
{
await Task.Delay(TimeSpan.FromSeconds(5));
job = await exportClient.GetJobAsync(jobId);
Console.WriteLine($"Status: {job?.Status}, Exported: {job?.ExportedInstances}");
}
while (job?.Status is ExportJobStatus.Pending or ExportJobStatus.Active);
För lokal utveckling kör du det här Azure CLI kommandot för att inspektera containern:
az storage blob list \
--connection-string "UseDevelopmentStorage=true" \
--container-name export-history \
--output table
Tips/Råd
Exemplet ExportHistoryWebApp innehåller en ExportHistoryWebApp.http fil med färdiga REST-klientbegäranden för VS Code. Öppna den och klicka på Skicka begäran för att snabbt testa åtgärderna skapa, hämta, lista och ta bort.