当サイトではアフィリエイト広告を利用しています。

【Linux】CPU・メモリ使用率をDiscordに自動通知する方法!【初心者向け・コピペ解決】

Linuxサーバーを運用していると、負荷の高騰やリソースの枯渇に気づくのが遅れがち…。
そんなときに便利なのが、「Discord通知によるリソース監視の自動化」です!

この記事では、
✅ 毎分リソース使用率をCSVに保存
✅ 閾値を超えたらリアルタイム通知
という一連の仕組みをすべてコピペ出来る形で紹介します!

初心者でも安心して導入できるように、1ステップずつわかりやすく解説していきます。

Linuxサーバーのリソース使用率を監視したい

CPUやメモリの使用率をCSVに記録する理由

サーバーのCPUやメモリがどれだけ使われているかを定期的に記録しておくことで、
急激な負荷増加やメモリ不足などの問題にすぐ気づけます。

Discordで自動通知するメリットとは?

メールよりも速く・手軽に受け取れるのが特徴です。
スマホでもすぐに通知を受け取れるので、外出先でもサーバーの状態を把握できます。
Discordであれば用意されたWebhookというAPIに乗せるだけでめちゃくちゃ簡単にスマホへの通知が可能です!

以前は、LINE Notifyという通知サービスでLINEにメッセージを送るAPIがあったのですが、サービス終了してしまいました。。。

DiscordのWebhookはこれと同じレベルで簡単に導入出来ます!

DiscordのWebhookを取得しよう【無料&簡単】

Webhookとは?

外部サービスからの通知を、チャットツール(Discordなど)に送るためのURLです。
これを使えば、シェルスクリプトから簡単に通知が飛ばせます。

DiscordでWebhookを発行する手順

まずは、Discordアカウントを作成して、サーバ作成しておきます。
「サーバを追加」をクリックします。

「オリジナルの作成」を選択します

「自分と友達のため」を選択します。

サーバ名を決めて「新規作成」を押下すればサーバ作成は完了です!

一応、通知用のチャンネルを作成してプライベートチャンネルに設定しておきます。

Discordで通知用に作成したのチャンネルの設定を開きます。

「連携サービス」→「ウェブフックを作成」を押下します。

Webhookの名前と送信先チャンネルを指定して「保存」します。

表示されているWebhook URLをコピーして、控えておきます。

Webhookが実際に使えるのかを確認する方法

Webhookに慣れるという意味でも、試しに打ってみましょう。

curlコマンドでインターネットへのアクセスが使えればWindowsのコマンドプロンプトでも何でも大丈夫ですが、せっかくなのでLinux環境で実行してみましょう。

$curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"試し打ち_はやな\n2行目\"}" "WEBHOOKのURL"

コマンド解説

🔹 Discordに通知を送るcurlコマンド

curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"試し打ち_はやな\n2行目\"}" "WEBHOOKのURL"

📌 何をしているの?

このコマンドは、DiscordのWebhook URLを使って、メッセージを自動で送るためのものです。具体的には、以下のような処理を行っています。

🔍 コマンドの分解解説

パーツ 意味・解説
curl HTTP通信を行うためのコマンド。ここでは、Webhook(URL)にデータを送信。
-H "Content-Type: application/json" 「送るデータはJSON形式ですよ」と伝えるヘッダー情報。
-X POST HTTPの「POST」メソッドを使う指定。サーバーにデータを送信する時に使う。
-d '{...}' 送信するデータ本体。{"content": "試し打ち_はやな\n2行目"}のように、通知したい文章をcontentキーで指定。
WEBHOOKのURL Discordから控えたWebhookのURLをここに入れる。

📌 補足:改行を入れるには?

Discordに複数行のメッセージを送りたいときは、\nを使います。
たとえば:

"content": "1行目\n2行目\n3行目"

とすれば、Discord上では3行のメッセージとして表示されます。

 

「試し打ち_はやな」は任意の文字列に変更して、「WEBHOOKのURL」の部分を自分のWebhookのURLに変更して実行してみてください。

実行結果

正常に実行されると、Discordの作成したチャンネルに任意のメッセージが来ます!

ではこのコマンドを応用して、リソース状況を通知してみましょう!

閾値を超えたら即時通知するスクリプト【コピペOK】

リソース情報を毎分取得してCSVに格納しておく方法は以下の記事で紹介しております。

スクリプトの内容と解説

以下のようなスクリプトで、CPUまたはメモリ使用率が指定した値を超えたときに通知を送れます。

#!/bin/bash

CSV_PATH="/home/centos/cpu_mem/log/resource_log$(date '+%Y-%m-%d').csv"
WEBHOOK_URL="ウェブフックのURL"

THRESHOLD_CPU=75.0
THRESHOLD_MEM=75.0

last_line=$(tail -n 1 "$CSV_PATH")
daytime=$(echo "$last_line" | cut -d',' -f1)
cpu=$(echo "$last_line" | cut -d',' -f2)
mem=$(echo "$last_line" | cut -d',' -f3)

message=""

# 閾値チェック
cpu_exceeded=$(python3 -c "print(float($cpu) > $THRESHOLD_CPU)")
mem_exceeded=$(python3 -c "print(float($mem) > $THRESHOLD_MEM)")

if [ "$cpu_exceeded" = "True" ]; then
  message+="  CPU使用率が高すぎます: $cpu%\\n"
fi

if [ "$mem_exceeded" = "True" ]; then
  message+="  メモリ使用率が高すぎます: $mem%\\n"
fi

# 通知
if [ -n "$message" ]; then
  message+="Log Time:$daytime\n"
  curl -H "Content-Type: application/json" \
       -X POST \
       -d "{\"content\":\"$message\"}" \
       "$WEBHOOK_URL"
fi

コード解説

【概要】

このスクリプトは次のことをしています:

  1. 当日のCSVログファイルから最新の記録を1行だけ取り出す

  2. その中の「CPU使用率」「メモリ使用率」が設定した**しきい値(75%)**を超えていたら

  3. Discordにアラート通知を送る

#!/bin/bash

  • このスクリプトはBashで動作することを示します。

CSV_PATH=…

CSV_PATH="/home/centos/cpu_mem/log/resource_log$(date '+%Y-%m-%d').csv"
  • 出力対象のCSVファイルのパスを指定。
  • $(date '+%Y-%m-%d') により、日付付きファイル名になります。

WEBHOOK_URL=…

  • Discordに通知を送るためのWebhook URLを変数に格納しておきます。
    控えておいたウェブフックのURLを記載してください。

THRESHOLD_CPU / THRESHOLD_MEM

  • CPUとメモリ使用率のしきい値(%)を設定。
  • この値を超えるとアラート通知が送られます。

last_line=$(tail -n 1 “$CSV_PATH")

  • CSVファイルの一番最後の行(最新の記録)を取得します。

cutコマンドで日時・CPU・メモリを取得

daytime=$(echo "$last_line" | cut -d',' -f1)
cpu=$(echo "$last_line" | cut -d',' -f2)
mem=$(echo "$last_line" | cut -d',' -f3)
  • CSVの各カラムをカンマ , 区切りで抽出しています。
    -f1:日時
    -f2:CPU
    -f3:メモリ

Pythonでしきい値を超えたかを判定

cpu_exceeded=$(python3 -c "print(float($cpu) > $THRESHOLD_CPU)")
mem_exceeded=$(python3 -c "print(float($mem) > $THRESHOLD_MEM)")
  • Python で小数点を含む数字の大小比較をします。
    VPSのcentosにはデフォルトでPythonが入っていたのでそのままつかえます。
  • True が返ってきたらしきい値を超えています。

条件に応じてメッセージを作る

if [ "$cpu_exceeded" = "True" ]; then
  message+="  CPU使用率が高すぎます: $cpu%\\n"
fi
  • もし、閾値を超えていたら、変数message に追記していく形で通知内容を構築。

通知を送信

if [ -n "$message" ]; then
  message+="Log Time:$daytime\n"
  curl -H "Content-Type: application/json" \
       -X POST \
       -d "{\"content\":\"$message\"}" \
       "$WEBHOOK_URL"
fi
  • [ -n "$message" ] はメッセージが空でないかチェック。
  • curl で Discord に POST 送信します。

実行イメージ(Discord画面)

閾値を超えたときにDiscordに通知が来るようになりました!
通知されるように少し負荷をかけてみました。

一番安いVPSを使っているので、すぐに100%になってしまったようです。

cronで毎分実行する方法

以下のように crontab に登録すれば、自動的に毎分スクリプトが実行されます。

$ crontab -e

* * * * * /home/centos/cpu_mem/cpu_mem_alert.sh

🔰 Linuxを試せる環境がない方へ

コマンドなどを実際に試してみたいけれど、Linux環境がない…
そんなときは、「さくらのVPS」を使えば簡単に自分専用のLinux環境が手に入ります!

  • ✅ 月額524円(税込)〜手軽に始められる
  • ✅ UbuntuやDebianなど、好みのOSが選べる
  • ✅ SSH接続でターミナル操作もバッチリ
  • ✅ 日本国内の大手サービスで安心・安定

さくらのVPSでLinux学習をはじめる

\ あなただけのLinux環境を5分で構築! /