ログの 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:
  force_use_tcp: true
  logs_dd_url: "<PROXY_SERVER_DOMAIN>:10514"
  logs_no_ssl: true
HAProxy 構成
Datadog への接続があるホストに HAProxy をインストールする必要があります。次の構成ファイルを使用します (まだ構成していない場合)。
# 基本的なコンフィギュレーション
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
# これは、ログを送信するために Agent が接続するエンドポイントを
# 宣言します (例: "logs.config.logs_dd_url" の値)
frontend logs_frontend
    bind *:10514
    mode tcp
    option tcplog
    default_backend datadog-logs
# これは Datadog サーバーです。実際、上記で定義された
# Forwarderのフロントエンドに着信する 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 にフェールオーバーした場合のために、cron ジョブで 10 分ごとに HAProxy を再読み込みすることで (例: service haproxy reload)、HAProxy の DNS キャッシュを強制的に更新することをお勧めします。
# 基本的なコンフィギュレーション
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
# これは、ログを送信するために Agent が接続するエンドポイントを
# 宣言します (例: "logs.config.logs_dd_url" の値)
frontend logs_frontend
    bind *:10514
    mode tcp
    default_backend datadog-logs
# これは Datadog サーバーです。実際、上記で定義された
# フォワーダーのフロントエンドに着信する 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 にフェールオーバーした場合のために、cron ジョブで 10 分ごとに HAProxy を再読み込みすることで (例: service haproxy reload)、HAProxy の DNS キャッシュを強制的に更新することをお勧めします。
ログの TCP プロキシとしての NGINX の使用
Agent の構成
datadog.yaml Agent コンフィギュレーションファイルを編集し、Datadog と直接接続を確立する代わりに新しく作成されたプロキシを使用するように logs_config.logs_dd_url を設定します。
logs_config:
  force_use_tcp: true
  logs_dd_url: myProxyServer.myDomain:10514
注: NGINX はトラフィックを Datadog に転送しており、トラフィックの解読または暗号化は行わないため、logs_no_ssl パラメーターを変更しないでください。
NGINX コンフィギュレーション
この例では、nginx.conf を使用して、Agent のトラフィックを Datadog にプロキシ転送できます。このコンフィギュレーションにおける最後のサーバーブロックで 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 プロキシ
stream {
    server {
        listen 10514; #listen for logs
        proxy_ssl on;
        proxy_pass agent-intake.logs.datadoghq.eu:443;
    }
}