# 8. ログ

> syslogとの連携、起動時と実行中のログ、ログのトラブルシューティング

---

LLMSインデックス: [llms.txt](/ja/llms.txt)

---

<!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. -->

HAProxyはファイルシステムにアクセスしないため、ログの記録には常にsyslogサーバーを使用します。通常はUDPでログサーバーに送信します。デフォルトのポートは514です。ローカルのsyslogデーモンが動作する127.0.0.1を指定することが多いものの、ネットワーク経由で中央サーバーにログを集約する使い方もあります。特にアクティブ/アクティブ構成でログを到着順に統合したい場合、中央サーバーに集約する利点があります。UNIXソケットでローカルのsyslogデーモンに送信することもできますが、まったく推奨しません。haproxyの実行中にsyslogサーバーが再起動するとソケットが置き換えられ、以後のログが失われるためです。HAProxyはchroot jail内に隔離されているので、新しいソケットに再接続できません。また、UNIXソケットのログバッファは非常に小さく、ごく軽い負荷でもメッセージが失われる事例が運用現場で確認されています。ただし、テスト用途なら使える場合があります。

HAProxyのログをファシリティ"local0"でローカルデーモンに送るには、「global」セクションに次のディレクティブを追加することを推奨します。

```text
log 127.0.0.1:514 local0
```

続いて、各"defaults"セクション、または各フロントエンドとバックエンドのセクションに、次のディレクティブを追加します。

```text
log global
```

これにより、globalセクションで定義したログサーバーにすべてのログが集約されます。

デフォルトではUDPトラフィックを受け付けないsyslogデーモンもあります。有効にする設定方法は、使用するデーモンによって異なります。

- sysklogdでは、デーモンのコマンドラインに引数「-r」を渡し、UDPソケットでリモートのログを受け付ける必要があります。アドレスを127.0.0.1に制限する方法はないため、リモートシステムからのログも受信することに注意してください。

- rsyslogdでは、設定ファイルに次の行を追加する必要があります。

```shell
$ModLoad imudp
$UDPServerAddress *
$UDPServerRun 514
```

- syslog-ngでは、次のように新しいソースを作成できます。その後、いずれかの「log」ディレクティブに有効なソースとして追加する必要があります。

```text
source s_udp {
  udp(ip(127.0.0.1) port(514));
};
```

詳細は、使用するsyslogデーモンのマニュアルを参照してください。システムのログファイルにログが出ない場合は、次の確認を検討してください。

- haproxyを再起動します。各フロントエンドとバックエンドが、起動を示すログを一行出力します。それを受信できれば、ログの送信は機能しています。

- 「strace -tt -s100 -etrace=sendmsg -p \<haproxy's pid\>」を実行し、ログが出るはずの操作を行います。sendmsg()でログメッセージを送信する様子が確認できるはずです。表示されない場合は、straceの下でhaproxyを再起動します。それでもログが出なければ、設定に問題があることが確実です。

- tcpdumpでポート514を監視します。ローカルに送信している場合は、たとえば「tcpdump -As0 -ni lo port 514」でループバックインターフェースを監視します。パケットを確認できれば送信されている証拠なので、syslogdデーモンの問題を調べる必要があります。

トラフィックログは接続を受け付けるフロントエンドから送信しますが、バックエンドも、ヘルスチェックに伴うサーバーの状態変化を報告するためにログを送信できる必要があります。ログ設定の全項目については、HAProxyの設定マニュアルを参照してください。

他のデーモンが使っていないファシリティを選ぶと便利です。HAProxyの設定例では、トラフィックログに「local0」、管理ログに「local1」をよく勧めています。他のデーモンがこれらを使う例を運用現場では見かけないためです。ファシリティは一つでも十分です。ログを分けると分析しやすくなります。ただし、ログには機密情報が含まれることもあるため、権限のない人に誤って渡される可能性のある他のログと混ぜてはいけません。

サーバーの処理能力への影響を抑えながら運用現場で問題を調べるには、HAProxyに付属する「halog」ユーティリティを推奨します。grepに似たツールで、HAProxyのログファイルを高速に処理でき、一般に毎秒1～2GBのログを処理します。特定のログの抽出（HTTPステータスコードのクラス、接続終了状態、応答時間の範囲、エラーなどによる検索）、行数の集計、出力行数の制限が可能です。さらに、応答時間やエラー数でサーバーを並べ替える、時間や件数でURLを並べ替える、アクセス数でクライアントアドレスを並べ替えるといった高度な統計処理もできます。サイトを巡回し続けるボットなどの異常をすばやく見つけ、ブロックするのに便利です。
