A Datadog Agent check for the 10x Engine. It reads the engine's Prometheus metrics endpoint and submits per-pattern log volume and byte counters to Datadog.
This is the source of the integration submitted to Datadog's catalogue as DataDog/integrations-extras#3157. Until that is merged and the wheel is published by Datadog, install it from the release:
curl -LO https://github.com/log-10x/datadog-integration/releases/download/v1.0.1/datadog_log10x-1.0.1-py3-none-any.whl
sudo -u dd-agent datadog-agent integration install -w ./datadog_log10x-1.0.1-py3-none-any.whlFor a containerised Agent, add the wheel in a Dockerfile layer:
FROM datadog/agent:7
COPY datadog_log10x-1.0.1-py3-none-any.whl /tmp/
RUN agent integration install -r -w /tmp/datadog_log10x-1.0.1-py3-none-any.whlThe install steps, the dashboard import and the troubleshooting notes are also written up at doc.log10x.com/install/datadog.
The dashboard's logo widget loads its image from doc.log10x.com, so each viewer's browser requests that image from there.
Then follow the Setup section below, skipping its install command. The wheel above replaces that step until Datadog publishes the catalogue entry. The tile text follows.
The 10x Engine is a log pipeline engine that runs inside the operator's own network, in
front of Datadog. It names each log line by its most likely source statement, the
pattern, or by the line's own known words when no source matches. The Receiver counts each
pattern per container against a limit: one threshold and one action for each service the
operator configures, and a fleet default for every other service. Above the limit the
excess takes the action: tier_down marks it for a Flex Logs index, where it still reaches
Datadog and stays searchable; offload sends it to the account's own object storage,
which the Retriever, a separate 10x deployment, indexes and reads back on a query.
Compaction does not apply to Datadog. Every forwarded event carries the route it took
in its routeState field and, when configured, the pattern hash in tenx_hash. Datadog
lowercases tag keys, so on the metrics the route appears as routestate.
Because every line is named by its pattern, the engine counts what every pattern sends
before anything changes, and what it sends afterwards. This integration carries those
counters into Datadog: volume and bytes for everything the pipeline read, and volume and
bytes for what it forwarded.
Every counter carries the same tag set, so any of them can be sliced by message pattern,
service, severity level, route (routestate, when the rate receiver runs), or Kubernetes
container. Four further counters, emitted by the
Retriever rather than by the pipeline, record what went to offload storage and what a
retrieval query returned, in events and in bytes.
Use the out-of-the-box dashboard to compare bytes and events into the pipeline against bytes and events out of it, and to rank patterns by the bytes they contribute.
The 10x Engine runs inside the operator's network. No log data reaches log10x. The Datadog Agent scrapes the Prometheus endpoint on the engine, and on the Retriever where one is deployed, and submits these metrics to Datadog.
This integration runs in the Datadog Agent and reads the 10x Engine's Prometheus metrics endpoint, and the Retriever's where one is deployed. Community integrations are not bundled with the Agent, so install this integration separately.
- A running 10x Engine, installed as described in the 10x install documentation. With no license configured, the engine runs on its built-in Free tier (up to 10 nodes, air-gapped, no expiry); see licensing. A purchased license is an offline file that the engine verifies locally.
- A Datadog Agent, version 7 or later, with network access to the engine's metrics port.
- In the app configuration file, under Select Metric Outputs, uncomment the line
- run/output/metric/prometheus/scrape. You can also pass the line at launch as@run/output/metric/prometheus/scrape. - Restart the pipeline. At startup, the engine prints
Publishing TenXSummary metrics to Prometheus, followed by the port, which is9100by default. To change it, editportinrun/output/metric/prometheus/scrape/config.yaml.
Run the following command on the Agent host:
datadog-agent integration install -t datadog-log10x==1.0.0For containerized and Kubernetes environments, see Use Community and Marketplace Integrations.
-
Create
conf.d/log10x.d/conf.yamlfrom the packagedconf.yaml.exampleand setopenmetrics_endpointto the engine's address, for examplehttp://localhost:9100/metrics. On Kubernetes, use Autodiscovery annotations on the engine's pod instead. -
For the offload and retrieval counters, add a second instance pointing at the Retriever's own endpoint, on the same default port, for example
http://<retriever-host>:9100/metrics. Without this instance, the dashboard's Offload storage group stays empty. Configure the instance as follows:- Set
ignore_connection_errors: trueandenable_health_service_check: false. The Retriever opens its port only while an index or query run is in flight. Without these settings, Datadog reports the closed port between runs as a failure. - Optionally, set a shorter
min_collection_interval, such as5, to increase the chance of collecting metrics during a run. - On Kubernetes, use the same Autodiscovery annotation on the Retriever's index, query, and stream pods.
Note: On Lambda, the Retriever has no endpoint for the Agent to scrape, so the offload and retrieval metrics are not available.
- Set
-
Restart the Agent.
Run datadog-agent status and confirm log10x appears under Running Checks.
- Remove
conf.d/log10x.d/conf.yamland rundatadog-agent integration remove datadog-log10x, then restart the Agent. - Comment the
- run/output/metric/prometheus/scrapeline back out of the engine's app configuration file and restart the pipeline. - Use the delete dashboard option in the dashboard settings to remove the 10x dashboard.
See metadata.csv for the full list with types and units.
| Metric | Emitted by | Counts |
|---|---|---|
log10x.check.up |
The check | One on every run |
log10x.events.read.count, log10x.bytes.read.count |
Pipeline | Everything the pipeline read |
log10x.events.forwarded.count, log10x.bytes.forwarded.count |
Pipeline | Every event returned to the forwarder, on any route. Split by routestate to see what went to Standard Indexing (pass), Flex Logs (tier_down), and storage (offload) |
log10x.events.offloaded.count, log10x.bytes.offloaded.count |
Retriever index | What was written to offload storage |
log10x.events.retrieved.count, log10x.bytes.retrieved.count |
Retriever query | What a retrieval query returned |
The last four come from the Retriever, which runs as its own deployment, so the Agent needs a second instance pointing at it: on Kubernetes, an Autodiscovery annotation on the index, query, and stream pods. On Lambda, the Retriever has no endpoint for the Agent to scrape, so those four metrics do not arrive through this check.
This integration does not submit events.
log10x.openmetrics.health: Returns CRITICAL if the Agent cannot reach the engine's
metrics endpoint, otherwise OK.
- The check is not listed in
datadog-agent status. The integration is not bundled with the Agent; confirm the install step completed and thatconf.d/log10x.d/conf.yamlexists. log10x.openmetrics.healthisCRITICAL. The Agent cannot reach the endpoint. Check the engine log forPublishing TenXSummary metrics to Prometheus, and that the port it names matches the one inconf.yaml.- Series arrive with no
message_patterntag. Pattern enrichment comes from therun/initialize/messagemodule. Confirm it is included in the engine's app configuration.
Contact log10x's support team.