Skip to main content
Version: v0.1.1

Telemetry Enrichment

We provide a variety of enrichers for Serilog:

Installation#

This feature requires to install our NuGet package

PM > Install-Package Arcus.Observability.Telemetry.Serilog.Enrichers -Version 0.1.1

Application Enricher#

The Arcus.Observability.Telemetry.Serilog.Enrichers library provides a Serilog enricher that adds the application's component name to the log event as a log property with the name ComponentName.

Example Name: ComponentName Value: My application component

Usage

using Serilog;
ILogger logger = new LoggerConfiguration()    .Enrich.WithComponentName("My application component")    .CreateLogger();
logger.Information("This event will be enriched with the application component's name");

Correlation Enricher#

The Arcus.ObservabilityTelemetry.Serilog.Enrichers library provides a Serilog enricher that adds the CorrelationInfo information from the current context as log properties with the names OperationId and TransactionId.

You can use your own ICorrelationInfoAccessor implementation to retrieve this CorrelationInfo model, or use the default DefaultCorrelationInfoAccessor implementation that stores this model

Example Name: OperationId Value: 52EE2C00-53EE-476E-9DAB-C1234EB4AD0B

Name: TransactionId Value: 0477E377-414D-47CD-8756-BCBE3DBE3ACB

Usage

using Serilog;
ILogger logger = new LoggerConfiguration()    .Enrich.WithCorrelationInfo()    .CreateLogger();
logger.Information("This event will be enriched with the correlation information");

Or alternatively, with a custom ICorrelationInfoAccessor:

using Arcus.Observability.Correlation;using Serilog;
ICorrelationInfoAccessor myCustomAccessor = ...
ILogger logger = new LoggerConfiguration()    .Enrich.WithCorrelationInfo(myCustomAccessor)    .CreateLogger();
logger.Information("This event will be enriched with the correlation information");// Output: This event will be enriched with the correlation information {OperationId: 52EE2C00-53EE-476E-9DAB-C1234EB4AD0B, TransactionId: 0477E377-414D-47CD-8756-BCBE3DBE3ACB}

Kubernetes Enricher#

The Arcus.Observability.Telemetry.Serilog.Enrichers library provides a Kubernetes Serilog enricher that adds several machine information from the environment (variables).

Example

Environment VariableLog Property
KUBERNETES_NODE_NAMENodeName
KUBERNETES_POD_NAMEPodName
KUBERNETES_NAMESPACENamespace

Usage

using Serilog;
ILogger logger = new LoggerConfiguration()    .Enrich.WithKubernetesInfo()    .CreateLogger();
logger.Information("This event will be enriched with the Kubernetes environment information");

Here is an example of a Kubernetes YAML that provides the required environment variables:

apiVersion: apps/v1kind: Deploymentmetadata:  name: demo-app  labels:    app: demospec:  replicas: 2  selector:    matchLabels:      app.kubernetes.io/name: demo-app      app.kubernetes.io/instance: instance  template:    metadata:      labels:        app.kubernetes.io/name: demo-app        app.kubernetes.io/instance: instance    spec:      containers:      - name: event-proxy        image: arcusazure/arcus-event-grid-proxy        env:        - name: ARCUS_EVENTGRID_TOPICENDPOINT          value: https://arcus.io        - name: ARCUS_EVENTGRID_AUTHKEY          valueFrom:            secretKeyRef:             name: secrets-order-consumer             key: servicebus-connectionstring        - name: KUBERNETES_NODE_NAME          valueFrom:            fieldRef:             fieldPath: spec.nodeName        - name: KUBERNETES_POD_NAME          valueFrom:            fieldRef:             fieldPath: metadata.name        - name: KUBERNETES_NAMESPACE          valueFrom:            fieldRef:             fieldPath: metadata.namespace

Version Enricher#

The Arcus.Observability.Telemetry.Serilog.Enrichers library provides a Serilog enricher that adds the current runtime assembly version of the product to the log event as a log property with the name version.

Example Name: version Value: 1.0.0-preview

Usage

using Serilog;
ILogger logger = new LoggerConfiguration()    .Enrich.WithVersion()    .CreateLogger();
logger.Information("This event will be enriched with the runtime assembly product version");