さくらのクラウド やってみたシリーズ(19) アクセスログの syslog への送出
今日は引き続きエンハンスドロードバランサーを触っていきます。今日のテーマはアクセスリクエストのログ送出です。
2つのログ送出先:Syslog と モニタリングスイート
アクセスリクエストのログ送出方法には、主に次の 2 つがあります。
1 つ目は自前の syslog サーバへログを転送する方法、2 つ目は モニタリングスイートとの連携機能を利用する方法です。モニタリングスイートは2025年9月にリリースされた新しい機能で、さくらのクラウドのマネージドサービスだけでなく、エージェントを導入した仮想サーバや、同様のエージェントがインストールされたオンプレミス/他クラウド環境からのログも一元的に受信できます。マネージドサービスであれば、コンソール上からワンクリックで連携設定が可能です。

モニタリングスイートは非常に多機能で奥深いサービスであるため、詳細については別途連載ブログで解説していきたいと考えています。
このブログでは従来化の方法である自前のsyslogサーバにログを送出する手順を纏めます。
さっそくやってみる
syslogサーバは自前で準備する必要があるため、まずは適当な仮想サーバを起動します。syslogサーバはエンハンスドロードバランサーからのIP到達性が必要で、UDPでログが送出されてきます。
1. syslog サーバでdockerのセットアップ
この手順ではsyslogをdockerで起動します。
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
docker --version
2. docker / syslog サーバの起動
sudo docker run -d --name syslog \
-p 514:514/udp \
-p 514:514/tcp \
balabit/syslog-ng
以下のコマンドで起動を確認できます。
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a28c9ca98819 balabit/syslog-ng "/usr/local/bin/entr…" 3 minutes ago Up 3 minutes (healthy) 601/tcp, 0.0.0.0:514->514/tcp, 0.0.0.0:514->514/udp, [::]:514->514/tcp, [::]:514->514/udp, 6514/tcp syslog
3. エンハンスドロードバランサーの設定変更
エンハンスドロードバランサーの詳細画面にsyslogサーバのIPアドレスとポートを入力して設定を反映させます。

4. テスト
ブラウザから数度アクセスを行うと以下の様なアクセスログが確認できます。
sudo docker exec -it syslog tail -f /var/log/messages
Nov 30 21:01:27 153.125.175.243 elb-113702692611-113701806335[1879828]: {"resource_id":"113702692611","project_id":"113701806335","mode":"https","client_ip":"219.104.132.56","client_port":5174,"time":"[30/Nov/2025:21:01:27.603]","frontend":"113702692611-153.125.168.194:443~","backend":"113702692611-backend-default","upstream_server":"27.133.155.228:80","upstream_response_time":18,"upstream_connect_time":17,"session_duration":62,"response_time":35,"fix_response_code":"-","status_code":"200","size":829,"termination_state":"--","vhost":"153.125.168.194","user_agent":"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/142.0.0.0 Safari\/537.36","method":"GET","uri":"\/","protocol":"HTTP/1.1","ssl_version":"TLSv1.3","ssl_ciphers":"TLS_AES_128_GCM_SHA256"}
ログは以下の仕様で出力されます。

4. パケットフィルタの適応
今の状態だとsyslogサーバは外部に開放されているためパケットフィルタでログの送出元を制限します。

ロードバランサーのネット枠を送信元としてIP/プロトコル/ポートを以下の様に制限します。

Discussion