Ubuntu GrafanaアラートをSlack/メール通知に連携する設定方法

モニタリング

注意

本記事のコマンドは Ubuntu 24.04.4 LTS(Docker公式イメージ ubuntu:24.04)と grafana/grafana 公式イメージ(起動して取得した実バージョンは Grafana v13.0.2 / commit 3fcdbc5a)で検証しています。Grafana 13 系では一部のアラート用APIが新しいものへ移行しているため、古いバージョンとは画面構成やAPIの仕様が変わる場合があります(2026-06-15 時点)。

GrafanaでCPU使用率やメモリの監視はできているのに、「アラートの通知設定がよくわからない」という声はよく聞きます。GrafanaにはSlack・メール・PagerDutyなど多様な通知先(Contact Points)を設定できますが、画面の構成が独特で、初めて触ると迷いやすいのが正直なところです。

本記事では GrafanaのアラートをSlack WebhookとSMTPメールに通知する設定を、Ubuntu 24.04 の Docker 環境で実際に動かして確認しました。Grafana 13.0.2 のUnified Alertingで、Contact Pointの作成・通知ポリシーの設定までを、実際に取得したAPIレスポンスと画面のスクリーンショット付きで解説します。

この記事のポイント

  • docker run 一発でGrafanaを起動し、/api/healthversion 13.0.2 を実測確認
  • SlackはWebhook URLを貼るだけ。メール(SMTP)はGmailアプリパスワードと組み合わせ、起動時の環境変数で設定できる
  • Contact Points(通知先)と通知ポリシー(振り分け)の役割の違いを理解すると設定がスムーズ
  • 初期状態ではルートの通知ポリシーの送信先が empty(未割当)になっており、ここを差し替える必要がある(実測で判明)
  • Slackの Webhook URL はGrafana内部で secureField として秘匿され、APIでも [REDACTED] 表示になる

目次

  1. 動作確認済み環境
  2. GrafanaをDockerで起動する
  3. Grafanaアラートの仕組みを理解する
  4. Slack通知を設定する(Contact Points)
  5. メール(SMTP)通知を設定する
  6. 通知ポリシーを設定する
  7. アラートルールを作成する
  8. よくあるエラーと解決策
  9. まとめ

動作確認済み環境

項目 内容
OS Ubuntu 24.04.4 LTS(Docker公式イメージ ubuntu:24.04
Grafana v13.0.2(commit 3fcdbc5a・Open Source edition)— /api/health/api/frontend/settings で実測確認
Docker 20.10.12
検証日 2026-06-15

今回はDockerを使ってGrafanaを起動します。VPS(Vultr・DigitalOcean等)で動かす場合も、Dockerさえ入っていれば同じ手順でセットアップできます。

GrafanaをDockerで起動する

手順1:Grafanaコンテナを起動する

docker run でコンテナをバックグラウンド起動し、数秒待ってから /api/health でヘルスチェックします。実際に動かしたときの出力がこちらです。

Grafana起動コマンドと/api/healthの実出力(version 13.0.2実測)
Grafana起動コマンドと/api/healthの実出力(version 13.0.2実測)



ubuntu@linuxlab: ~
$ docker run -d \
–name grafana \
-p 3000:3000 \
-e GF_SECURITY_ADMIN_PASSWORD=yourpassword \
grafana/grafana:latest
1487ed7c26a1e3b3af3cb5e2d2504a1bfbf737f650aae9a83cb6183a32c80ce8
# 数秒待ってからヘルスチェック
$ curl -s http://localhost:3000/api/health
{“database”:”ok”,”version”:”13.0.2″,”commit”:”3fcdbc5a”}

"database":"ok" が返ってきたらGrafanaの起動成功です。今回の実測では version: 13.0.2(commit 3fcdbc5a・Open Source edition)が確認できました。ブラウザで http://localhost:3000 にアクセスしてみましょう。

手順2:ブラウザでログインする

Grafana 13.0.2 ログイン画面(Playwright実撮影)
Grafana 13.0.2 ログイン画面(Playwright実撮影)

ログイン画面が表示されたら、ユーザー名 admin、パスワード yourpassword(起動時に GF_SECURITY_ADMIN_PASSWORD で設定した値)でサインインします。画面下部に Grafana v13.0.2 (3fcdbc5a) とバージョンが表示されているのも確認できます。初回ログイン時にパスワード変更を促されますが、スキップも可能です。

Grafanaアラートの仕組みを理解する

設定を始める前に、Grafanaのアラートがどう動くかを把握しておくと、設定の見通しがよくなります。

アラート発火から通知到着までのフロー(概念図)
アラート発火から通知到着までのフロー(概念図)

ポイントは3つの構成要素です:

  • アラートルール:「CPUが80%を一定時間超えたら発火する」という条件を定義する
  • Contact Points(通知先):SlackのWebhook URLやメールの宛先を登録する
  • 通知ポリシー:どのアラートをどのContact Pointへ送るかを振り分けるルール

正直、この3つを別々に設定する必要があるのが最初は煩雑に感じます。ただ、慣れると「Slackには開発チーム向けアラートだけ」「メールには深刻度Criticalのみ」という細かい振り分けができるので、運用が楽になります。

Slack通知を設定する(Contact Points)

手順1:Slack Incoming Webhookを取得する

まずSlack側でWebhook URLを発行します。Slackのワークスペースで「アプリ」→「Incoming Webhooks」を有効化し、通知を送りたいチャンネルを選択するとURLが発行されます。URLの形式は https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXX のようになります。

注意

Webhook URLは外部に漏れると誰でも通知を送れてしまいます。GitリポジトリやDockerfileに直接書かないようにしましょう。なお、Grafanaに登録したWebhook URLは内部で secureField として扱われ、APIで読み出しても [REDACTED] と表示されて中身は見えません(後述の実測で確認しています)。

手順2:GrafanaでContact Pointを追加する

左サイドバーから「Alerting(ベルのアイコン)」→「Contact points」を開きます。今回はProvisioning API経由でも作成して動作を確認しましたが、GUIでは「+ Add contact point」ボタンから以下のように設定します。

Contact Points一覧画面。作成した2件が表示されている(Playwright実撮影)
Contact Points一覧画面。作成した2件が表示されている(Playwright実撮影)
設定項目 入力値
Name slack-server-alerts(任意の名前)
Integration(種類) Slackを選択
Webhook URL Slackで発行したWebhook URL
Recipient(Channel) #server-alerts(通知を送るチャンネル)
Username Grafana Alert Bot(表示名)

実際にAPIで slack-server-alerts(Slack)と email-oncall(Email)の2件を作成したところ、上のスクリーンショットのとおりContact points画面に並びました。読み戻すと、Slackの設定は recipient: #server-alerts / username: Grafana Alert Bot が保存され、URLだけが [REDACTED] と秘匿表示されているのが分かります。

作成したContact Pointと通知ポリシー初期値の実測表
作成したContact Pointと通知ポリシー初期値の実測表
Contact Point作成と通知ポリシーの実APIレスポンス(実測)
Contact Point作成と通知ポリシーの実APIレスポンス(実測)

設定が完了したら、Contact pointの「⋮(More)」メニューから「Test」を選ぶとテストメッセージを送信できます。Slackにメッセージが届けば設定成功です。

メール(SMTP)通知を設定する

手順1:GrafanaのSMTP設定を有効にする

メール通知にはGrafana側にSMTPサーバーの情報を設定する必要があります。Dockerで起動している場合は環境変数で渡すのがシンプルです。




ubuntu@linuxlab: ~
$ docker run -d \
–name grafana \
-p 3000:3000 \
-e GF_SECURITY_ADMIN_PASSWORD=yourpassword \
-e GF_SMTP_ENABLED=true \
-e GF_SMTP_HOST=smtp.gmail.com:587 \
-e GF_SMTP_USER=youraddr@gmail.com \
-e “GF_SMTP_PASSWORD=xxxxxxxxxxxxxxxx” \
-e GF_SMTP_FROM_ADDRESS=youraddr@gmail.com \
-e “GF_SMTP_FROM_NAME=Grafana Alert” \
grafana/grafana:latest

設定が正しく反映されたかは、管理者でログインした状態で /api/admin/settingssmtp セクションを見ると確認できます。今回実際に取得した値が以下です。enabled: true / host: smtp.gmail.com:587 がきちんと反映されており、password はGrafana側で自動的に ********* にマスクされて返ってきました。

/api/admin/settings のSMTPセクション実値(実測)
/api/admin/settings のSMTPセクション実値(実測)

Gmailを使う場合は「アプリパスワード」(16桁の英数字)を使いましょう。通常のGoogleアカウントパスワードではSMTP認証がはじかれます。アプリパスワードはGoogleアカウント → セキュリティ → 2段階認証 から発行できます。

手順2:Contact Pointにメールを追加する

Contact pointsの画面で「+ Add contact point」→ Integrationに Email を選択します:

設定項目 入力値
Name email-oncall(任意)
Integration(種類) Emailを選択
Addresses 通知先メールアドレス(カンマ区切りで複数指定可)
Single email 複数アドレスへ1通にまとめて送る場合はチェックを入れる

今回作成した email-oncalladdresses: oncall@example.com / singleEmail: false で登録され、Contact points画面にも「Email」アイコン付きで表示されました。メールが届かない場合はSMTP設定かファイアウォールの問題が多いです(後述のトラブルシューティング参照)。

通知ポリシーを設定する

通知ポリシーは「どのアラートをどのContact Pointへ送るか」を決める振り分けルールです。左サイドバー「Alerting」→「Notification policies」を開きます。

通知ポリシー画面。Default policyの既定値が見える(Playwright実撮影)
通知ポリシー画面。Default policyの既定値が見える(Playwright実撮影)

ここで一つ、実際に触って分かった大事なポイントがあります。起動直後のルート(Default policy)の送信先は、APIで確認すると receiver: empty(=未割当)になっていました。つまり、Contact Pointを作っただけでは通知は飛びません。Default policyの送信先を自分で差し替える必要があります。

同じくAPIと画面で確認した Default policy の既定タイミングは次のとおりでした(Grafana 13.0.2 実測):

設定 既定値 意味
Group by grafana_folder, alertname アラートをまとめる単位
Group wait 30s 最初の通知をまとめるための待機時間
Group interval 5m 同一グループの追加通知の間隔
Repeat interval 4h 解消されないアラートを再通知する間隔

Slackをデフォルト通知先にする

Default policyの「Edit」から「Default contact point」を、先ほど作った slack-server-alerts に変更して保存します。これで(empty のままになっていた送信先が置き換わり)どのアラートも自動的にSlackへ届くようになります。

特定ラベルのアラートをメールに振り分ける

「+ Add nested policy」をクリックすると、条件付きのサブポリシーを追加できます。たとえば severity=critical のラベルがついたアラートだけメールに送る、という設定が可能です:

  • Matching labels: severity = critical
  • Contact point: email-oncall

アラートルールを作成する

左サイドバー「Alerting」→「Alert rules」を開き、「+ New alert rule」をクリックします。Grafana 13 では、ルール作成画面が「①名前 → ②クエリと条件 → ③フォルダとラベル → ④評価の挙動」のステップ構成になっています。

アラートルール作成画面(Playwright実撮影)
アラートルール作成画面(Playwright実撮影)

手順1:クエリと条件を設定する

データソース(Prometheus / InfluxDB 等)が接続されていれば、ここでメトリクスのクエリを書きます。たとえばPrometheusでCPU使用率を監視する場合:




Grafana Query Editor(Prometheus)
# CPU使用率(idle以外の割合)を算出
100 – (avg by(instance) (rate(node_cpu_seconds_total{mode=”idle”}[1m])) * 100)
# 条件: IS ABOVE 80
# Pending期間: 5m(5分間継続したら発火)

手順2:アラートの詳細を設定する

設定項目 推奨値 説明
Rule name High CPU Usage わかりやすい名前をつける
Folder server-monitoring ルールを保存するフォルダ
Evaluate every 1m 1分ごとに評価
Pending period 5m 5分間継続して初めて発火(誤検知を減らす)
Labels severity=warning 通知ポリシーの振り分けに使う

Pending period を適切に設定するのがコツです。0にすると一瞬でも閾値を超えたら発火してしまい、ノイズが増えます。本番環境では5分〜10分に設定するのが一般的です。

注意

データソースに値が無いと、ルールは Firing ではなく No Data になります。この場合の挙動は「No data state」で変えられ、既定は NoData です。データが取れなくなること自体を検知したい場合は Alerting に変更しておくと安心です。

よくあるエラーと解決策

① Slackに通知が届かない

症状 原因 解決策
Contact Pointは作ったのに通知が来ない ルートポリシーの送信先が empty のまま Notification policiesでDefault contact pointをSlackに変更する
invalid_payload エラー チャンネル名の形式が間違っている Recipientを #channel-name 形式で入力する
VPS上のGrafanaから届かない アウトバウンドHTTPS(443)がブロックされている sudo ufw allow out 443 でポートを開放する

② メール(SMTP)が届かない

症状 原因 解決策
connection refused SMTPポート(587/465)が閉じている sudo ufw allow out 587 またはVPSのセキュリティグループを確認
authentication failed Gmailの通常パスワードを使っている Googleのアプリパスワード(16桁)を使う
/api/admin/settingsenabled: false GF_SMTP_ENABLED が渡っていない 起動時の環境変数を見直してコンテナを作り直す

③ 古いテストAPIが 410 エラーを返す

自動化のために古い /api/alertmanager/grafana/config/api/v1/receivers/test を叩くと、Grafana 13.0.2 では 410 Gone が返ります。実際のレスポンスがこちらです。




ubuntu@linuxlab: ~
$ curl -s -u admin:yourpassword -X POST \
http://localhost:3000/api/alertmanager/grafana/config/api/v1/receivers/test …
HTTP/1.1 410 Gone
{“message”:”This endpoint has been removed. Please use
`/apis/notifications.alerting.grafana.app/v1beta1/namespaces/
{namespace}/receivers/{uid}/test` instead.”}

新しいKubernetesスタイルのAPIに移行しています。スクリプトでテスト送信を組む場合は、新エンドポイントを使ってください。普段はGUIの「Test」ボタンで十分なので、ほとんどの人は気にしなくて大丈夫です。

まとめ

GrafanaアラートのSlack/メール通知設定をまとめます。

  • Grafana は docker run -p 3000:3000 grafana/grafana:latest で起動し、/api/health で version 13.0.2(commit 3fcdbc5a)を実測確認できた
  • 通知設定は Contact Points(通知先の登録)→ 通知ポリシー(振り分け)→ アラートルール(発火条件)の3ステップで構成される
  • SlackはWebhook URLを貼るだけで設定完了。URLはGrafana内部で secureField として秘匿される
  • メール(SMTP)はGrafana起動時の環境変数で設定するのが管理しやすい。Gmailはアプリパスワードが必須
  • 初期状態ではルートの通知ポリシーが empty(未割当)なので、ここをContact Pointに差し替えないと通知は飛ばない
  • 通知が届かないときは、まず送信先の割当とVPSのアウトバウンドポート(443/587)の開放を確認する

本格的にサーバーを監視したいなら、VPSにPrometheusとNode Exporterを入れてGrafanaと連携するのがお勧めです。まずはDockerでGrafanaを動かし、今回の通知設定で「アラートが届く」状態を作ってから、データソースを増やしていくとスムーズです。

著者アイコン
著者アイコン

今回いちばん「なるほど」と思ったのは、Contact Pointを作っても通知ポリシーの送信先が empty のままだと何も飛ばない、という点でした。最初はDefault policyをSlackにするだけで十分で、細かい振り分けは運用しながら少しずつ追加するのがコツです。

VPSでGrafanaを本格運用するなら

  • 固定IPがついた低コストVPSにDockerでGrafana + Prometheusを構築するのがお勧め
  • Vultrの東京リージョン($5/月〜)はコスト・速度のバランスが取れていて入門に最適
  • — VPSの選び方ガイドへ

コメント

タイトルとURLをコピーしました