どうも、HAProxy 教日本支部東京分科会のかっぱ (@inokara)です。あまりに万能すぎる HAProxy に翻弄される毎日を送っています。
健康チェックしてますか?
HAProxy でバックエンドサーバーのヘルスチェックを行いたい場合には default セクションに以下を追加します。
log global option log-health-checks
あと、rsyslog 経由でログを出力したいので global セクションにログ出力の設定をしておきます。
log 127.0.0.1 local6
上記のように設定します。
その上で /etc/rsyslog.conf に以下を追記します。
local6.* -/var/log/haproxy/haproxy_healthcheck.log;Haproxy
ログファイル名は任意(適当に…)で。
どんなログが出るか…
バックエンドを停止すると…
バックエンドが停止するパターンとして…
- Web サーバー停止
- Web サーバーは生きているけど、ヘルスチェック用にコンテンツへアクセス出来ない(コンテンツ異常)
上記の二つを想定してヘルスチェックのログを見てみました。
尚、ヘルスチェックの設定は下記の通りです。
check fall 2 rise 2 inter 1000
- 2 回のチェックに失敗したら切り離し
- 2 回のチェックに成功したら切り戻し
- チェック間隔は 1000ms
Web サーバー停止
Health check for server backend_server/app01 failed, reason: Layer4 connection problem, info: "Connection refused", check duration: 2ms, status: 1/2 UP. Health check for server backend_server/app01 failed, reason: Layer4 connection problem, info: "Connection refused", check duration: 2ms, status: 1/2 UP. Health check for server backend_server/app01 failed, reason: Layer4 connection problem, info: "Connection refused", check duration: 2ms, status: 0/2 DOWN. Server backend_server/app01 is DOWN. 1 active and 1 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue. Health check for server backend_server/app01 failed, reason: Layer4 connection problem, info: "Connection refused", check duration: 2ms, status: 0/2 DOWN. Server backend_server/app01 is DOWN. 1 active and 1 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
Web サーバー復旧
Health check for server backend_server/app01 succeeded, reason: Layer7 check passed, code: 200, info: "OK", check duration: 4ms, status: 1/2 DOWN. Health check for server backend_server/app01 succeeded, reason: Layer7 check passed, code: 200, info: "OK", check duration: 4ms, status: 1/2 DOWN. Health check for server backend_server/app01 succeeded, reason: Layer7 check passed, code: 200, info: "OK", check duration: 4ms, status: 2/2 UP. Server backend_server/app01 is UP. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue. Health check for server backend_server/app01 succeeded, reason: Layer7 check passed, code: 200, info: "OK", check duration: 4ms, status: 2/2 UP. Server backend_server/app01 is UP. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue.
ヘルスチェックコンテンツ異常
Health check for server backend_server/app01 failed, reason: Layer7 wrong status, code: 403, info: "Forbidden", check duration: 4ms, status: 1/2 UP. Health check for server backend_server/app01 failed, reason: Layer7 wrong status, code: 403, info: "Forbidden", check duration: 5ms, status: 1/2 UP. Health check for server backend_server/app01 failed, reason: Layer7 wrong status, code: 403, info: "Forbidden", check duration: 4ms, status: 0/2 DOWN. Server backend_server/app01 is DOWN. 1 active and 1 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue. Health check for server backend_server/app01 failed, reason: Layer7 wrong status, code: 403, info: "Forbidden", check duration: 4ms, status: 0/2 DOWN. Server backend_server/app01 is DOWN. 1 active and 1 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
コンテンツ復旧
Health check for server backend_server/app01 succeeded, reason: Layer7 check passed, code: 200, info: "OK", check duration: 4ms, status: 1/2 DOWN. Health check for server backend_server/app01 succeeded, reason: Layer7 check passed, code: 200, info: "OK", check duration: 4ms, status: 1/2 DOWN. Health check for server backend_server/app01 succeeded, reason: Layer7 check passed, code: 200, info: "OK", check duration: 4ms, status: 2/2 UP. Server backend_server/app01 is UP. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue. Health check for server backend_server/app01 succeeded, reason: Layer7 check passed, code: 200, info: "OK", check duration: 4ms, status: 2/2 UP. Server backend_server/app01 is UP. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue.
ほうほう。このログを監視してアラート上げたりとか出来そうですな。
とりあえず
出来ればこのログは出力するようにしておきたいものです。
元記事はこちらです。
「HAProxy でバックエンドサーバーのヘルスチェックログを記録する」