アプリケーションの運用において、パフォーマンスやエラーを監視し、迅速に対応することは安定稼働に欠かせません。本記事では、ラフールが実際にNew Relicを利用してプロダクトをどのように監視しているかについて解説します。
以下のポイントを中心に、New Relicを活用した監視体制を紹介します:
1. Dashboardでの負荷監視
New Relicのダッシュボードを利用することで、リアルタイムのシステム負荷を視覚化できます。
1.1 監視対象
-
リソース使用率
アプリケーションサーバーのCPU、メモリ、ディスクなどの使用状況を監視します -
リクエスト数
リクエスト数の監視は、負荷監視の一環としてリソースコストの管理に役立ちます -
実行プロセス
サーバー上で実行中のプロセス詳細を把握し、リソース枯渇時の原因を特定し、対策を立てることができます
1.2 活用例
- リソース不足の検知: 使用率が閾値を超えるタイミングで開発チームに通知し、迅速な対応につなげます
- リソース調整: 負荷に応じたリソース利用状況は、調整時の根拠となります
2. アラート通知
New Relicは、異常検知時にアラートを発生させる機能を提供しています。Slack通知やサービス死活監視の設定を追加することで、迅速な対応が可能です。
2.1 サーバーリソース枯竭
-
アラート条件を設定
- CPU使用率、メモリ使用量、ディスク容量に対して、それぞれ閾値を設定します。
-
通知設定
- Slackやメールでアラートを送信するようWebhookを設定します
- New Relic Alert設定ガイド: 公式ドキュメント
2.2 Step MonitorやPingによる死活監視
-
Step Monitorを利用して定期的にアプリにログインし、サービスの正常稼働を確認します。
- 例: サインインページにログインし、HTTP 200を返すかチェック。
- 利用ツール: New Relic Synthetic Monitoring
2.3 サーバーエラーリアルタイム通知
アプリケーションでエラーが発生した際に、New RelicのError Notifications機能を活用して、リアルタイムでSlackに通知する仕組みを構築します。
これにより、エラーの検知から対応までのスピードを向上させ、チームの効率的な運用を実現できます。
2.4 ポリシーによる通知管理
Alert Policiesごとに連携するSlackチャンネルを分けることで、問題元の感知やアラートレベルを管理しやすくなります。
3. APMによるパフォーマンス改善及びエラー分析
New RelicのAPM (Application Performance Monitoring) を活用することで、アプリケーションのボトルネックを特定し改善が可能です。
3.1 トランザクション監視
- Transactionsタブで、エンドポイントごとのレスポンスタイムやトラフィック量を確認します
- 遅いエンドポイントの特定: 処理が遅いAPIやコントローラーを改善します
3.2 データベース全体調査
- Slow Queries: 遅いSQLクエリを一覧で確認可能
- N+1問題の発見: クエリ数の異常増加を検知し、ActiveRecordで対策していきます。(それ以外、Bullet Gemなどを利用して検出を行い、改善しています)
3.3 Errors inbox
- Error Analytics: エラークラス、エラーメッセージ、発生箇所のコントローラーやメソッド名など、詳細な分析が可能です
- Group errors: エラーメッセージ、エラークラス、UI名など、最大5つの属性を任意に選んでグループ化できる機能です。さらに、ログのカスタマイズによって追加された独自の属性も活用できるため、エラーの根本原因や影響範囲を迅速に特定し、効果的な対応が可能となります
4. ログのカスタマイズ
ログの出力内容をカスタマイズすることで、問題発生時の原因特定が迅速化します。
4.1 必要な情報をログに追加
-
company_id
: 企業単位で問題を追跡します。 -
user_id
: ユーザーごとのエラートラブルを解析します。 -
uuid
: リクエストを追跡します。
4.2 実装例
::NewRelic::Agent.add_custom_attributes({
user_id: user_id,
company_id: @company&.id,
uuid: request.uuid,
})
4.3 活用例
-
影響範囲の特定
「このエラーがどの程度の企業やユーザーに影響しているか」を評価します。 -
ユーザー動作の追跡
特定ユーザーのアクセス解析ができ、問い合わせ対応に役立ちます。
まとめ
New Relicを活用することで、以下のような包括的なアプリケーション監視が可能になります。
- ダッシュボードでの負荷監視とアラート通知
- パフォーマンスボトルネックの特定と改善
- ログ管理のカスタマイズによる迅速な問題解決
これらを統合することで、システムの安定性を大幅に向上させることができます。ぜひプロジェクトで取り入れてみてください!