Data Validation and Sanitization - open-telemetry/opentelemetry-dotnet

Data Validation and Sanitization in OpenTelemetry .NET

OpenTelemetry is an observability framework that provides a standardized way to generate and collect telemetry data such as metrics, logs, and traces (OpenTelemetry, 2023). The .NET implementation of OpenTelemetry supports all officially supported versions of .NET and .NET Framework (OpenTelemetry, 2023).

Data validation and sanitization are crucial steps in ensuring the quality and security of telemetry data. In OpenTelemetry .NET, data validation and sanitization can be done through the use of exporters. Exporters are responsible for exporting telemetry data to a backend such as the OpenTelemetry Collector or a specific backend such as Jaeger, Zipkin, Prometheus, or a vendor-specific backend (OpenTelemetry, 2023).

The OpenTelemetry Protocol (OTLP) exporters provide the best experience for end-users as it is a general-purpose telemetry data delivery protocol designed in the scope of the OpenTelemetry project (OpenTelemetry, 2023). To learn more about the OTLP protocol, you can read the OTLP Specification (OpenTelemetry, 2023).

Here are some examples of how to set up exporters for OTLP and other common protocols in OpenTelemetry .NET:

  1. OTLP Exporter:
using OpenTelemetry.Exporter;
using OpenTelemetry.Metrics;

var exporter = new OpenTelemetry.Exporter.OTLP.OTLPExporter();
var meterProvider = new MeterProvider();
meterProvider.ForceFlush(TimeSpan.FromSeconds(10));
  1. Jaeger Exporter:
using OpenTelemetry.Exporter;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;

var exporter = new JaegerExporter();
var tracerProvider = Sdk.CreateTracerProvider(
b => b
.SetSampler(new AlwaysOnSampler())
.AddExporter(exporter));
var meterProvider = new MeterProvider();
meterProvider.ForceFlush(TimeSpan.FromSeconds(10));
  1. Prometheus Exporter:
using OpenTelemetry.Exporter;
using OpenTelemetry.Metrics;

var exporter = new PrometheusExporter();
var meterProvider = new MeterProvider();
meterProvider.ForceFlush(TimeSpan.FromSeconds(10));
  1. Zipkin Exporter:
using OpenTelemetry.Exporter;
using OpenTelemetry.Trace;

var exporter = new ZipkinExporter();
var tracerProvider = Sdk.CreateTracerProvider(
b => b
.SetSampler(new AlwaysOnSampler())
.AddExporter(exporter));

In addition to exporters, the OpenTelemetry Collector provides a convenient place to transform data before sending it to a vendor or other systems (OpenTelemetry, 2023). The Collector Contrib repository supports dozens of different transformations on metric, span, and log data (OpenTelemetry, 2023).

For example, the filter processor allows users to filter telemetry based on include or exclude rules (OpenTelemetry, 2023). Include rules are used for defining “allow lists” where anything that does not match include rules is dropped from the collector.

Here is an example of how to set up a filter processor in the OpenTelemetry Collector:

processors:
filter:
actions:
- match:
attribute: "service.name"
value: "my-service"
exclude: false
- match:
attribute: "service.name"
value: "other-service"
exclude: true

References: