Parse CSV
Parses a CSV string read from a field on a log, metric, or trace and writes the resulting fields to a target you choose. You supply the column headers (statically or from another field), and you control the field delimiter, an optional separate header delimiter, and the quote-handling mode.
Supported Telemetry Types
Linux
✓
✓
✓
Windows
✓
✓
✓
macOS
✓
✓
✓
AIX
✓
✓
✓
Kubernetes Node
✓
✓
✓
Kubernetes Cluster
✓
✓
✓
Kubernetes Gateway
✓
✓
✓
OpenShift Node
✓
✓
✓
OpenShift Cluster
✓
✓
✓
OpenShift Gateway
✓
✓
✓
Google SecOps Pipelines
✓
✓
✓
Choose Telemetry Type picks one signal per processor instance. Add another instance to handle a second signal.
Configuration
Basic Configuration

When to apply
Choose Telemetry Type
Telemetry Selector
Yes
Logs
The signal this instance runs on: Logs, Metrics, or Traces (one at a time).
Condition
OTTL Condition
No
(empty)
Parse only the records that match. Empty runs on every record.
Source and target fields
Source Field Type
Enum: Resource, Attribute, Body, Custom
Yes
Attribute
Where the CSV string is read from. Body is logs-only. Custom takes any OTTL path.
Source Field
OTTL Field
Yes *
—
The field holding the CSV string. Use bracket notation for nested fields. For a Body source, leave empty to use the whole body.
Target Field Type
Enum: Resource, Attribute, Body, Custom
Yes
Attribute
Where the parsed fields are written. Body is logs-only. Custom takes any OTTL path.
Target Field
OTTL Field
Yes *
—
Destination for the parsed fields. Leave empty to merge the parsed fields into the chosen target (resource, attributes, or body).
* The Body field type is the exception: it's optional, and leaving the field empty targets the entire body. For Metrics and Traces the field type options are Resource, Attribute, and Custom (no Body).
Headers
Header Field Type
Enum: Static String, Resource, Attribute, Body, Custom
Yes
Static String
Where the column headers come from. Static String lets you type the header row directly; the others read it from a field. Body is logs-only.
Headers
String
Yes *
—
The header row as a delimiter-separated string. Applies when Header Field Type is Static String.
Header Field
OTTL Field
Yes *
—
The field holding the header row. Applies when Header Field Type is Resource, Attribute, Body, or Custom. For a Body header, leave empty to use the body string as the headers.
* Headers is required when Header Field Type is Static String; Header Field is required for the field-based header types (Custom requires a value, Resource/Attribute/Body accept bracket-notation paths).
Parsing options
Delimiter
String
Yes
,
The separator between fields in the CSV row. Escape sequences such as \t (tab) and \040 (space) are interpreted.
Header Delimiter
String
No
(empty)
The separator for the header row, when it differs from Delimiter. If empty, Delimiter is used for the header too. Escape sequences such as \t (tab) and \040 (space) are interpreted.
Mode
Enum: Strict, Lazy Quotes, Ignore Quotes
Yes
Strict
How quotes are handled. Strict follows normal CSV rules. Lazy Quotes allows bare quotes inside fields. Ignore Quotes ignores all quoting and splits purely on the delimiter.
Examples
Parse a tab-delimited request log from the body
A log's body holds a tab-separated request line, and we want each column as a named attribute.
Sample log entry:
Configure the processor with:
Source Field Type:
Body, Source Field: left empty (parse the whole body)Target Field Type:
Attribute, Target Field: left empty (merge into attributes)Header Field Type:
Static String, Headers:ip,method,statusDelimiter:
\t(the fields are tab-separated)Header Delimiter: left empty (the header string
ip,method,statusis comma-separated, so set this to,)Mode:
Strict
The resulting log entry:
The parsed columns are now addressable fields, so you can filter and route on ip, method, and status.
Configuration Tips
The field Delimiter and the Header Delimiter can differ. If your data rows are tab-separated but you type the header row with commas, set Delimiter to
\tand Header Delimiter to,.Use bracket notation for nested fields in any OTTL field, for example
parent["child"].For a logs Body target, leaving Target Field empty merges the parsed fields into the body when the body is already a map, and otherwise replaces the body with the parsed map.
Troubleshooting
The parsed fields are missing or empty
Symptoms: the target field is unchanged, or only some columns appear.
Solutions:
Confirm the source field actually holds a CSV string and the Condition evaluates true.
Check that the number of headers matches the number of columns in each row.
Verify the Delimiter matches the data. A row split on the wrong character produces one giant field or mismatched columns.
Fields split in the wrong places when values contain quotes
Symptoms: columns shift, or quoted values are broken apart.
Solutions:
If fields contain bare quotes, switch Mode to Lazy Quotes.
If your data is not quoted at all and quote characters should be treated as literal text, switch Mode to Ignore Quotes.
Standalone Processor
Related Resources
Bindplane Resources
These parsers turn embedded strings into structured fields. Chain them with Parse CSV to normalize mixed telemetry:
Last updated
Was this helpful?