Agent 5 proxy configuration
This page is not yet available in Spanish. We are working on its translation.
If you have any questions or feedback about our current translation project,
feel free to reach out to us!Overview
This page covers proxy configuration for Agent 5. For information on the latest version of the Agent, see Agent Proxy Configuration.
If your network configuration restricted outbound traffic, proxy all Agent traffic through one or several hosts that have more permissive outbound policies.
A few options are available to send traffic to Datadog over SSL/TLS for hosts that are not directly connected to the Internet.
- Using a web proxy, such as Squid or Microsoft Web Proxy, that is already deployed to your network.
- Using HAProxy (if you want to proxy more than 16-20 Agents through the same proxy).
- Using the Agent as a proxy for up to 16 Agents per proxy. Using the Agent as a proxy only supported on Agent 5.
FIPS compliance
For information on setting up the Datadog Agent FIPS Proxy with the Datadog Agent, see Datadog FIPS Compliance. The FIPS proxy is only available in the US1-FED region. The Datadog Agent FIPS Proxy cannot be used together with a regular proxy.
Web proxy
For specific information regarding Squid, see the Squid section of this page.
Traditional web proxies are supported natively by the Agent. If you need to connect to the Internet through a proxy, edit your Agent configuration file.
The
<HOST>:<PORT>
used to proxy metrics can NOT be used to proxy logs. See the
Proxy for Logs page.
Edit the datadog.conf
file with your proxy information:
# If you need a proxy to connect to the Internet, provide the settings here
proxy_host: my-proxy.example.com
proxy_port: 3128
proxy_user: my_user
proxy_password: my_password
Do not forget to restart the Agent for the new settings to take effect.
Squid
Squid is a forward proxy for the web supporting HTTP, HTTPS, FTP, and more. It runs on most available operating systems, including Windows, and is licensed under the GNU GPL license. Squid is a straightforward option if you do not already have a running web proxy in your network.
Proxy forwarding with Squid
Install Squid on a host that has connectivity to both your internal Agents and Datadog. Use your operating system’s package manager, or install the software directly from Squid’s project page.
To configure Squid, edit the configuration file. This file is usually located at /etc/squid/squid.conf
on Linux or C:\squid\etc\squid.conf
in Windows.
Edit your squid.conf
configuration file so that Squid is able to accept local traffic and forward it to the necessary Datadog intakes:
http_port 0.0.0.0:3128
acl local src 127.0.0.1/32
acl Datadog dstdomain .
http_access allow Datadog
http_access allow local manager
Start Squid
Start (or restart) Squid so that your new configurations can be applied.
sudo systemctl start squid
If Squid is already running, restart Squid instead with the following command:
sudo systemctl restart squid
If you are configuring Squid on Windows, you must first configure Squid as a system service. You can then run the following in an Administrator command prompt:
If Squid is already running, restart Squid instead with the following commands:
net stop squid
net start squid
Datadog Agent configuration
Modify the Agent’s configuration file (datadog.conf
) to include the following:
proxy_host: 127.0.0.1
proxy_port: 3128
After saving these changes, restart the Agent.
Verify that Datadog is able to receive the data from your Agent(s) by checking your Infrastructure Overview.
HAProxy
HAProxy is a free, fast, and reliable solution offering proxying for TCP and HTTP applications. While HAProxy is usually used as a load balancer to distribute incoming requests to pool servers, you can also use it to proxy Agent traffic to Datadog from hosts that have no outside connectivity:
agent ---> haproxy ---> Datadog
This is another good option if you do not have a web proxy readily available in your network and you wish to proxy a large number of Agents. In some cases, a single HAProxy instance is sufficient to handle local Agent traffic in your network, because each proxy can accommodate upwards of 1000 Agents.
Note: This figure is a conservative estimate based on the performance of m3.xl
instances specifically. Numerous network-related and host-related variables can influence throughput of HAProxy, so you should keep an eye on your proxy deployment both before and after putting it into service. See the HAProxy documentation for additional information.
The communication between HAProxy and Datadog is always encrypted with TLS. The communication between the Agent host and the HAProxy host is not encrypted by default, because the proxy and the Agent are assumed to be on the same host. However, it is recommended that you secure this communication with TLS encryption if the HAproxy host and Agent host are not located on the same isolated local network.
To encrypt data between the Agent and HAProxy, you need to create an x509 certificate with the Subject Alternative Name (SAN) extension for the HAProxy host. This certificate bundle (*.pem) should contain both the public certificate and private key. See this HAProxy blog post for more information.
Note: Download the Datadog certificate with one of the following commands:
sudo apt-get install ca-certificates # (Debian, Ubuntu)
yum install ca-certificates # (CentOS, Red Hat)
The path to the certificate is /etc/ssl/certs/ca-certificates.crt
for Debian and Ubuntu, or /etc/ssl/certs/ca-bundle.crt
for CentOS and Red Hat.
Proxy forwarding with HAProxy
HAProxy configuration
HAProxy should be installed on a host that has connectivity to Datadog. You can use one of the following configuration files if you do not already have it configured. The configuration is dependent on the Datadog service and site. To see configurations based on your Datadog site, use the DATADOG SITE
selector on the right.
Note: It is recommended to use the HTTPS
configuration file if the Agent and HAProxy are not part of the same isolated local network.
HTTP
# Basic configuration
global
log 127.0.0.1 local0
maxconn 4096
stats socket /tmp/haproxy
# Some sane defaults
defaults
log global
option dontlognull
retries 3
option redispatch
timeout client 5s
timeout server 5s
timeout connect 5s
# This declares a view into HAProxy statistics, on port 3833
# You do not need credentials to view this page and you can
# turn it off once you are done with setup.
listen stats
bind *:3833
mode http
stats enable
stats uri /
# This section is to reload DNS Records
# Replace <DNS_SERVER_IP> and <DNS_SECONDARY_SERVER_IP> with your DNS Server IP addresses.
# For HAProxy 1.8 and newer
resolvers my-dns
nameserver dns1 <DNS_SERVER_IP>:53
nameserver dns2 <DNS_SECONDARY_SERVER_IP>:53
resolve_retries 3
timeout resolve 2s
timeout retry 1s
accepted_payload_size 8192
hold valid 10s
hold obsolete 60s
# This declares the endpoint where your Agents connects for
# sending metrics (for example, the value of "dd_url").
frontend metrics-forwarder
bind *:3834
mode http
option tcplog
default_backend datadog-metrics
use_backend datadog-api if { path_beg -i /api/v1/validate }
use_backend datadog-flare if { path_beg -i /support/flare/ }
# This declares the endpoint where your Agents connects for
# sending traces (for example, the value of "endpoint" in the APM
# configuration section).
frontend traces-forwarder
bind *:3835
mode tcp
option tcplog
default_backend datadog-traces
# This declares the endpoint where your Agents connects for
# sending profiles (for example, the value of "apm_config.profiling_dd_url").
frontend profiles-forwarder
bind *:3836
mode tcp
option tcplog
default_backend datadog-profiles
# This declares the endpoint where your agents connects for
# sending processes (for example, the value of "url" in the process
# configuration section).
frontend processes-forwarder
bind *:3837
mode tcp
option tcplog
default_backend datadog-processes
# This declares the endpoint where your Agents connects for
# sending Logs (e.g the value of "logs.config.logs_dd_url")
# If sending logs with force_use_http: true
frontend logs_http_frontend
bind *:3838
mode http
option tcplog
default_backend datadog-logs-http
# If sending logs with force_use_tcp: true
# frontend logs_frontend
# bind *:10514
# mode tcp
# option tcplog
# default_backend datadog-logs
# This declares the endpoint where your Agents connects for
# sending database monitoring metrics and activity (e.g the value of "database_monitoring.metrics.dd_url" and "database_monitoring.activity.dd_url")
frontend database_monitoring_metrics_frontend
bind *:3839
mode http
option tcplog
default_backend datadog-database-monitoring-metrics
# This declares the endpoint where your Agents connects for
# sending database monitoring samples (e.g the value of "database_monitoring.samples.dd_url")
frontend database_monitoring_samples_frontend
bind *:3840
mode http
option tcplog
default_backend datadog-database-monitoring-samples
# This declares the endpoint where your Agents connects for
# sending Network Devices Monitoring metadata (e.g the value of "network_devices.metadata.dd_url")
frontend network_devices_metadata_frontend
bind *:3841
mode http
option tcplog
default_backend datadog-network-devices-metadata
# This declares the endpoint where your Agents connects for
# sending Network Devices SNMP Traps data (e.g the value of "network_devices.snmp_traps.forwarder.dd_url")
frontend network_devices_snmp_traps_frontend
bind *:3842
mode http
option tcplog
default_backend datadog-network-devices-snmp-traps
# This declares the endpoint where your Agents connect for
# sending Instrumentation Telemetry data (e.g. the value of "apm_config.telemetry.dd_url")
frontend instrumentation_telemetry_data_frontend
bind *:3843
mode tcp
option tcplog
default_backend datadog-instrumentations-telemetry
# This declares the endpoint where your Agents connect for
# sending Network Devices Monitoring NetFlow flows (for example, the value of "network_devices.netflow.forwarder.dd_url")
frontend network_devices_netflow_frontend
bind *:3845
mode http
option tcplog
default_backend datadog-network-devices-netflow
# This declares the endpoint where your Agents connects for
# receiving Remote Configurations (for example, the value of "remote_configuration.rc_dd_url")
frontend remote_configuration_frontend
bind *:3846
mode http
option tcplog
default_backend datadog-remote-configuration
# This declares the endpoint where your Agents connect for
# sending Network Path data (for example, the value of "network_path.forwarder.dd_url")
frontend network_path_frontend
bind *:3847
mode http
option tcplog
default_backend datadog-network-path
# This is the Datadog server. In effect, any TCP request coming
# to the forwarder frontends defined above are proxied to
# Datadog's public endpoints.
backend datadog-metrics
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 haproxy-app.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership haproxy-app.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-api
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 api.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership api.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-flare
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 flare.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership flare.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-traces
balance roundrobin
mode tcp
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 trace.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership trace.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-profiles
balance roundrobin
mode tcp
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 intake.profile.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership profile.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-processes
balance roundrobin
mode tcp
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 process.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership process.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-logs-http
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 agent-http-intake.logs.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server datadog agent-http-intake.logs.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-database-monitoring-metrics
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 dbm-metrics-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server datadog agent-http-intake.logs.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-database-monitoring-samples
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 dbquery-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server datadog agent-http-intake.logs.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-network-devices-metadata
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 ndm-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership ndm-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-network-devices-snmp-traps
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 snmp-traps-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership snmp-traps-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-instrumentations-telemetry
balance roundrobin
mode tcp
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 instrumentation-telemetry-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership instrumentation-telemetry-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-network-devices-netflow
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 ndmflow-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership ndmflow-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-remote-configuration
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 config.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership config.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
backend datadog-network-path
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 netpath-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership netpath-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_CERTIFICATES>
HTTPS
This configuration adds SSL/TLS encryption on communication between the Agent and HAProxy. Replace the variable <PATH_TO_PROXY_CERTIFICATE_PEM>
with the path to the proxy certificate bundle (*.pem).
# Basic configuration
global
log 127.0.0.1 local0
maxconn 4096
stats socket /tmp/haproxy
# Some sane defaults
defaults
log global
option dontlognull
retries 3
option redispatch
timeout client 5s
timeout server 5s
timeout connect 5s
# This declares a view into HAProxy statistics, on port 3833
# You do not need credentials to view this page and you can
# turn it off once you are done with setup.
listen stats
bind *:3833
mode http
stats enable
stats uri /
# This section is to reload DNS Records
# Replace <DNS_SERVER_IP> and <DNS_SECONDARY_SERVER_IP> with your DNS Server IP addresses.
# For HAProxy 1.8 and newer
resolvers my-dns
nameserver dns1 <DNS_SERVER_IP>:53
nameserver dns2 <DNS_SECONDARY_SERVER_IP>:53
resolve_retries 3
timeout resolve 2s
timeout retry 1s
accepted_payload_size 8192
hold valid 10s
hold obsolete 60s
# This declares the endpoint where your Agents connect for
# sending metrics (for example, the value of "dd_url").
frontend metrics-forwarder
bind *:3834 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode http
option tcplog
default_backend datadog-metrics
use_backend datadog-api if { path_beg -i /api/v1/validate }
use_backend datadog-flare if { path_beg -i /support/flare/ }
# This declares the endpoint where your Agents connect for
# sending traces (for example, the value of "endpoint" in the APM
# configuration section).
frontend traces-forwarder
bind *:3835 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode tcp
option tcplog
default_backend datadog-traces
# This declares the endpoint where your Agents connect for
# sending profiles (for example, the value of "apm_config.profiling_dd_url").
frontend profiles-forwarder
bind *:3836 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode tcp
option tcplog
default_backend datadog-profiles
# This declares the endpoint where your Agents connect for
# sending processes (for example, the value of "url" in the process
# configuration section).
frontend processes-forwarder
bind *:3837 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode tcp
option tcplog
default_backend datadog-processes
# This declares the endpoint where your Agents connect for
# sending Logs (e.g the value of "logs.config.logs_dd_url")
# If sending logs with force_use_http: true
frontend logs_http_frontend
bind *:3838 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode http
option tcplog
default_backend datadog-logs-http
# If sending logs with force_use_tcp: true
# frontend logs_frontend
# bind *:10514 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
# mode tcp
# option tcplog
# default_backend datadog-logs
# This declares the endpoint where your Agents connect for
# sending database monitoring metrics and activity (e.g the value of "database_monitoring.metrics.dd_url" and "database_monitoring.activity.dd_url")
frontend database_monitoring_metrics_frontend
bind *:3839 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode http
option tcplog
default_backend datadog-database-monitoring-metrics
# This declares the endpoint where your Agents connect for
# sending database monitoring samples (e.g the value of "database_monitoring.samples.dd_url")
frontend database_monitoring_samples_frontend
bind *:3840 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode http
option tcplog
default_backend datadog-database-monitoring-samples
# This declares the endpoint where your Agents connect for
# sending Network Devices Monitoring metadata (e.g the value of "network_devices.metadata.dd_url")
frontend network_devices_metadata_frontend
bind *:3841 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode http
option tcplog
default_backend datadog-network-devices-metadata
# This declares the endpoint where your Agents connect for
# sending Network Devices SNMP Traps data (e.g the value of "network_devices.snmp_traps.forwarder.dd_url")
frontend network_devices_snmp_traps_frontend
bind *:3842 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode http
option tcplog
default_backend datadog-network-devices-snmp-traps
# This declares the endpoint where your Agents connect for
# sending Instrumentation Telemetry data (e.g. the value of "apm_config.telemetry.dd_url")
frontend instrumentation_telemetry_data_frontend
bind *:3843 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode tcp
option tcplog
default_backend datadog-instrumentations-telemetry
# This declares the endpoint where your Agents connect for
# sending Network Devices Monitoring NetFlow flows (for example, the value of "network_devices.netflow.forwarder.dd_url")
frontend network_devices_netflow_frontend
bind *:3845 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode http
option tcplog
default_backend datadog-network-devices-netflow
# This declares the endpoint where your Agents connects for
# receiving Remote Configurations (for example, the value of "remote_configuration.rc_dd_url")
frontend remote_configuration_frontend
bind *:3846 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode http
option tcplog
default_backend datadog-remote-configuration
# This declares the endpoint where your Agents connect for
# sending Network Path data (for example, the value of "network_path.forwarder.dd_url")
frontend network_path_frontend
bind *:3847 ssl crt <PATH_TO_PROXY_CERTIFICATE_PEM>
mode http
option tcplog
default_backend datadog-network-path
# This is the Datadog server. In effect any TCP request coming
# to the forwarder frontends defined above are proxied to
# Datadog's public endpoints.
backend datadog-metrics
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 haproxy-app.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership haproxy-app.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-api
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 api.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership api.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-flare
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 flare.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership flare.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-traces
balance roundrobin
mode tcp
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 trace.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership trace.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-profiles
balance roundrobin
mode tcp
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 intake.profile.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership profile.agent.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-processes
balance roundrobin
mode tcp
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 process.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership process.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-logs-http
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 agent-http-intake.logs.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server datadog agent-http-intake.logs.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-database-monitoring-metrics
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 dbm-metrics-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server datadog agent-http-intake.logs.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-database-monitoring-samples
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 dbquery-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server datadog agent-http-intake.logs.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-network-devices-metadata
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 ndm-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership ndm-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-network-devices-snmp-traps
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 snmp-traps-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership snmp-traps-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-instrumentations-telemetry
balance roundrobin
mode tcp
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 instrumentation-telemetry-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership instrumentation-telemetry-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-network-devices-netflow
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 ndmflow-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership ndmflow-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-remote-configuration
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 config.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership config.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
backend datadog-network-path
balance roundrobin
mode http
# The following configuration is for HAProxy 1.8 and newer
server-template mothership 5 netpath-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT> check resolvers my-dns init-addr none resolve-prefer ipv4
# Uncomment the following configuration for older HAProxy versions
# server mothership netpath-intake.:443 check port 443 ssl verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
Note: You can use verify none
instead of verify required ca-file <PATH_TO_DATADOG_CERTIFICATES_CRT>
if you are unable to get the certificates on the proxy host, but be aware that HAProxy will not be able to verify Datadog’s intake certificate in that case.
HAProxy 1.8 and newer allow DNS service discovery to detect server changes and automatically apply them to your configuration.
If you are using older version of HAProxy, you have to reload or restart HAProxy. It is recommended to have a cron
job reload HAProxy every 10 minutes (such as service haproxy reload
) to force a refresh of HAProxy’s DNS cache, in case
fails over to another IP.
Datadog Agent configuration
When using encryption between the Agent and HAProxy, if the Agent does not have access to the proxy certificate, is unable to validate it, or the validation is not needed, you can edit the datadog.yaml
Agent configuration file and set skip_ssl_validation
to true
.
With this option set to true
, the Agent skips the certificate validation step and does not verify the identity of the proxy, but the communication is still encrypted with SSL/TLS.
skip_ssl_validation: true
Finally restart the Agent.
To verify that everything is working properly, review the HAProxy statistics at http://haproxy.example.com:3833
as well as the Infrastructure Overview.
Edit each Agent to point to HAProxy by setting its dd_url
to the address of HAProxy, for example: haproxy.example.com
.
This dd_url
setting can be found in the datadog.conf
file.
dd_url: http://haproxy.example.com:3834
To send traces or processes through the proxy, setup the following in the datadog.conf
file:
[trace.api]
endpoint = http://haproxy.example.com:3835
[process.api]
endpoint = http://haproxy.example.com:3837
Edit your supervisor configuration to disable SSL certificate verification. This is needed to prevent Python from complaining about the discrepancy between the hostname on the SSL certificate (app.datadoghq.com
) and your HAProxy hostname. The supervisor configuration found at:
/etc/dd-agent/supervisor_ddagent.conf
on Debian-based systems/etc/dd-agent/supervisor.conf
on Red Hat-based systems/opt/local/datadog/supervisord/supervisord.conf
on SmartOS/usr/local/etc/datadog/supervisord/supervisord.conf
on FreeBSD~/.datadog-agent/supervisord/supervisord.conf
on macOS
Assuming that the supervisor file is found at <SUP_FILE>
sed -i 's/ddagent.py/ddagent.py --sslcheck=0/' <SUP_FILE>
For the Windows Agent, edit your configuration file datadog.conf
and add this option:
Finally restart the Agent.
To verify that everything is working properly, review the HAProxy statistics at http://haproxy.example.com:3833
as well as the Infrastructure Overview.
NGINX
NGINX is a web server which can also be used as a reverse proxy, load balancer, mail proxy, and HTTP cache. You can also use NGINX as a proxy for your Datadog Agents:
agent ---> nginx ---> Datadog
The communication between NGINX and Datadog is always encrypted with TLS. The communication between the Agent host and the NGINX host is not encrypted by default, because the proxy and the Agent are assumed to be on the same host. However, it is recommended that you secure this communication with TLS encryption if they are not located on the same isolated local network.
In order to encrypt data between the Agent and NGINX, you need to create an x509 certificate with the Subject Alternative Name (SAN) extension for the NGINX host.
Note: Download the Datadog certificate with one of the following commands:
sudo apt-get install ca-certificates # (Debian, Ubuntu)
yum install ca-certificates # (CentOS, Red Hat)
The path to the certificate is /etc/ssl/certs/ca-certificates.crt
for Debian and Ubuntu or /etc/ssl/certs/ca-bundle.crt
for CentOS and Red Hat.
Proxy forwarding with NGINX
NGINX configuration
NGINX should be installed on a host that has connectivity to Datadog. You can use one of the following configuration files if you do not already have it configured. The configuration is dependent on the Datadog service and site. To see configurations based on your Datadog site, use the DATADOG SITE
selector on the right.
Note: It is recommended to use the HTTPS
configuration file if the Agent and NGINX are not part of the same isolated local network.
HTTP
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
# HTTP Proxy for Datadog Agent
http {
proxy_ssl_trusted_certificate <PATH_TO_CERTIFICATES>;
server {
listen 3834; #listen for metrics
access_log off;
location /api/v1/validate {
proxy_ssl_verify on;
proxy_pass https://api.:443/api/v1/validate;
}
location /support/flare/ {
proxy_ssl_verify on;
proxy_pass https://flare.:443/support/flare/;
}
location / {
proxy_ssl_verify on;
proxy_pass https://haproxy-app.agent.:443/;
}
}
}
# TCP Proxy for Datadog Agent
stream {
proxy_ssl_trusted_certificate <PATH_TO_CERTIFICATES>;
server {
listen 3835; #listen for traces
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass trace.agent.:443;
}
server {
listen 3836; #listen for profiles
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass intake.profile.:443;
}
server {
listen 3837; #listen for processes
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass process.:443;
}
server {
listen 3838; #listen for logs with force_use_http: true
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass agent-http-intake.logs.:443;
}
server {
listen 3839; #listen for database monitoring metrics
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass dbm-metrics-intake.:443;
}
server {
listen 3840; #listen for database monitoring samples
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass dbquery-intake.:443;
}
server {
listen 3841; #listen for network devices metadata
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass ndm-intake.:443;
}
server {
listen 3842; #listen for network devices traps
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass snmp-traps-intake.:443;
}
server {
listen 3843; #listen for instrumentations telemetry data
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass instrumentation-telemetry-intake.:443;
}
server {
listen 3845; #listen for network devices netflow
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass ndmflow-intake.:443;
}
server {
listen 3846; #listen for Remote Configuration requests
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass config.:443;
}
server {
listen 3847; #listen for network path
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass netpath-intake.:443;
}
}
HTTPS
This configuration adds SSL/TLS encryption on communication between the Agent and NGINX. Replace <PATH_TO_PROXY_CERTIFICATE>
with the path to the proxy public certificate and <PATH_TO_PROXY_CERTIFICATE_KEY>
with the path to the private key.
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
# HTTP Proxy for Datadog Agent
http {
proxy_ssl_trusted_certificate <PATH_TO_CERTIFICATES>;
ssl_certificate <PATH_TO_PROXY_CERTIFICATE>;
ssl_certificate_key <PATH_TO_PROXY_CERTIFICATE_KEY>;
server {
listen 3834 ssl; #listen for metrics
access_log off;
location /api/v1/validate {
proxy_ssl_verify on;
proxy_pass https://api.:443/api/v1/validate;
}
location /support/flare/ {
proxy_ssl_verify on;
proxy_pass https://flare.:443/support/flare/;
}
location / {
proxy_ssl_verify on;
proxy_pass https://haproxy-app.agent.:443/;
}
}
}
# TCP Proxy for Datadog Agent
stream {
proxy_ssl_trusted_certificate <PATH_TO_CERTIFICATES>;
ssl_certificate <PATH_TO_PROXY_CERTIFICATE>;
ssl_certificate_key <PATH_TO_PROXY_CERTIFICATE_KEY>;
server {
listen 3835 ssl; #listen for traces
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass trace.agent.:443;
}
server {
listen 3836 ssl; #listen for profiles
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass intake.profile.:443;
}
server {
listen 3837 ssl; #listen for processes
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass process.:443;
}
server {
listen 3838 ssl; #listen for logs with force_use_http: true
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass agent-http-intake.logs.:443;
}
server {
listen 3839 ssl; #listen for database monitoring metrics
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass dbm-metrics-intake.:443;
}
server {
listen 3840 ssl; #listen for database monitoring samples
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass dbquery-intake.:443;
}
server {
listen 3841 ssl; #listen for network devices metadata
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass ndm-intake.:443;
}
server {
listen 3842 ssl; #listen for network devices traps
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass snmp-traps-intake.:443;
}
server {
listen 3843 ssl; #listen for instrumentations telemetry data
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass instrumentation-telemetry-intake.:443;
}
server {
listen 3845 ssl; #listen for network devices netflow
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass ndmflow-intake.:443;
}
server {
listen 3846 ssl; #listen for Remote Configuration requests
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass config.:443;
}
server {
listen 3847 ssl; #listen for network path
proxy_ssl_verify on;
proxy_ssl on;
proxy_pass netpath-intake.:443;
}
}
Note: You can remove proxy_ssl_verify on
if you are unable to get the certificates on the proxy host, but be aware that NGINX will not be able to verify Datadog’s intake certificate in that case.
Datadog Agent configuration
Edit each Agent configuration file to point to Nginx by setting its dd_url
to the address of Nginx, for example: nginx.example.com
.
This dd_url
setting can be found in the datadog.yaml
file.
dd_url: "<SCHEME>://nginx.example.com:3834"
Replace <SCHEME>
with https
if you previously chose the HAProxy HTTPS configuration, or with http
if you did not choose HTTPS.
To send traces, profiles, processes, and logs through the proxy, setup the following in the datadog.yaml
file:
apm_config:
apm_dd_url: <SCHEME>://nginx.example.com:3835
profiling_dd_url: <SCHEME>://nginx.example.com:3836/api/v2/profile
telemetry:
dd_url: <SCHEME>://nginx.example.com:3843
process_config:
process_dd_url: <SCHEME>://nginx.example.com:3837
logs_config:
force_use_http: true
logs_dd_url: nginx.example.com:3838
# Comment the line below to use encryption between the Agent and NGINX
logs_no_ssl: true
database_monitoring:
metrics:
logs_dd_url: nginx.example.com:3839
# Comment the line below to use encryption between the Agent and NGINX
logs_no_ssl: true
activity:
logs_dd_url: nginx.example.com:3839
# Comment the line below to use encryption between the Agent and NGINX
logs_no_ssl: true
samples:
logs_dd_url: nginx.example.com:3840
# Comment the line below to use encryption between the Agent and NGINX
logs_no_ssl: true
network_devices:
metadata:
logs_dd_url: nginx.example.com:3841
# Comment the line below to use encryption between the Agent and NGINX
logs_no_ssl: true
snmp_traps:
forwarder:
logs_dd_url: nginx.example.com:3842
# Comment the line below to use encryption between the Agent and NGINX
logs_no_ssl: true
netflow:
forwarder:
logs_dd_url: nginx.example.com:3845
# Comment the line below to use encryption between the Agent and NGINX
logs_no_ssl: true
remote_configuration:
rc_dd_url: nginx.example.com:3846
# Comment the line below to use encryption between the Agent and NGINX
no_tls: true
When using encryption between the Agent and NGINX, if the Agent does not have access to the proxy certificate, is unable to validate it, or the validation is not needed, you can edit the datadog.yaml
Agent configuration file and set skip_ssl_validation
to true
.
With this option set to true
, the Agent skips the certificate validation step and does not verify the identity of the proxy, but the communication is still encrypted with SSL/TLS.
skip_ssl_validation: true
When sending logs over TCP, see TCP Proxy for Logs.
Datadog Agent
It is recommended to use an actual proxy (a web proxy or HAProxy) to forward your traffic to Datadog, however if those options aren’t available to you, it is possible to configure an instance of Agent v5 to serve as a proxy.
Designate one node running datadog-agent as the proxy.
In this example assume that the proxy name is proxy-node
. This node must be able to reach https://app.datadoghq.com
.
Verify SSL connectivity on proxy-node
:
curl -v https://app.datadoghq.com/account/login 2>&1 | grep "200 OK"
Allow non-local traffic on proxy-node
by changing the following line in datadog.conf
.
# non_local_traffic: no
should read non_local_traffic: yes
.
Make sure proxy-node
can be reached from the other nodes over port 17123. Start the Agent on the proxy-node
and run on the other nodes:
curl -v http://proxy-node:17123/status 2>&1 | grep "200 OK"
Update non-proxy nodes to forward to proxy-node
. Change the following line in datadog.conf
from:
dd_url: https://app.datadoghq.com
to
dd_url: http://proxy-node:17123
Verify on the Infrastructure page that all nodes report data to Datadog.