Utilizar HAProxy como proxy TCP para los logs
Este ejemplo explica cómo configurar el Datadog Agent para enviar logs en TCP a un servidor con HAProxy, instalado y escuchando en el puerto 10514
, para luego reenviarlos a Datadog.
agent ---> haproxy ---> Datadog
El cifrado está desactivado entre el Agent y HAProxy, que se configura para cifrar los datos antes de enviarlos a Datadog.
Configuración del Agent
Edita el archivo de configuración del Agent datadog.yaml
y configura logs_no_ssl
como true
. Esto es necesario, ya que HAProxy no reenvía el tráfico y no es el backend de Datadog, por lo que no puede utilizar el mismo certificado.
Nota: logs_no_ssl
puede estar configurado como verdadero, ya que HAProxy está configurado para encriptar los datos. De lo contrario, no configures este parámetro como true
.
logs_config:
force_use_tcp: true
logs_dd_url: "<PROXY_SERVER_DOMAIN>:10514"
logs_no_ssl: true
Configuración de HAProxy
HAProxy debe instalarse en un host que tenga conectividad con Datadog. Utiliza el siguiente archivo de configuración, si aún no lo tienes configurado.
# 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 Logs (e.g the value of "logs.config.logs_dd_url")
frontend logs_frontend
bind *:10514
mode tcp
option tcplog
default_backend datadog-logs
# 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-logs
balance roundrobin
mode tcp
option tcplog
server datadog agent-intake.logs.datadoghq.com:10516 ssl verify required ca-file /etc/ssl/certs/ca-certificates.crt check port 10516
Nota: Descarga el certificado con el siguiente comando:
sudo apt-get install ca-certificates
(Debian, Ubuntu)yum install ca-certificates
(CentOS, Redhat)
Si todo sale bien, el archivo se ubicará en /etc/ssl/certs/ca-bundle.crt
para CentOS, Redhat.
Una vez que se haya realizado la configuración de HAProxy, puedes volver a cargarlo o reiniciar HAProxy. Se recomienda tener una tarea cron
que vuelva a cargar HAProxy cada 10 minutos (por ejemplo, service haproxy reload
) para forzar una actualización de la caché DNS de HAProxy, en caso de que app.datadoghq.com
conmute a otra IP.
# 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 Logs (e.g the value of "logs.config.logs_dd_url")
frontend logs_frontend
bind *:10514
mode tcp
default_backend datadog-logs
# 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-logs
balance roundrobin
mode tcp
option tcplog
server datadog agent-intake.logs.datadoghq.eu:443 ssl verify required ca-file /etc/ssl/certs/ca-bundle.crt check port 443
Descarga el certificado con el siguiente comando:
sudo apt-get install ca-certificates
(Debian, Ubuntu)yum install ca-certificates
(CentOS, Redhat)
Si todo sale bien, el archivo se ubicará en /etc/ssl/certs/ca-bundle.crt
para CentOS, Redhat.
Una vez que se haya realizado la configuración de HAProxy, puedes volver a cargarlo o reiniciar HAProxy. Se recomienda tener una tarea cron
que vuelve a cargar HAProxy cada 10 minutos (por ejemplo, service haproxy reload
) para forzar una actualización de la caché DNS de HAProxy, en caso de que app.datadoghq.com
conmute a otra IP.
Uso de NGINX como proxy TCP para logs
Configuración del Agent
Edita el archivo de configuración datadog.yaml
del Agent y define logs_config.logs_dd_url
para que utilice el nuevo proxy en vez de establecer una conexión directa con Datadog:
logs_config:
force_use_tcp: true
logs_dd_url: myProxyServer.myDomain:10514
Nota: No cambies el parámetro logs_no_ssl
, ya que NGINX está reenviando el tráfico a Datadog y no descifra ni cifra el tráfico.
Configuración de NGINX
En este ejemplo, nginx.conf
se puede utilizar para representar el tráfico del Agent a Datadog. El último bloque de servidor en esta configuración envuelve TLS para asegurar que los logs internos de texto plano sean encriptados entre tu proxy y el endpoint de la API de admisión de logs de Datadog:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
# TCP Proxy for Datadog Agent
stream {
server {
listen 10514; #listen for logs
proxy_ssl on;
proxy_pass agent-intake.logs.datadoghq.com:10516;
}
}
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
# TCP Proxy for Datadog Agent
stream {
server {
listen 10514; #listen for logs
proxy_ssl on;
proxy_pass agent-intake.logs.datadoghq.eu:443;
}
}