目次
- Uptime Kumaが単体で電話をかけられない理由
- 必要なもの
- ステップ1 — 電話をかけるチャンネルを作る
- ステップ2 — EchobellをWebhook通知として追加する
- ステップ3 — フィルタリングできるペイロードを送る
- ステップ4 — 復旧通知で電話がかかってこないようにする
- ステップ5 — オオカミ少年にならないよう監視を調整する
- 業務時間外だけ鳴らす
- チームでアラートを共有する
- この構成で得られないもの
- トラブルシューティング
- よくある質問
- Uptime Kumaは単体で電話をかけられますか?
- ファイアウォール内のセルフホストUptime Kumaでも動きますか?
- 電話はおやすみモードを突破しますか?
- 復旧時に電話がかかるのを止めるには?
- 同じ監視対象で複数人に電話できますか?
- まとめ
- 関連記事
Uptime Kumaは90を超える通知プロバイダーに対応していますが、スマートフォンを鳴らせるものは1つもありません。監視対象がダウンしたときに電話を受け取るには、Uptime Kumaの Webhook 通知を、通知タイプを通話に設定したEchobellチャンネルへ送ります。この記事では、使うべきカスタムボディ、ダウン通知と復旧通知の分け方、そして設定を静かに壊す2つの落とし穴を扱います。
Uptime Kumaは、セルフホスト型の死活監視ツールとして最も普及しています。GitHubスター数はおよそ9万、2.5.0が2026年8月にリリースされました。HTTPエンドポイント、TCPポート、DNSレコード、Dockerコンテナなどを監視でき、ダウンの検知能力は本当に優秀です。
弱点はラストワンマイル、つまり眠っている人間にアラートを届ける部分にあります。
Uptime Kumaが単体で電話をかけられない理由
Uptime Kumaの通知先リストは長大です。Telegram、Discord、Slack、メール、Gotify、ntfyなど数十種類。しかしそのすべてが届けるのはメッセージです。メッセージは着信音スイッチ、おやすみモード、iOSの集中モードの影響を受けます。午前3時にそれが意味するのは、アラートは届いたが何も起こらなかった、ということです。
「電話をかける」という公式プロバイダーは存在しません。多くの人が行き着く選択肢は次の3つです。
- Twilio — 音声通話を組むことは可能ですが、Uptime KumaのTwilioプロバイダーはSMSを送信します。通話にするにはブリッジサービスの実装、番号の購入、通話ごとの課金が必要です。
- PagerDuty、Zenduty、Spike.sh、Splunk On-Call — これらは実際に発信できますが、同時に本格的なインシデント管理プラットフォームであり、価格も席数課金です。ローテーションやエスカレーションポリシーが必要なら正解ですが、電話を鳴らしたいだけなら重すぎます。
- SMSゲートウェイ — SMSも結局メッセージです。iOSでは、送信者が許可リストに入っていない限り、テキストは集中モードを突破しません。
Uptime KumaのリポジトリにはVoIP通話通知を求めるIssueが長く開いたままです。それまでの抜け道が汎用の Webhook プロバイダーで、任意のURLに任意の内容をPOSTできます。必要なのはそれだけです。
必要なもの
- 稼働中のUptime Kumaインスタンス(本記事は2.x向け。カスタムボディは1.23+でも動作します)
- Echobellのインストール(App Store / Google Play)
- 5分
Uptime Kumaインスタンスから hook.echobell.one への外向きHTTPS通信が必要です。インターネットから到達可能である必要はありません。これは送信方向のWebhookなので、自宅サーバーやプライベートネットワーク内で動く監視でも問題なく機能します。
ステップ1 — 電話をかけるチャンネルを作る
Echobellで Production Down のような名前のチャンネルを作成し、購読時の通知タイプを通話に設定します。ここが肝心です。通話タイプのアラートは着信画面として届き、iOSの集中モードやおやすみモードを貫いて鳴ります。プッシュ通知にはできないことです。
テンプレートは次のように設定します。
タイトル: 🔴 {{monitor}} がダウンしました
本文: {{message}}
対象: {{target}}
そしてチャンネルの Webhook URL をコピーします。次のような形式です。
https://hook.echobell.one/t/<channel-token>
このURLは秘密情報として扱ってください。手に入れた人は誰でもあなたのスマートフォンを鳴らせます。
ステップ2 — EchobellをWebhook通知として追加する
Uptime Kumaで Settings → Notifications → Setup Notification を開き、次のように入力します。
| 項目 | 値 |
|---|---|
| Notification Type | Webhook |
| Friendly Name | Echobell — Down |
| Post URL | EchobellのWebhook URL |
| Request Body | Custom Body |
Additional Headers は空のままにします。
ステップ3 — フィルタリングできるペイロードを送る
多くの解説が飛ばすステップであり、アラートシステムとノイズ製造機を分ける分岐点でもあります。
Custom Body に以下を貼り付けます。
{
"monitor": "{{name}}",
"target": "{{hostnameOrURL}}",
"message": "{{ msg | strip_newlines }}",
"up": "{{ heartbeatJSON['status'] }}"
}
Uptime KumaはカスタムボディをLiquidでレンダリングし、次の変数を提供します。
| 変数 | 内容 |
|---|---|
{{name}} | 監視対象のフレンドリー名 |
{{hostnameOrURL}} | チェック対象のホスト名またはURL |
{{status}} | 🔴 Down、✅ Up、⚠️ Test |
{{msg}} | 人が読める理由。例:connect ECONNREFUSED 10.0.0.4:443 |
{{ monitorJSON['...'] }} | monitorオブジェクト全体 |
{{ heartbeatJSON['...'] }} | heartbeatオブジェクト全体 |
このペイロードには意図的な点が2つあります。
msg への strip_newlines。 Uptime Kumaのメッセージには改行が含まれることが多く、JSON文字列内の生の改行は不正なJSONです。このフィルターがないと、Webhookは断続的に失敗します。しかも失敗するのは、たまたま改行を含むエラーのときだけです。お使いのUptime KumaがLiquidの json フィルターに対応していれば、"message": {{ msg | json }}(前後の引用符は不要)がさらに安全です。引用符もエスケープしてくれます。
{{status}} ではなく heartbeatJSON['status']。 status 変数は絵文字付きのテキストになるため、比較には扱いにくいものです。heartbeatのステータスは素の数値です。
0— ダウン1— 稼働中2— 保留3— メンテナンス
引用符で囲むこと("up": "{{ ... }}")も重要です。理由はステップ5で説明します。
ステップ4 — 復旧通知で電話がかかってこないようにする
Uptime Kumaの1つの通知は、ダウン時と復旧時の両方で発火します。そのままにすると、サービスが壊れたときに電話がかかり、自然復旧したときにもう一度かかってきます。人々に1本目を無視することを教えてしまうのは、この2本目です。
Echobellの条件で分離します。条件は配信前に評価されます。
Production Down チャンネル(通知タイプ通話)の条件を次のように設定します。
up == "0"
2つ目のチャンネルとして Production Recovered を作成し、通知タイプを通常にして、条件を設定します。
up == "1"
テンプレートは次のとおりです。
タイトル: ✅ {{monitor}} が復旧しました
本文: {{message}}
そしてUptime Kumaに2つ目のWebhook通知を追加します。カスタムボディも監視対象も同じで、URLだけ復旧チャンネルのものにします。両方の通知がすべてのイベントを受け取り、各チャンネルが不要な半分を捨てます。
結果として、ダウンは鳴り、復旧は翌朝読む静かなプッシュになります。
ステップ5 — オオカミ少年にならないよう監視を調整する
2秒のネットワークの揺らぎのために鳴った電話は、電話がないことより悪い結果を招きます。次の1本も無視されるからです。監視対象側にあるUptime Kumaの3つの設定が、この問題の大半を解決します。
- Retries —
2か3に設定します。Uptime Kumaはこの回数だけ連続で失敗して初めてダウンと判定するため、単発のパケットロスを除外できます。 - Heartbeat Retry Interval — 失敗中の再チェック間隔です。20〜30秒が妥当なバランスで、リトライ3回と組み合わせれば、実際の障害を約1分で検知できます。
- Resend Notification if Down X times consecutively —
10程度にしておくと、さらに10回チェックしてもダウンしたままの場合に再度電話がかかります。粗削りなエスカレーションポリシーですが、機能します。
未応答の通話を再送を待たずにすぐ再試行したい場合は、Echobellのアプリ設定で失敗した通話を再試行をオンにしてください。
業務時間外だけ鳴らす
日中はおそらくすでにダッシュボードを見ているので、鳴る電話は不要な割り込みです。Echobellのシステム時刻変数(すべてUTC)を使えば、1つのチャンネルを時間帯によって別の挙動にできます。
up == "0" && (hour >= 17 || hour < 9)
この条件では、UTCの09:00〜17:00の外側でのみ電話がかかります。日中用には、通知タイプが通常の2つ目のチャンネルに逆の条件を設定します。
up == "0" && hour >= 9 && hour < 17
自分のタイムゾーンへの換算を忘れずに。これらの変数は常にUTCで計算されます。詳しくはUTC条件による時間帯別通知で解説しています。
チームでアラートを共有する
Echobellのチャンネルは購読リンクでチームメンバーと共有でき、購読者それぞれが自分の通知タイプを選べます。つまり同じ監視対象が、オンコール担当のスマートフォンを鳴らしつつ、他のメンバーには通常のプッシュとして届きます。席数課金も、Uptime Kuma側の追加のルーティングルールも不要です。
これはセルフホストを選んだそもそもの理由であるプライバシー面とも相性が良い設計です。監視は自分のインフラに残り、Echobellは通知の内容と履歴をサーバーではなく端末側に保持します。
この構成で得られないもの
境界を正直に示しておくと、後々の不幸な移行を避けられます。Echobellは配信レイヤーであり、インシデント管理プラットフォームではありません。次の機能はありません。
- オンコールのローテーションスケジュールやフォロー・ザ・サンの引き継ぎ
- 2人目を自動的に呼び出すエスカレーションツリー
- インシデントのタイムライン、確認応答の追跡、ポストモーテム支援
これらが必要なチームには、PagerDutyやGrafana Cloud IRMなどが必要です。この構成が埋めるのは、Uptime Kumaが空けたままにしている具体的な穴、つまり検知した障害を実際に鳴るスマートフォンへ変換する部分です。個人運用者、小規模チーム、ホームラボにとっては、たいていこれが要件のすべてです。
トラブルシューティング
Testボタンを押しても何も起きない。 上記のペイロードでは想定どおりの挙動で、誰もが最初は戸惑います。Testを押した時点でUptime Kumaにはレンダリングできるheartbeatがないため、{{ heartbeatJSON['status'] }} は空文字列になり、どちらの条件にも一致しません。きちんとテストするには、何も待ち受けていないポート(127.0.0.1:9)に向けた使い捨てのTCP監視を作り、実際に失敗させてください。
Webhookが断続的に失敗する。 ほぼ確実に改行の問題です。msg が strip_newlines を通っているか確認してください。改行を含むエラーメッセージのときだけ壊れるため、ランダムに見えます。
EchobellがHTTP 200で success: false を返す。 チャンネルトークンが誤っているか、チャンネルが削除されています。長さは正しいが存在しないトークンにもEchobellは 200 を返すため、ステータスコードではなくJSONボディを確認してください。
HTTP 405。 チャンネルで POST Only が有効なのにGETが送られています。Uptime KumaはPOSTするので、これは通常ブラウザでURLを開いたことを意味します。
通知は届くが鳴らない。 その購読の通知タイプが通話ではなく、通常またはタイムセンシティブになっています。通知タイプは購読者ごとの設定なので、鳴らない端末側で確認してください。
よくある質問
Uptime Kumaは単体で電話をかけられますか?
いいえ。Uptime Kumaには90以上の通知プロバイダーがありますが、すべてメッセージを配信するものです。電話をかけるには、Echobellのように発信できるサービスへWebhookを転送するか、有料のインシデント管理プラットフォームを使う必要があります。
ファイアウォール内のセルフホストUptime Kumaでも動きますか?
はい。このWebhookはUptime Kumaインスタンスからの送信方向のHTTPSリクエストなので、hook.echobell.one に到達できれば十分です。インスタンスにグローバルアドレスは不要です。
電話はおやすみモードを突破しますか?
はい。Echobellの通話タイプの通知は着信として提示されるため、iOSの集中モードとおやすみモードを貫いて鳴ります。詳細と関連設定は重要アラートのためにiOS集中モードを突破する方法を参照してください。
復旧時に電話がかかるのを止めるには?
条件付きのチャンネルを2つ使います。通話チャンネルには up == "0"、通常優先度の復旧チャンネルには up == "1" を設定し、それぞれにWebhook通知を向けます。手順は上記のステップ4のとおりです。
同じ監視対象で複数人に電話できますか?
はい。チャンネルをチームメンバーと共有すれば、購読者それぞれが自分の通知タイプを選べます。通話チャンネルを購読している全員に電話がかかります。
まとめ
構成はWebhook 1本、カスタムボディ1つ、条件2つだけです。既存のUptime Kumaの監視設定、リトライロジック、ステータスページはそのままに、「監視が気づいた」と「人間が気づいた」の間の隙間を埋められます。
iPhone版Echobellをダウンロード、またはGoogle Playで入手して、まずは重要でない監視対象を1つつなぎ、わざと失敗させてみてください。頼りにする前に、経路を信頼できるようにしておきましょう。