Sentry を活用したエラーログ管理と障害検知の強化ガイド

  • sentry
    sentry
  • typescript
    typescript
2025/01/13に公開

はじめに

Web アプリケーションの開発において、エラーログの適切な管理は不可欠です。特に本番環境では、発生したエラーを素早く検知し、迅速に対応することが求められます。

本記事は、Next.js や Express を用いた Web アプリケーションを対象に、Sentry を活用したエラーログ管理・障害検知の強化方法を整理します。

エラーログの重要性

エラーログを適切に整備することで、以下のようなメリットがあります。

  • 障害の早期発見:エラーが発生した際に即座に検知できる。
  • 問題の再現性向上:詳細なログを記録することで、開発者が問題を正確に把握できる。
  • ユーザー影響の最小化:障害対応を迅速に行い、ユーザーへの影響を軽減できる。
  • 開発の効率化:エラーログを活用することで、デバッグにかかる時間を削減できる。

Sentry の概要

Sentry は、アプリケーションのエラーログやパフォーマンスを可視化し、リアルタイムで障害を通知してくれるツールです。以下のような特徴があります。

  • リアルタイムエラートラッキング:エラーが発生すると即座に通知を受け取ることができる。
  • スタックトレースの提供:エラーが発生したコードの行やスタックトレースを確認可能。
  • ユーザーの影響範囲の可視化:どのユーザーにどの程度の影響が出たのかを把握できる。
  • 各種プラットフォーム対応:JavaScript、Node.js、React、Next.js、Express などのさまざまな環境で利用可能。
  • 外部ツールとの連携:Slack、Teams、GitHub、JIRA などと統合可能。

最近では以下のような新機能も追加されています。

  • Session Replay:ユーザー操作画面を再現し、再現性の低いバグの調査を効率化
  • AI Assist:スタックトレースから原因推測や修正候補を提示

Sentry の導入手順

1. Sentry のアカウント作成

まず、Sentryの公式サイト でアカウントを作成し、新しいプロジェクトを設定します。

2. Sentry SDK のインストール

例えば、Next.js アプリケーションに Sentry を導入する場合、以下の手順でセットアップできます。

npm install @sentry/nextjs

3. 設定ファイルへの追加

next.config.js に Sentry の設定を追加します。

const { withSentryConfig } = require('@sentry/nextjs');

const moduleExports = {
  sentry: {
    dsn: process.env.SENTRY_DSN, // Sentry の DSN を環境変数で管理
    tracesSampleRate: 1.0, // パフォーマンスモニタリングのサンプリング率
  },
};

module.exports = withSentryConfig(moduleExports);

4. 初期化処理

pages/_app.jsserver.ts に以下のような初期化処理を追加します。

import * as Sentry from '@sentry/nextjs';

Sentry.init({
  dsn: process.env.SENTRY_DSN,
  tracesSampleRate: 1.0,
});

5. エラーのキャプチャ

手動でエラーをキャプチャする場合

try {
  throw new Error('意図的なエラー');
} catch (error) {
  Sentry.captureException(error);
}

API ハンドラーで利用する例

export default async function handler(req, res) {
  try {
    throw new Error('API エラー');
  } catch (error) {
    Sentry.captureException(error);
    res.status(500).json({ message: '内部エラーが発生しました' });
  }
}

障害検知の強化

Sentry を活用して障害検知を強化するために、以下のポイントを押さえます。

1. 通知設定の最適化

  • Slack との連携

    • Sentry の「Integrations」から Slack を連携し、重要なエラーが即座に通知されるように設定する。
    • 例: @here をつけてチームにすぐに知らせる。
  • GitHub Issues との連携

    • 自動的にバグ報告を GitHub Issue に作成し、開発者がすぐに対応できるようにする。

2. エラーフィルタリングの活用

  • 特定のエラーを無視
    • 例えば、ボットのアクセスによる 404 エラーなどは通知対象から除外する。
Sentry.init({
  beforeSend(event) {
    if (event.exception && event.exception.values[0].type === 'NotFoundError') {
      return null; // 404 エラーは無視
    }
    return event;
  },
});

実運用の工夫:

  • 除外ルールは一度決めて終わりではなく、定期的に見直す
  • 重要度の低いエラーが「実は深刻」な場合もあるので監査を続ける

3. リリース管理とバージョン管理

  • デプロイごとにリリース情報を Sentry に送信し、どのバージョンで問題が発生したのかを可視化。
sentry-cli releases new my-app@1.0.0
sentry-cli releases finalize my-app@1.0.0

4. パフォーマンスモニタリングの導入

  • Sentry ではエラー検知だけでなく、API のレスポンス速度やページロード時間もトラッキング可能。
  • tracesSampleRate の調整により、適切なデータを収集する。
Sentry.init({
  dsn: process.env.SENTRY_DSN,
  tracesSampleRate: 0.2, // サンプリング率 20%
});

実運用の工夫:

  • いきなり 1.0 にするとコストが跳ね上がるため、0.1〜0.2 から始めるのが無難
  • 本番とステージングで DSN を分け、不要なデータが混ざらないようにする

まとめ

エラーログを適切に整備し、Sentry を活用することで、障害検知の精度を向上させることができます。

  • Sentry の導入により、リアルタイムでエラーを検知・通知できる。
  • 通知設定の最適化やフィルタリングを行い、ノイズを減らす。
  • パフォーマンスモニタリングも活用し、ユーザー体験の向上に寄与する。

導入して数週間で「ユーザーからの問い合わせで初めて気づく」状況は解消され、エラー検知の主体が人から仕組みに移行しました。結果として、開発チームは安心して新機能開発に集中できるようになります。

本記事を参考に、Sentry を活用した強固なエラーログ管理を実現してください。

Xでシェア
Facebookでシェア
LinkedInでシェア

記事に関するお問い合わせ📝

記事の内容に関するご質問、ご意見などは、下記よりお気軽にお問い合わせください。
ご質問フォームへ

技術支援などお仕事に関するお問い合わせ📄

技術支援やお仕事のご依頼に関するお問い合わせは、下記よりお気軽にお問い合わせください。
お問い合わせフォームへ

関連する技術ブログ