TaskLinkの本番環境では、AWS CloudWatch Agent、CloudWatch Logs、Amazon SNSを利用し、サーバー監視・ログ管理・障害通知を実装しています。
システム構成
EC2 (Rails / Puma / PostgreSQL)
↓
CloudWatch Agent
↓
┌───────────────┬────────────────┐
↓ ↓
CloudWatch Metrics CloudWatch Logs
↓ ↓
CloudWatch Alarm Metric Filter
↓ ↓
Amazon SNS Custom Metric
↓ ↓
Email Notification CloudWatch Alarm
↓
Amazon SNS
↓
Email Notification
監視目的
- ディスク容量不足による障害の予防
- メモリ不足によるアプリケーション停止の予防
- CPU高負荷によるレスポンス低下の早期検知
- 本番環境のログ収集と障害調査の迅速化
- 不正アクセスや異常リクエストの検知
- アプリケーションエラーの早期発見
CloudWatch Metrics監視
監視アラーム
| アラーム名 | 監視内容 | 閾値 |
|---|---|---|
| tasklink-disk-usage-80 | ディスク使用率 | 80% |
| tasklink-memory-usage-80 | メモリ使用率 | 80% |
| tasklink-cpu-usage-90 | CPU使用率 | 90% |
収集メトリクス
| メトリクス | 用途 |
|---|---|
| disk_used_percent | ディスク使用率監視 |
| mem_used_percent | メモリ使用率監視 |
| cpu_usage_idle | CPU使用率監視 |
CloudWatch Alarm発生時はAmazon SNSを経由してメール通知を送信し、異常をリアルタイムで検知できる構成としています。
CloudWatch Logs
Rails本番環境ではSTDOUTへ出力されたログをsystemd経由でsyslogへ集約し、CloudWatch Logsへ転送しています。
ログ収集フロー
Rails / Puma
↓
systemd journal
↓
/var/log/syslog
↓
CloudWatch Agent
↓
CloudWatch Logs
ロググループ
/tasklink/syslog
収集対象
- Railsアクセスログ
- Railsエラーログ
- Puma起動ログ
- systemdログ
Rails 500エラー監視
CloudWatch LogsのMetric Filterを利用し、Railsアプリケーションで発生したHTTP 500エラーを監視しています。
監視構成
CloudWatch Logs
↓
Metric Filter (Completed 500)
↓
Custom Metric (rails_500_errors)
↓
CloudWatch Alarm
↓
Amazon SNS
↓
Email Notification
アラーム
| アラーム名 | 条件 |
|---|---|
| tasklink-rails-500-errors-alarm | HTTP 500エラー発生時 |
導入目的
- 本番障害の早期検知
- エラー発生時の即時通知
- MTTR(平均復旧時間)の短縮
CloudWatch Dashboard
CloudWatch Dashboardを作成し、サーバーおよびアプリケーションの監視状況を一画面で可視化しています。
可視化項目
- Disk Usage (%)
- Memory Usage (%)
- CPU Idle (%)
- Rails 500 Errors
ダッシュボード活用
障害発生時にはCloudWatch Dashboardを確認することで、以下を迅速に実施できます。
- サーバーリソース状況の把握
- エラー発生状況の確認
- 異常発生箇所の切り分け
Pumaプロセス監視
CloudWatch Agentのprocstat機能を利用し、Pumaプロセスの死活監視を実施しています。
監視項目
| 項目 | 内容 |
|---|---|
| メトリクス | procstat_lookup_pid_count |
| アラーム名 | tasklink-puma-down |
| 通知条件 | pid_count < 1 |
導入目的
- Puma停止の即時検知
- 502 Bad Gatewayの早期発見
- サービス停止時間の最小化
運用上の工夫
運用中に発生したディスク容量不足の障害をきっかけに監視体制を整備しました。
CloudWatch Metricsによるリソース監視とCloudWatch Logsによるログ管理を組み合わせることで、
- 障害の早期発見
- 原因調査の迅速化
- サーバー状態の可視化
を実現しています。
また、ログをCloudWatch Logsへ集約することで、EC2へSSH接続せずにAWSコンソール上からログ確認が可能な構成としています。
今後の改善予定
- 障害対応手順(Runbook)の整備
- アプリケーション監視の強化
- CloudWatch Logs Insightsを利用したログ分析
- 監視ダッシュボードの運用改善