OpenTelemetry Collector
The OpenTelemetry Collector is the recommended way to send data to Unblind. It allows you to buffer, process, and export data to us alongside your existing tools (like Datadog or Prometheus).
Before you can make requests to the Unblind API, you will need to grab your API key. You can create one in Settings.
Configuration
Add the following to your config.yaml:
exporters:
otlp_http/unblind:
endpoint: "https://otlp.unblind.dev"
headers:
Authorization: "Bearer <YOUR_API_KEY>"
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [otlp_http/unblind]
logs:
receivers: [otlp]
processors: [batch]
exporters: [otlp_http/unblind]
Identifying Tenants
Unblind isolates data into per-tenant datasets by detecting the tenant.id attribute in your telemetry data. The Unblind data pipeline then strips this value internally and uses it to determine which tenant each piece of telemetry belongs to.
The attribute can be set at the Resource level (recommended for resources owned by the tenant) or the Attribute level (useful for multi-tenant scenarios). If both are present, the Attribute-level identifier takes precedence.
If your telemetry data already contains a tenant.id attribute, you can skip the processor configuration below.
processors:
# Extract tenant ID from environment variable
resource/tenant_id:
attributes:
- key: tenant.id
value: ${env:TENANT_ID}
action: upsert
service:
pipelines:
metrics:
# Add processor to the pipeline
processors: [batch, resource/tenant_id]
exporters: [otlp_http/unblind]
Filtering Metrics
You may not want to send every single metric your application emits. To reduce noise and manage costs, you can filter your telemetry pipeline to only forward high-value metrics (e.g., CPU, Memory, or specific Business KPIs) to Unblind.
Below is an example of how to configure an "Allowlist", dropping everything except the specific metrics you define.
# Add the 'filter' processor to your config.yaml
# Docs: https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/filterprocessor
processors:
filter/include_metrics:
error_mode: ignore
metrics:
include:
match_type: strict
metric_names:
- system.cpu.time
- system.memory.usage
- http.server.request.duration
service:
pipelines:
metrics:
# Add processor to the pipeline
processors: [batch, filter/include_metrics]
exporters: [otlp_http/unblind]