로그에 대한 TCP 프록시로 HAProxy 사용
이 예제에서는 HAProxy가 설치되어 있고, 포트 10514
에서 수신 대기 중인 서버에 TCP로 로그를 전송한 다음 로그를 Datadog으로 전달하도록 Datadog Agent를 구성하는 방법을 설명합니다.
agent ---> haproxy ---> Datadog
Agent와 HAProxy 사이에는 암호화가 비활성화되어 있으며, 데이터를 Datadog으로 전송하기 전에 암호화하도록 구성됩니다.
Agent 설정
datadog.yaml
Agent 설정 파일을 편집하고 logs_no_ssl
를 true
로 설정합니다. 이는 HAProxy가 트래픽을 전달하지 않으며, Datadog 백엔드가 아니므로 동일한 인증서를 사용할 수 없기 때문입니다.
참고: HAProxy가 데이터를 암호화하도록 설정되어 있으므로 logs_no_ssl
가 true로 설정될 수 있습니다. 그렇지 않은 경우 이 파라미터를 true
로 설정하지 마세요.
logs_config:
use_tcp: true
logs_dd_url: "<PROXY_SERVER_DOMAIN>:10514"
logs_no_ssl: true
HAProxy 설정
HAProxy를 Datadog과 연결된 호스트에 설치해야 합니다. 아직 설정하지 않았다면 다음 설정 파일을 사용하세요.
# 기본 설정
global
log 127.0.0.1 local0
maxconn 4096
stats socket /tmp/haproxy
# 몇 가지 정상 기본값
defaults
log global
option dontlognull
retries 3
option redispatch
timeout client 5s
timeout server 5s
timeout connect 5s
# 포트 3833에서 HAProxy 통계에 대한 보기를 선언합니다.
# 이 페이지를 보기 위해 자격 증명이 필요하지 않으며
# 설정이 끝나면 종료할 수 있습니다.
listen stats
bind *:3833
mode http
stats enable
stats uri /
# 이 섹션에서 DNS 레코드를 다시 로드합니다.
# <DNS_SERVER_IP>과<DNS_SECONDARY_SERVER_IP>를 DNS 서버 IP 주소로 교체하세요.
# HAProxy 1.8 이상인 경우
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
# Agents가 로그 전송을 위해 연결되는
# 엔드포인트를 선언합니다. (예: "logs.config.logs_dd_url"의 값)
frontend logs_frontend
bind *:10514
mode tcp
option tcplog
default_backend datadog-logs
# Datadog 서버입니다. 실제로 위에 정의된 포워더 프런트엔드로 들어오는
# 모든 TCP 요청은
# Datadog의 퍼블릭 엔드포인트로 프록시됩니다.
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
참고: 다음 명령을 사용하여 인증서를 다운로드합니다.
sudo apt-get install ca-certificates
(Debian, Ubuntu)yum install ca-certificates
(CentOS, Redhat)
성공적으로 다운로드되었다면, CentOS, Redhat용 /etc/ssl/certs/ca-bundle.crt
에서 찾을 수 있습니다.
HAProxy 설정이 완료되면 다시 로드하거나 HAProxy를 다시 시작할 수 있습니다. app.datadoghq.com
가 다른 IP로 실패할 경우 HAProxy의 DNS 캐시를 강제로 새로 고침하기 위해 10분마다 HAProxy를 다시 로드하는 cron
작업을 수행할 것을 권장합니다(예를 들어, service haproxy reload
).
# 기본 설정
global
log 127.0.0.1 local0
maxconn 4096
stats socket /tmp/haproxy
# 몇 가지 정상 기본값
defaults
log global
option dontlognull
retries 3
option redispatch
timeout client 5s
timeout server 5s
timeout connect 5s
# 포트 3833에서 HAProxy 통계에 대한 보기를 선언합니다.
# 이 페이지를 보기 위해 자격 증명이 필요하지 않으며
# 설정이 끝나면 종료해도 됩니다.
listen stats
bind *:3833
mode http
stats enable
stats uri /
# 이 섹션에서 DNS 레코드를 다시 로드합니다.
# <DNS_SERVER_IP>과 <DNS_SECONDARY_SERVER_IP>를 DNS 서버 IP 주소로 교체하세요.
# HAProxy 1.8 이상인 경우
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
# 로그 전송을 위해 Agents가 연결되는
# 엔드포인트를 선언합니다. (예: "logs.config.logs_dd_url"의 값)
frontend logs_frontend
bind *:10514
mode tcp
default_backend datadog-logs
# Datadog server입니다. 위에 정의된 포워더 프론트엔드로
# 들어오는 모든 TCP 요청은
# Datadog의 퍼블릭 엔드포인트로 프록시됩니다.
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
다음 명령을 사용하여 인증서를 다운로드합니다:
sudo apt-get install ca-certificates
(Debian, Ubuntu)yum install ca-certificates
(CentOS, Redhat)
성공적으로 다운로드되었다면, CentOS, Redhat용 /etc/ssl/certs/ca-bundle.crt
에서 확인할 수 있습니다.
HAProxy 설정이 완료되면 다시 로드하거나 HAProxy를 다시 시작할 수 있습니다. app.datadoghq.eu
가 다른 IP로 실패할 경우 HAProxy의 DNS 캐시를 강제로 새로 고침하기 위해 10분마다 HAProxy를 다시 로드하는 cron
작업을 수행하는 것을 권장합니다(예를 들어, service haproxy reload
).
로그에 대한 TCP 프록시로 NGINX 사용
Agent 설정
datadog.yaml
Agent 설정 파일을 편집하고 logs_config.logs_dd_url
을 설정하여 Datadog과 직접 연결을 설정하는 대신 새로 생성된 프록시를 사용하도록 합니다.
logs_config:
use_tcp: true
logs_dd_url: myProxyServer.myDomain:10514
참고: NGINX는 트래픽을 Datadog에 전달하고 트래픽을 해독하거나 암호화하지 않으므로 logs_no_ssl
파라미터를 변경하지 마세요.
NGINX 설정
이 예제에서는 Agent 트래픽을 Datadog으로 프록시하는 데 nginx.conf
를 사용합니다. 이 설정의 마지막 서버 블록은 TLS 래핑을 수행하여 프록시와 Datadog의 로그 수집 API 엔드포인트 간에 내부 일반 텍스트 로그가 암호화되도록 합니다:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
# Datadog Agent용 TCP 프록시
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;
}
# Datadog Agent에 대한 TCP Proxy
stream {
server {
listen 10514; #로그에 대한 수신
proxy_ssl on;
proxy_pass agent-intake.logs.datadoghq.eu:443;
}
}