# PM2 のエラーを Slack に通知

PM2 は Node.js アプリケーションのプロセス管理ツールとして広く利用されています。本番環境でアプリケーションがクラッシュしたり、エラーが発生した際に、即座に Slack に通知することで、迅速な対応が可能になります。

# この記事の対象読者

  • PM2 で Node.js アプリケーションを管理している方
  • 本番環境のエラーをリアルタイムで監視したい方
  • Slack に通知を送信する仕組みを構築したい方
  • サーバーの異常を早期に検知したい方

# 前提条件

実装を開始する前に、以下の条件を確認してください:

  • PM2: PM2 がインストールされていること
  • Node.js: Node.js がインストールされていること
  • Slack ワークスペース: Slack のワークスペースにアクセスできること
  • Webhook URL: Slack の Incoming Webhook URL を取得できること

確認方法

# PM2の確認
pm2 -v

# Node.jsの確認
node -v
npm -v

# PM2 とは

PM2(Process Manager 2)は、Node.js アプリケーションのプロセス管理ツールです。アプリケーションの自動再起動、ログ管理、クラスターモード、モニタリングなどの機能を提供します。

# PM2 の主な機能

  • 自動再起動: アプリケーションがクラッシュした際に自動的に再起動
  • ログ管理: 標準出力とエラー出力を自動的にログファイルに保存
  • クラスターモード: 複数のインスタンスを起動して負荷分散
  • モニタリング: CPU、メモリ使用率などのリソース監視
  • イベントシステム: プロセスの起動、停止、再起動などのイベントを監視

# Slack Webhook URL の取得

まず、Slack に通知を送信するための Webhook URL を取得します。

# 1. Slack App の作成

  1. Slack API (opens new window)にアクセス
  2. 「Your Apps」をクリック
  3. 「Create New App」をクリック
  4. 「From scratch」を選択
  5. App 名とワークスペースを選択して作成

# 2. Incoming Webhooks の有効化

  1. 作成した App の設定画面で「Incoming Webhooks」を選択
  2. 「Activate Incoming Webhooks」を ON にする
  3. 「Add New Webhook to Workspace」をクリック
  4. 通知を送信したいチャンネルを選択
  5. 「Allow」をクリックして Webhook URL をコピー

# 3. Webhook URL の形式

取得した Webhook URL は以下のような形式です:

https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

この URL は機密情報なので、環境変数として管理することを推奨します。

# 実装方法

PM2 のエラーを Slack に通知する最も簡単な方法は、PM2 モジュールシステムを使用することです。PM2 には専用のpm2-slackモジュールがあり、pm2 setコマンドで簡単に設定できます。

# pm2-slack モジュールのインストールと設定

# 1. モジュールのインストール

PM2 モジュールとしてpm2-slackをインストールします:

pm2 install pm2-slack

インストールが成功すると、以下のようなメッセージが表示されます:

[PM2] Module pm2-slack installed
[PM2] Module pm2-slack configured

# 2. Slack Webhook URL の設定

pm2 setコマンドを使って、Slack Webhook URL を設定します:

pm2 set pm2-slack:slack_url https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

これだけで設定は完了です。PM2 が自動的に設定を反映します。

# 3. オプション設定(任意)

必要に応じて、以下のオプションも設定できます:

# チャンネル名を設定(デフォルトはWebhookで設定したチャンネル)
pm2 set pm2-slack:channel "#alerts"

# ユーザー名を設定(デフォルトは"PM2")
pm2 set pm2-slack:username "PM2 Monitor"

# アイコン絵文字を設定(デフォルトは":rocket:")
pm2 set pm2-slack:icon_emoji ":warning:"

# 4. 設定の確認

設定が正しく反映されているか確認します:

# インストール済みモジュールの一覧
pm2 module:list

# 現在の設定を確認
pm2 conf pm2-slack

# 通知されるイベント

pm2-slackモジュールは以下の PM2 イベントを自動的に Slack に通知します:

  • プロセス起動 (online): アプリケーションが起動した時
  • プロセス停止 (stop): アプリケーションが停止した時
  • プロセス再起動 (restart): アプリケーションが再起動した時
  • プロセス異常終了 (exit): アプリケーションがクラッシュした時
  • エラーログ (log:err): エラーログが出力された時

# 動作確認

設定が完了したら、動作確認を行います:

# テスト用のアプリケーションを起動
pm2 start app.js --name test-app

# アプリケーションを停止(通知が送信される)
pm2 stop test-app

# アプリケーションを再起動(通知が送信される)
pm2 restart test-app

Slack の指定したチャンネルに通知が届いているか確認します。

# ログの確認

モジュールが正常に動作しているか確認する場合:

# pm2-slackモジュールのログを確認
pm2 logs pm2-slack

# 設定の変更

設定を変更したい場合は、再度pm2 setコマンドを実行します:

# Webhook URLを変更
pm2 set pm2-slack:slack_url https://hooks.slack.com/services/NEW_WEBHOOK_URL

# チャンネルを変更
pm2 set pm2-slack:channel "#new-channel"

設定は即座に反映されます。

# PM2 の起動時に自動起動

システム起動時に PM2 を自動起動するように設定します:

# PM2の起動スクリプトを生成
pm2 startup

# 現在のプロセスリストを保存(モジュールも含まれる)
pm2 save

これにより、システム再起動後もpm2-slackモジュールが自動的に起動し、設定も保持されます。

# トラブルシューティング

# 問題: Slack 通知が送信されない

原因: Webhook URL が正しく設定されていない、モジュールが起動していないなど

解決方法:

# 設定の確認
pm2 conf pm2-slack

# モジュールの状態確認
pm2 module:list

# pm2-slackモジュールのログを確認
pm2 logs pm2-slack

# モジュールの再起動
pm2 module:restart pm2-slack

# 設定を再設定
pm2 set pm2-slack:slack_url https://hooks.slack.com/services/YOUR_WEBHOOK_URL

# 問題: モジュールがインストールされない

原因: ネットワークエラー、権限不足など

解決方法:

# PM2のバージョン確認
pm2 -v

# モジュールの再インストール
pm2 module:uninstall pm2-slack
pm2 install pm2-slack

# ネットワーク接続の確認
ping registry.npmjs.org

# 問題: 設定が反映されない

原因: 設定コマンドの実行が失敗している、モジュールが再起動されていない

解決方法:

# 現在の設定を確認
pm2 conf pm2-slack

# 設定を再設定
pm2 set pm2-slack:slack_url https://hooks.slack.com/services/YOUR_WEBHOOK_URL

# モジュールの再起動
pm2 module:restart pm2-slack

# 問題: 通知が頻繁に送信される

原因: エラーが連続して発生している

解決方法: pm2-slackモジュールにはレート制限機能がないため、Slack 側でレート制限を設定するか、カスタムモジュールを作成する必要があります。

Slack App の設定でレート制限を設定するか、通知をフィルタリングするカスタムスクリプトを作成します。

# 問題: モジュールが自動起動しない

原因: pm2 saveが実行されていない

解決方法:

# 現在の状態を保存
pm2 save

# 保存された状態を確認
pm2 resurrect --dry-run

# システム起動時に自動起動する設定
pm2 startup

# 問題: 特定のイベントのみ通知したい

原因: pm2-slackは全てのイベントを通知する

解決方法: カスタムモジュールを作成するか、通知をフィルタリングするスクリプトを作成します。

# モジュールの管理

# モジュールのアンインストール

pm2-slackモジュールを削除する場合:

pm2 module:uninstall pm2-slack

# モジュールの更新

pm2-slackモジュールを最新版に更新する場合:

pm2 module:update pm2-slack

# モジュールの無効化

一時的にモジュールを無効化する場合:

pm2 module:stop pm2-slack

再度有効化する場合:

pm2 module:start pm2-slack

# セキュリティの考慮事項

# Webhook URL の保護

  • Webhook URL は機密情報として扱う
  • 環境変数やシークレット管理サービスで管理
  • バージョン管理システムにコミットしない
  • .envファイルを.gitignoreに追加

# 通知の制限

  • 本番環境と開発環境で異なるチャンネルを使用
  • 重要なイベントのみ通知するようにフィルタリング(カスタム実装が必要)
  • Slack 側でレート制限を設定

# まとめ

PM2 のエラーを Slack に通知することで、本番環境の異常を即座に検知し、迅速な対応が可能になります。

# 主なポイント

  • pm2-slackモジュールを使用して簡単に実装
  • pm2 setコマンドで設定可能で、コード不要
  • ✅ エラー、再起動、異常終了などの重要なイベントを自動監視
  • ✅ PM2 モジュールシステムで統合管理
  • ✅ システム再起動後も自動的に動作

# 次のステップ

  • メトリクス監視ツール(Prometheus、Grafana など)との統合
  • カスタムアラート条件の設定(カスタムモジュール作成)
  • 複数の通知チャンネルへの通知(環境ごとに設定)
  • 通知履歴の記録と分析

# 参考リンク

2026-01-05

同じタグを持つ記事をピックアップしました。