> ## Documentation Index
> Fetch the complete documentation index at: https://otel.fyi/llms.txt
> Use this file to discover all available pages before exploring further.

# Tcplog

> OpenTelemetry receiver for Tcplog

# Tcplog Receiver

![Status](https://img.shields.io/badge/status-alpha-red)

**Available in:** `contrib`

**Maintainers:** [@VihasMakwana](https://github.com/VihasMakwana)

**Source:** [opentelemetry-collector-contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/tcplogreceiver)

## Supported Telemetry

![Logs](https://img.shields.io/badge/logs-alpha-blue)

## Overview

## Configuration

| Field | Default | Description |
| - | - | - |
| `max_log_size` | `1MiB` | The maximum size of a log entry to read before failing. Protects against reading large amounts of data into memory |
| `listen_address` | required | A listen address of the form `<ip>:<port>` |
| `tls` | nil | An optional `TLS` configuration (see the TLS configuration section) |
| `attributes` | \{} | A map of `key: value` pairs to add to the entry's attributes. Keys must be strings, values must be strings or [expressions](../../pkg/stanza/docs/types/expression.md) that evaluate to a string. |
| `one_log_per_packet` | false | Skip log tokenization, set to true if logs contains one log per record and multiline is not used.  This will improve performance. |
| `resource` | \{} | A map of `key: value` pairs to add to the entry's resource. Keys must be strings, values must be strings or [expressions](../../pkg/stanza/docs/types/expression.md) that evaluate to a string. |
| `add_attributes` | false | Adds `net.*` attributes according to [semantic convention](https://github.com/open-telemetry/semantic-conventions/blob/v1.42.0/docs/registry/attributes/network.md#deprecated-network-attributes) |
| `multiline` | | A `multiline` configuration block. See below for details |
| `encoding` | `utf-8` | The encoding of the file being read. See the list of supported encodings below for available options |
| `max_connections` | 0 | The maximum number of open TCP connections allowed. 0 means unlimited |
| `connection_idle_timeout` | 0 | The maximum duration a TCP connection can be idle before being closed. 0 means no idle timeout |
| `operators` | \[] | An array of [operators](../../pkg/stanza/docs/operators/README.md#what-operators-are-available). See below for more details |
| `retry_on_failure.enabled` | `false` | If `true`, the receiver will pause reading a file and attempt to resend the current batch of logs if it encounters an error from downstream components. |
| `retry_on_failure.initial_interval` | `1s` | [Time](#time-parameters) to wait after the first failure before retrying. |
| `retry_on_failure.max_interval` | `30s` | Upper bound on retry backoff [interval](#time-parameters). Once this value is reached the delay between consecutive retries will remain constant at the specified value. |
| `retry_on_failure.max_elapsed_time` | `5m` | Maximum amount of [time](#time-parameters) (including retries) spent trying to send a logs batch to a downstream consumer. Once this value is reached, the data is discarded. Retrying never stops if set to `0`. |

### TLS Configuration

The `tcp_log` receiver supports TLS, disabled by default.
config more detail [opentelemetry-collector#configtls](https://github.com/open-telemetry/opentelemetry-collector/tree/main/config/configtls#tls-configuration-settings).

| Field | Default | Description |
| - | - | - |
| `cert_file` | | Path to the TLS cert to use for TLS required connections. |
| `key_file` | | Path to the TLS key to use for TLS required connections. |
| `ca_file` | | Path to the CA cert. For a client this verifies the server certificate. For a server this verifies client certificates. If empty uses system root CA. |
| `client_ca_file` | | Path to the TLS cert to use by the server to verify a client certificate. (optional) |

### Operators

Each operator performs a simple responsibility, such as parsing a timestamp or JSON. Chain together operators to process logs into a desired format.

* Every operator has a `type`.
* Every operator can be given a unique `id`. If you use the same type of operator more than once in a pipeline, you must specify an `id`. Otherwise, the `id` defaults to the value of `type`.
* Operators will output to the next operator in the pipeline. The last operator in the pipeline will emit from the receiver. Optionally, the `output` parameter can be used to specify the `id` of another operator to which logs will be passed directly.
* Only parsers and general purpose operators should be used.

### Parsers with Embedded Operations

Many parsers operators can be configured to embed certain followup operations such as timestamp and severity parsing. For more information, see [complex parsers](../../pkg/stanza/docs/types/parsers.md#complex-parsers).

#### `multiline` configuration

If set, the `multiline` configuration block instructs the `tcp_log` receiver to split log entries on a pattern other than newlines.

The `multiline` configuration block must contain exactly one of `line_start_pattern` or `line_end_pattern`. These are regex patterns that
match either the beginning of a new log entry, or the end of a log entry.

The `omit_pattern` setting can be used to omit the start/end pattern from each entry.

#### Supported encodings

| Key | Description |
| - | - |
| `nop` | No encoding validation. Treats the file as a stream of raw bytes |
| `utf-8` | UTF-8 encoding |
| `utf-16le` | UTF-16 encoding with little-endian byte order |
| `utf-16be` | UTF-16 encoding with little-endian byte order |
| `ascii` | ASCII encoding |
| `big5` | The Big5 Chinese character encoding |

Other less common encodings are supported on a best-effort basis.
See [https://www.iana.org/assignments/character-sets/character-sets.xhtml](https://www.iana.org/assignments/character-sets/character-sets.xhtml)
for other encodings available.

## Example Configurations

### Simple

Configuration:

```yaml theme={null}
receivers:
  tcp_log:
    listen_address: "0.0.0.0:54525"
```

The deprecated component type `tcplog` is still accepted:

```yaml theme={null}
receivers:
  tcplog:
    listen_address: "0.0.0.0:54525"
```

### Advanced

Following configuration incorporates TLS, multiline config, operators and retry on failure:

```yaml theme={null}
receivers:
  tcp_log:
    listen_address: "0.0.0.0:54525"
    max_log_size: 2MiB
    one_log_per_packet: false
    add_attributes: true
    encoding: utf-8
    attributes:
      environment: "production"
      team: "backend"
    resource:
      service.name: "my-tcp-service"
      service.version: "1.0.0"
    tls:
      cert_file: "/etc/otel/certs/server.crt"
      key_file: "/etc/otel/certs/server.key"
      ca_file: "/etc/otel/certs/ca.crt"
      client_ca_file: "/etc/otel/certs/client-ca.crt"
    retry_on_failure:
      enabled: true
      initial_interval: 2s
      max_interval: 20s
      max_elapsed_time: 2m
    multiline:
      line_start_pattern: '^\d{4}-\d{2}-\d{2}' # logs starting with a date
      omit_pattern: true
    operators:
      - type: json_parser
        id: parse_json
        output: timestamp_parser
```

## Configuration

### Example Configuration

```yaml theme={null}
tcp_log:
  listen_address: "127.0.0.1:29018"
  retry_on_failure:
    enabled: false
    initial_interval: 1000000000
    max_interval: 30000000000
    max_elapsed_time: 300000000000
```

***

*Last generated: 2026-10-05*
