---
icon: material/table-eye
title: "Telemetry"
description: "Every label and metric a deployed 10x Engine can send to log10x, typed, with an example and a PII column. Read from engine 1.1.136."
---

# Telemetry

Every field the [outbound streams](outbound.md) can carry, named. Each row
was read from the source that emits it. None of it is sent with `airgapped=true`
(`TENX_AIRGAPPED`) or with no license configured; the three states are on the
[outbound](outbound.md#when-they-happen) page.

| Property | Value |
|----------|-------|
| Engine version | **1.1.136** |
| Verified against | the shipped 1.1.136 release and images |
| Verified | 2026-10-07 |
| Machine-readable | [JSON](telemetry-schema.json) |

## :material-tag-outline: Labels

These labels ride on every engine telemetry series.

| Label | Type | Example | Source | PII |
|-------|------|---------|--------|:---:|
| `__name__` | string | `tenx_pipeline_up` | Prometheus series name | No |
| `tenx_reported_name` | string | `edge-receiver` | Pipeline display name from the config | No |
| `tenx_pipeline_uuid` | string | `a1b2c3d4-e5f6-...` | Generated per pipeline run | No |
| `tenx_host_name` | string | `edge-node-1` | The host the engine runs on, or `Unknown` when the lookup fails | Hostname |
| `tenx_parent_uuid` | string | `9f8e7d6c-...` | Parent pipeline id, present only when one is set | No |

Three labels appear on specific series rather than on all of them.

| Label | Type | Example | Appears on | PII |
|-------|------|---------|-----------|:---:|
| `tenx_unit_name` | string | `receive` | `tenx_launch_failure_total` | No |
| `tenx_pipeline_factory` | string | `run` | `tenx_launch_failure_total`, when a unit is missing from the factory | No |
| `tenx_failure_reason` | string | `missing unit` | `tenx_launch_failure_total` | Review |

Two of those need a word more. `tenx_failure_reason` is `missing unit` or
`unit init error` for the two classified failures, and otherwise the launch
exception's message, which can name a config path or a unit, which is why
its PII column reads Review. It still carries no log content, because launch
fails before any event is read.

`runtimeAttributes` is the one field a deployment fills itself: `name:value`
pairs supplied at launch, each name prefixed with `tenx_` if it is not
already, and the contents sent as given.

## :material-chart-line: Metrics

The series names below are the wire names, after the suffix that micrometer's
Prometheus renderer adds: `_seconds` on timers, `_total` on counters.

| Metric | Type | Value | Measures |
|--------|------|-------|----------|
| `tenx_pipeline_up` | gauge | `1` | Pipeline is running. Emitted on every send, including the empty keepalive |
| `tenx_pipeline_bootstrap_time_seconds` | timer sum | seconds | Time from launcher construction to the pipeline starting |
| `tenx_pipeline_input_time_seconds` | timer sum | seconds | Time the input stage ran |
| `tenx_pipeline_runtime_seconds` | timer sum | seconds | Total pipeline runtime |
| `tenx_pipeline_invocation_time_seconds` | timer sum | seconds | Runtime of one invocation, for invocation-shaped launchers such as Lambda |
| `tenx_launch_failure_total` | counter | count | A pipeline failed to launch |
| `totalEvents_total` | counter | count | Lines read from the input, counting every line of a multi-line group |
| `totalBytes_total` | counter | bytes | UTF-8 bytes read from the input |
| `tokenized_total` | counter | count | Input entries matched to a template |
| `nonTokenized_total` | counter | count | Input entries no template matched |
| `eventGroups_total` | counter | count | Template-matched entries, each a group of one or more lines |
| `singleEvents_total` | counter | count | Unmatched entries, one line each |

Every pipeline that reads an input stream publishes the six input counters.
They step once a minute and carry the same labels as `tenx_pipeline_up`.

Every value is a number: a count, a byte total or a duration. No metric value
carries a string, so no metric value can carry log content.

## :material-database-arrow-right: Pipeline metrics

The series above are the engine reporting on itself. Per-pattern metrics
(`all_events_summaryVolume_total`, `all_events_summaryBytes_total`,
`emitted_events_summaryBytes_total` and the rest) are a separate stream that
goes wherever the pipeline's [metric output](../run/output/metric/index.md)
points: Prometheus, Datadog, CloudWatch, Elastic, or the log10x hosted
backend.

The shipped configs for the Receiver, the Reporter and the Retriever include
no metric output, so this stream goes only where an operator points it. It
reaches log10x only when `run/output/metric/log10x` is added and
`backendEndpoint` is set.

Per-pattern metrics are labelled with the [enrichment
fields](../run/initialize/index.md) the pipeline configures, which typically
include a recurring pattern name, severity, Kubernetes namespace and
container, and HTTP status. The pattern name is built from the line's
[library words](../run/initialize/message/index.md), the words compiled
from code, or, for a line with none, from a hash of its shape. No value
outside the library enters it, so numbers, IDs, IPs and timestamps never
do. A value that is also a library word can: a customer or product name
made of library words can reach a metric label.
