Grafana Alloy
If you are using Grafana Alloy, you can use the otelcol.exporter.otlphttp component to forward telemetry to Unblind.
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 Grafana Alloy configuration:
otelcol.exporter.otlphttp "unblind" {
client {
endpoint = "https://otlp.unblind.dev"
headers = {
"Authorization" = "Bearer <YOUR_API_KEY>",
}
}
}
// Example pipeline connecting a receiver to Unblind
otelcol.receiver.otlp "default" {
grpc { endpoint = "0.0.0.0:4317" }
http { endpoint = "0.0.0.0:4318" }
output {
metrics = [otelcol.exporter.otlphttp.unblind.input]
logs = [otelcol.exporter.otlphttp.unblind.input]
}
}
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.
// Add tenant ID to resource attributes from environment variable
otelcol.processor.resource "add_tenant_id" {
attributes {
key = "tenant.id"
value = env("TENANT_ID")
action = "upsert"
}
output {
metrics = [otelcol.exporter.otlphttp.unblind.input]
logs = [otelcol.exporter.otlphttp.unblind.input]
}
}
// Example pipeline with tenant ID processor
otelcol.receiver.otlp "default" {
grpc { endpoint = "0.0.0.0:4317" }
http { endpoint = "0.0.0.0:4318" }
output {
metrics = [otelcol.processor.resource.add_tenant_id.input]
logs = [otelcol.processor.resource.add_tenant_id.input]
}
}
otelcol.exporter.otlphttp "unblind" {
client {
endpoint = "https://otlp.unblind.dev"
headers = {
"Authorization" = "Bearer <YOUR_API_KEY>",
}
}
}
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.
# Use the otelcol.processor.filter component
# Docs: https://grafana.com/docs/alloy/latest/reference/components/otelcol.processor.filter/
otelcol.processor.filter "keep_important_metrics" {
metrics {
include {
match_type = "strict"
metric_names = [
"system.cpu.time",
"system.memory.usage"
]
}
}
output {
metrics = [otelcol.exporter.otlphttp.unblind.input]
}
}