Skip to content

fix(healthz): log level を error に変更し rescue 範囲の WHY コメントを追加#28

Merged
en-Barry merged 1 commit into
developfrom
feature/2605/en-Barry/healthz-log-level
May 13, 2026
Merged

fix(healthz): log level を error に変更し rescue 範囲の WHY コメントを追加#28
en-Barry merged 1 commit into
developfrom
feature/2605/en-Barry/healthz-log-level

Conversation

@en-Barry
Copy link
Copy Markdown
Owner

@en-Barry en-Barry commented May 13, 2026

Summary

HealthzController の修正。シコードレビュー (M1) の議論結果を反映:

  1. log level を warnerror に変更: 503 を返すヘルスチェック失敗は「人間の調査が必要」な事象 (RDS フェイルオーバー / コネクションプール枯渇 / SG 変更 等)。CloudWatch のアラート設計で error レベルを拾うのが運用上の慣例。
  2. rescue StandardError の意図を WHY コメントで明示: Healthz は「アプリ全体の健全性」を 200/503 で表現する場所。普通のコントローラと違い、想定外例外 (NoMethodError 等の実装バグ) も 503 として ALB に伝えることが正しい。この意図がコードからは読み取れないため、WHY を残す。
  3. メッセージ文言を整合: "Healthz DB check failed" → "Healthz check failed" (DB に限らない捕捉のため)。

議論経緯

レビュー初稿では rescue 範囲を ActiveRecord::ActiveRecordError, PG::Error に絞ることも提案したが、議論の結果、Healthz の特殊性 (失敗の種類を区別する場所ではなく、失敗を 503 に変換する場所) を考慮して StandardError 全捕捉が正解 と再評価。log level の指摘のみ採用。

Test plan

  • bundle exec rspec spec/requests/healthz_spec.rb: 3 examples, 0 failures
  • bundle exec rubocop: no offenses
  • 既存テスト (Rails.logger.warn 期待) を error 期待に追随

関連

  • アラート設計時のメモ: ALB ヘルスチェックは healthy_threshold / unhealthy_threshold を複数回失敗で初めて発火するため、error レベル単発でアラート疲労になることはない (CloudWatch Alarm 側で N 分間 M 回のしきい値設定で吸収可能)

🤖 Generated with Claude Code

503 を返すヘルスチェック失敗は「人間の調査が必要」な事象であり、
warn ではなく error レベルで出すのが運用上の慣例 (CloudWatch アラート設計の根拠)。

rescue StandardError は意図的に広く捕捉している:
- Healthz は「アプリ全体の健全性」を 200/503 で表現するエンドポイント
- 想定外例外 (NoMethodError 等の実装バグ) も 503 で ALB から退避すべき
- この意図が普通のコントローラの常識と異なるため WHY コメントで明示

ログメッセージを "Healthz DB check failed" → "Healthz check failed" に変更:
- DB に限らない捕捉になっているため、文言を整合させる
- 関連テストも追随

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@en-Barry en-Barry merged commit 00715a3 into develop May 13, 2026
@en-Barry en-Barry deleted the feature/2605/en-Barry/healthz-log-level branch May 13, 2026 00:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant