additional_endpoints settings. This lets you evaluate Bronto, for example during a proof of value, with the data you already collect and without changing your application instrumentation. This page covers configuration only.
For installation instructions, see the Datadog Agent documentation.
How it works
Bronto accepts the Datadog Agent’s log format directly. Metrics and traces need to be converted to OpenTelemetry (OTLP) first, which an OpenTelemetry Collector with the Datadog receiver does on the way:
Datadog keeps receiving everything it does today. You can set up each signal on its own.
Logs are the quickest way to evaluate Bronto: they only need a change to the Agent’s configuration. Metrics and traces are optional and need an OpenTelemetry Collector in addition to the Agent.
The Agent can also dual ship other Datadog data, such as profiles, live processes, Database Monitoring, Network Device Monitoring, and security events. Bronto does not ingest these.
Send logs
Requirements
Use Datadog Agent 7.37.0 or later. Earlier versions work with the following limitations:Endpoint and authentication
Use the ingestion endpoint for your Bronto region:
Set
api_key to your Bronto API key.
Configuration
Each example setsforce_use_http: true. The Agent requires the transport to be set explicitly when additional_endpoints is configured, and the same transport is used for Datadog and every additional endpoint.
- Linux
- Kubernetes/Helm
- Kubernetes/Operator
Edit To control which dataset and collection the logs are stored in, see Choose the dataset and collection.
/etc/datadog-agent/datadog.yaml to add Bronto as an additional log endpoint:datadog.yaml
additional_endpoints configuration reference, see the Datadog Agent log forwarding documentation.
Choose the dataset and collection
By default, Bronto stores each log in:- the dataset named by the log’s Datadog
servicetag - the collection named by the log’s Datadog
sourcetag
br_dataset or br_collection tag on the log.
In Kubernetes, the Agent sets source for each container from its short image name, unless you set it in the pod’s log configuration. Containers in the same pod therefore often have different sources. For example, a service’s application container, its service mesh sidecar (such as proxyv2 for Istio) and its init containers each end up in a different collection, all under the same dataset name.
To group logs by cluster instead, set br_collection to a cluster identifier with the kubernetes.annotations.logs.bronto.io/collection pod annotation, as shown in the Kubernetes tabs above. To set the dataset the same way, map a second annotation to br_dataset:
datadog-values.yaml
conf.d directory:
conf.d/<APP_NAME>.d/conf.yaml
How logs appear in Bronto
The Datadog Agent sends each log with its tags and metadata, such asservice, source, host and Kubernetes tags like kube_namespace and pod_name. Bronto stores these as attributes of the event, separately from the fields it parses from the log message.
Some tags you see in Datadog are not in the Agent’s payload, so they don’t reach Bronto. Datadog adds host tags and cloud provider tags, such as the cluster name, region and account, when it receives the log. To identify the cluster in Bronto, set br_collection as described in Choose the dataset and collection.
Bronto reads a log’s severity from standard Elastic Common Schema and OpenTelemetry severity fields. Datadog’s status attribute is not one of these. If a log has no standard severity field, its status is the one the Agent assigns: info for logs written to stdout and error for logs written to stderr. To keep the level your application logs, write it to an ECS-compliant field such as log.level.
Store the API key in a Kubernetes Secret
The Kubernetes examples above store the Bronto API key in plain text in a ConfigMap orDatadogAgent resource. For production, set the endpoint through the DD_LOGS_CONFIG_ADDITIONAL_ENDPOINTS environment variable and source it from a Kubernetes Secret instead. Environment variables take precedence over datadog.yaml, so you don’t need customAgentConfig or customConfigurations with this approach.
Create the Secret in the namespace where the Datadog Agent runs:
- Kubernetes/Helm
- Kubernetes/Operator
datadog-values.yaml
Verify log collection
After you apply your configuration and restart the Datadog Agent:-
Run the Agent
statuscommand and check the Logs Agent section:The Bronto endpoint is listed alongside the Datadog endpoint, for exampleReliable: Sending compressed logs in HTTPS to ingestion.<REGION>.bronto.io on port 443. If it shows TCP instead of HTTPS, check thatforce_use_httpis set. -
Check the Agent logs for delivery errors. Failed requests to an additional endpoint are logged as warnings that include the endpoint URL, for example
failed to post http payload. On Linux, the Agent logs are in/var/log/datadog/. In Kubernetes, runkubectl logs <AGENT_POD_NAME> -c agent. - Confirm your log data is being ingested to Bronto on the Search page.
Send metrics and traces
The Datadog Agent sends metrics and traces in Datadog’s own format, which Bronto does not ingest directly. Run an OpenTelemetry Collector with the Datadog receiver between the Agent and Bronto. The receiver accepts the Agent’s payloads and the Collector forwards them to Bronto over OTLP. This part is optional. Set it up if you want to evaluate metrics and traces in Bronto as well as logs.Requirements
- An OpenTelemetry Collector distribution that includes the
datadogreceiver, such asotelcol-contrib. This setup was tested withotelcol-contrib0.158.0. - For traces, check your Datadog Agent version:
The Datadog receiver is an alpha component for traces and is in development for metrics. Its behavior can change between Collector releases.
Step 1: Run the Collector
Configure the Datadog receiver and one OTLP exporter per signal:otel-config.yaml
8127 because the Datadog Agent already uses 8126 for APM. Any free port works, as long as the Agent configuration in the next step uses the same one.
Run the Collector where every Datadog Agent can reach it.
In Kubernetes, install it with the OpenTelemetry Helm chart as a Deployment. The chart configures Service ports separately from receivers, so add a datadog port for 8127. Without it, the Agents can’t reach the receiver through the Service:
values.yaml
fullnameOverride: otel-collector, use otel-collector.<NAMESPACE>.svc.cluster.local as <COLLECTOR_HOST> below. For more on running the Collector in Kubernetes, see Connect OpenTelemetry Collector to Bronto.
The Bronto API key only needs to be set in the Collector. The Agent does not need it for metrics and traces.
Step 2: Point the Agent at the Collector
Add the Collector as an additional endpoint for metrics (additional_endpoints) and traces (apm_config.additional_endpoints). The Agent requires an API key for every endpoint, but the Datadog receiver ignores it, so any placeholder value works.
- Linux
- Kubernetes/Helm
- Kubernetes/Operator
Edit Restart the Agent to apply the change.
/etc/datadog-agent/datadog.yaml:datadog.yaml
apm_config.features or DD_APM_FEATURES, add disable-convert-traces to your existing list instead of replacing it.
Traces with newer Agents
Starting with version 7.84.0, the Datadog Agent converts traces into a new internal format before sending them. The Datadog receiver cannot read this format yet. It accepts the payloads without an error and produces no spans, so traces never reach Bronto and neither the Agent nor the Collector reports a problem. Thedisable-convert-traces APM feature keeps the Agent on the previous trace format. Metrics and logs are not affected. The feature is not part of Datadog’s public documentation, so test it in a non-production environment first, and check Verify metrics and traces after every Agent upgrade.
What to expect in Bronto
Metrics
Datadog tags become metric attributes. The receiver translates common tags to OpenTelemetry resource attributes, so filter on the translated names:
The receiver also translates other Kubernetes, ECS, and HTTP tags. See the receiver’s tag mapping for the full list.
host.name comes from the hostname the Agent reports, not from a tag. Other key:value tags keep their key, and tags without a value get an unnamed_ prefix.
Besides your custom metrics, the Agent sends the metrics from its checks (for example system.*, container.*, and integration metrics) and its own telemetry under datadog.*. The Agent’s own telemetry can be a large share of the metric names. To leave it out, add a filter processor to the metrics pipeline:
otel-config.yaml
The original Datadog name of a renamed span is not kept, so search for these spans by their new name. The Datadog resource name is always stored in the
dd.span.Resource span attribute.
Agent warnings
The Agent also sends host metadata to the /intake path of every metrics endpoint. The Datadog receiver rejects it, so the Agent logs recurring warnings like error "405 Method Not Allowed" while sending transaction to "http://<COLLECTOR_HOST>:8127/intake/". You can ignore these warnings. Metrics are not affected.
Verify metrics and traces
After you apply the configuration and restart the Agent:-
Run the Agent
statuscommand. The Collector is listed under Forwarder → Endpoints for metrics and under APM Agent → Endpoints for traces. -
Check the Agent logs for errors that include the Collector’s URL. Apart from the
/intake/warnings described above, there should be none. -
Check the data in Bronto:
- Metrics: search for one of your metrics, or a check metric such as
system.load.1, in the Metric Explorer. - Traces: confirm your services appear in Explore Traces.
- Metrics: search for one of your metrics, or a check metric such as
When you stop using Datadog
Dual shipping only works while the Datadog Agent still sends data to Datadog. Before your Datadog contract ends, move your collection to OpenTelemetry:- Deploy the OpenTelemetry Collector to collect logs, metrics, and traces and send them to Bronto. See Connect OpenTelemetry Collector to Bronto.
- Point your applications at the Collector instead of the Datadog Agent. See Send Metrics to Bronto and Send Traces to Bronto.
- Check that your data arrives in Bronto, then remove the Datadog Agent.
