AutoMate Technisch Help

Logging & Telemetry

AutoMate gebruikt een gelaagde logging aanpak: Serilog voor structured logging, OpenTelemetry voor distributed tracing, en Azure Monitor (Application Insights) voor productie monitoring.

Serilog

Serilog is de primaire logging provider en is geconfigureerd in API/Src/AutoMate.API/Program.cs:

var loggerConfig = new LoggerConfiguration() .MinimumLevel.Information() .Enrich.FromLogContext() .Enrich.WithProperty("Application", builder.Configuration["Serilog:ApplicationName"] ?? "AutoMate.API") .WriteTo.Console(); var seqUrl = builder.Configuration.GetConnectionString("seq") ?? builder.Configuration["Serilog:SeqUrl"]; if (!string.IsNullOrWhiteSpace(seqUrl)) { loggerConfig.WriteTo.Seq(seqUrl); } Log.Logger = loggerConfig.CreateLogger(); builder.Host.UseSerilog();

Configuratie

Parameter

Beschrijving

Standaard

MinimumLevel

Minimum log level

Information

Serilog:ApplicationName

Application naam als log property

AutoMate.API

ConnectionStrings:seq

Seq URL via Aspire service discovery

Serilog:SeqUrl

Seq URL via appsettings

Sinks

Console sink — altijd actief, geschikt voor container/Azure logging infrastructure.

Seq sink — optioneel, wordt geactiveerd als de seq connection string of Serilog:SeqUrl geconfigureerd is. Seq biedt een gestructureerde log viewer met filtering en querying.

Enrichment

Elk log event krijgt automatisch de volgende properties via de LogContext:

Property

Gevuld door

Inhoud

Application

Serilog config

Applicatienaam (AutoMate.API)

CorrelationId

CorrelationIdMiddleware

Correlation ID uit header of TraceIdentifier

TraceId

CorrelationIdMiddleware

ASP.NET Core TraceIdentifier

TenantId

TenantGuard pre-processor

Gevalideerde tenant GUID

UserId

UserContextGuard pre-processor

Entra Object ID van de gebruiker

UserName

UserContextGuard pre-processor

UPN of preferred_username

HTTP Request logging

app.UseSerilogRequestLogging() logt elk HTTP request/response paar inclusief statuscode, duur, HTTP methode en pad. Dit is geregistreerd na de FastEndpoints middleware.

OpenTelemetry & Azure Monitor

Azure Monitor OpenTelemetry wordt gebruikt voor distributed tracing en Application Insights integratie:

var connString = builder.Configuration["AzureMonitor:ConnectionString"] ?? builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]; if (!builder.Environment.IsDevelopment() || !string.IsNullOrWhiteSpace(connString)) { builder.Services .AddOpenTelemetry() .UseAzureMonitor(o => { o.ConnectionString = connString; }); builder.Services.ConfigureOpenTelemetryTracerProvider((sp, otel) => { otel.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("AutoMate.API")); }); }

Activatiologica

Omgeving

Connection string geconfigureerd

Azure Monitor actief?

Development

Nee

Nee

Development

Ja

Ja

Staging / Production

Nee of Ja

Ja

In productie zet Azure de APPLICATIONINSIGHTS_CONNECTION_STRING omgevingsvariabele automatisch als Application Insights gekoppeld is aan de app service.

Service naam

De service wordt geregistreerd als "AutoMate.API" in OpenTelemetry via ResourceBuilder.CreateDefault().AddService("AutoMate.API").

Aspire ServiceDefaults

builder.AddServiceDefaults() configureert aanvullende OpenTelemetry defaults vanuit het Aspire ServiceDefaults project, inclusief health checks, metrics endpoints en standaard instrumentatie.

Correlation Tracking

CorrelationIdMiddleware (API/Src/AutoMate.API/Middleware/CorrelationIdMiddleware.cs) zorgt voor request tracing door de gehele pipeline:

// Prefereer inkomende header, val terug op ASP.NET TraceIdentifier var correlationId = context.Request.Headers.TryGetValue("X-Correlation-Id", out var header) && !string.IsNullOrWhiteSpace(header) ? header.ToString() : traceId; // Stuur correlation ID terug in response header context.Response.OnStarting(() => { context.Response.Headers["X-Correlation-Id"] = correlationId; return Task.CompletedTask; });
  • De middleware leest X-Correlation-Id uit de request header

  • Als de header ontbreekt, wordt de TraceIdentifier gebruikt

  • De correlation ID wordt teruggezonden in de response X-Correlation-Id header

  • Beide CorrelationId en TraceId worden gepusht naar de Serilog LogContext

  • De middleware draait als eerste in de pipeline, vóór authenticatie en FastEndpoints

Lokale ontwikkeling

Bij gebruik van het Aspire AppHost (Aspire/AutoMate.AppHost) wordt Seq automatisch gestart als onderdeel van de lokale orchestratie. De seq connection string wordt via Aspire service discovery doorgegeven aan de API.

URL

Doel

http://localhost:5341

Seq log viewer

http://localhost:5341/api

Seq HTTP API

Alle API logs zijn direct zichtbaar in het Seq dashboard met filtering op Application, TenantId, UserId, CorrelationId en overige gestructureerde properties.

Productie — Seq @ TransIP

In productie en development draait Seq als externe service, gehost op TransIP (buiten Azure). Web API én Portal schrijven via Serilog rechtstreeks naar deze Seq-instantie. Configuratie:

App-setting

Bron

Doel

Serilog__SeqUrl

WebApiAppSettings.bicep/PortalAppSettings.bicep

URL van de Seq-instantie

Serilog__SeqApiKey

Key Vault reference naar secret SeqApiKey

API key voor schrijven naar Seq

De Seq-console is via Cloudflare One Zero Trust alleen voor geautoriseerde medewerkers toegankelijk. Klantverkeer raakt Seq nooit.

Daarnaast loopt Azure-native telemetrie via Application Insights → Log Analytics Workspace (zie Hosting — SaaS Applicatie, sectie Logging & Telemetrie). De twee paden zijn complementair: Seq voor application-level structured logs en query, App Insights voor APM, distributed tracing en Azure-platform-telemetrie.

Aanbevolen log queries (Seq)

# Alle requests van een specifieke tenant TenantId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' # Alle fouten van de afgelopen 15 minuten @Level = 'Error' and @Timestamp > Now() - 15m # Request tracing via correlation ID CorrelationId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' # Inkomende requests van een gebruiker UserName = 'gebruiker@tenant.nl'
Last modified: 29 May 2026