Utiliser HAProxy en tant que proxy TCP pour les logs
Cet exemple vous explique comment configurer l’Agent Datadog afin d’envoyer des logs à un serveur via le protocole TCP. Pour ce faire, vous devez installer HAProxy et effectuer une écoute sur le port 10514, puis transmettre les logs à Datadog.
agent ---> haproxy ---> Datadog
Le chiffrement est désactivé entre l’Agent et HAProxy. Ce service est ensuite configuré de façon à chiffrer les données avant qu’elles ne soient envoyées à Datadog.
Configuration de l’Agent
Modifiez le fichier de configuration de l’Agent datadog.yaml et définissez logs_no_ssl sur true. Cette opération est requise. En effet, HAProxy ne transmet pas le trafic et ne fait pas partie du backend Datadog. Vous ne pouvez donc pas utiliser le même certificat.
Remarque : logs_no_ssl peut être défini sur true, car HAProxy est configuré de façon à chiffrer les données. Ne définissez pas ce paramètre sur true si ce n’est pas le cas.
logs_config:
force_use_tcp: true
logs_dd_url: "<PROXY_SERVER_DOMAIN>:10514"
logs_no_ssl: true
Configuration de HAProxy
HAProxy doit être installé sur un host connecté à Datadog. Utilisez le fichier de configuration suivant si vous ne l’avez pas déjà configuré.
# 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
Remarque : téléchargez le certificat avec la commande suivante :
sudo apt-get install ca-certificates (Debian, Ubuntu)yum install ca-certificates (CentOS, Redhat)
Si le téléchargement fonctionne, le fichier est stocké à l’emplacement suivant pour CentOS et Redhat : /etc/ssl/certs/ca-bundle.crt.
Une fois la configuration de HAProxy effectuée, vous pouvez recharger ou redémarrer le service. Nous vous conseillons de configurer une tâche cron qui recharge HAProxy toutes les 10 minutes (par exemple avec la commande service haproxy reload) pour forcer l’actualisation du cache DNS de HAProxy si app.datadoghq.com bascule vers une autre 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
Téléchargez le certificat à l’aide de la commande suivante :
sudo apt-get install ca-certificates (Debian, Ubuntu)yum install ca-certificates (CentOS, Redhat)
Si le téléchargement fonctionne, le fichier est stocké à l’emplacement suivant pour CentOS et Redhat : /etc/ssl/certs/ca-bundle.crt.
Une fois la configuration de HAProxy effectuée, vous pouvez recharger ou redémarrer le service. Nous vous conseillons de configurer une tâche cron qui recharge HAProxy toutes les 10 minutes (par exemple avec la commande service haproxy reload) pour forcer l’actualisation du cache DNS de HAProxy si app.datadoghq.eu bascule vers une autre IP.
Utiliser NGINX en tant que proxy TCP pour les logs
Configuration de l’Agent
Modifiez le fichier de configuration de l’Agent datadog.yaml et définissez logs_config.logs_dd_url de façon à utiliser le nouveau proxy, au lieu d’établir une connexion directe avec Datadog :
logs_config:
force_use_tcp: true
logs_dd_url: myProxyServer.myDomain:10514
Remarque : ne modifiez pas le paramètre logs_no_ssl. En effet, NGINX transmet le trafic à Datadog sans le chiffrer ni le déchiffrer.
Configuration de NGINX
Dans cet exemple, le fichier nginx.conf peut être utilisé pour transmettre le trafic à Datadog en passant par un proxy. Avec cette configuration, le dernier bloc du serveur incorpore le protocole TLS pour garantir le chiffrement des logs internes en texte brut entre votre proxy et l’endpoint de l’API Datadog vers lequel les logs sont envoyés :
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
# Proxy TCP pour l'Agent Datadog
stream {
server {
listen 10514; #écoute des 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;
}
# Proxy TCP pour l'Agent Datadog
stream {
server {
listen 10514; #écoute des logs
proxy_ssl on;
proxy_pass agent-intake.logs.datadoghq.eu:443;
}
}