If you use OpenTelemetry Collector, use OpenTelemetry Collector processors to manage your data volume.
If using version v0.66.0 (or higher) of the OpenTelemetry Collector-Contrib distribution, use the
filterprocessor to filter Span Events or any other data before sending it to Honeycomb.
filterprocessor component can be especially helpful if using instrumentations that create a lot of noisy, unneeded data.
To use, add the
filterprocessor component as a processor in your OpenTelemetry Collector configuration file, such as
Configure your OpenTelemetry Collector to filter Span Events, similar to:
processors: # add the filterprocessor filter: # tell it to operate on span data traces: # Filter out span events with the 'grpc' attribute, # or have a span event name with 'grpc' in it. spanevent: - 'attributes["grpc"] == true' - 'IsMatch(name, ".*grpc.*") == true'
Note that each individual line in the
spanevent list is a separate filter.
If any of the filters match, the span event will be filtered out.
In other words, each line is an
Additionally, Honeycomb currently translates all fields with the
instrumentation_scope.name field into
To filter based on the value of an instrumentation scope, use
instrumentation_scope.name instead of
To require multiple conditions to be true, write a single filter that combines them, similar to:
processors: filter: traces: # Filter out only span events with both the 'grpc' attribute and # that have a span event name with 'grpc' in it. spanevent: - 'attributes["grpc"] == true and IsMatch(name, ".*grpc.*") == true'
You can filter any OpenTelemetry signals, not only Span Events. This example filters data across spans, metrics, and logs:
processors: filter: traces: span: - 'attributes["container.name"] == "app_container_1"' - 'resource.attributes["host.name"] == "localhost"' - 'name == "app_3"' spanevent: - 'attributes["grpc"] == true' - 'IsMatch(name, ".*grpc.*") == true' metrics: metric: - 'name == "my.metric" and attributes["my_label"] == "abc123"' - 'type == METRIC_DATA_TYPE_HISTOGRAM' datapoint: - 'metric.type == METRIC_DATA_TYPE_SUMMARY' - 'resource.attributes["service.name"] == "my_service_name"' logs: log_record: - 'IsMatch(body, ".*password.*") == true' - 'severity_number < SEVERITY_NUMBER_WARN'
The filtering language is done with the OpenTelemetry Transformation Language (OTTL). Learn more about the OTTL Processor.