Grafana Alloy

If you are using Grafana Alloy, you can use the otelcol.exporter.otlphttp component to forward telemetry to Unblind.

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.

Tenant Context Examples
// 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]
  }
}

Was this page helpful?