Skip to content
このページは AI で翻訳されており、不正確な表現が含まれる場合があります。GitHub で改善にご協力ください。

通知センター ​

通知センターは Gately 内部のイベントバスを購読し、ルールに従って、DDNS の変更、証明書の期限、WAF のブロック、プロセスの異常などのイベントを Webhook、Telegram、Bark、ntfy、Gotify、Pushover、Discord、Slack、ServerChan、PushPlus、WeCom、DingTalk、Feishu、メールに通知します。管理画面はサイドバーの「システム」グループ → 「通知センター」にあります。

仕組み ​

  1. 各モジュールは状態が変化したときにプロセス内のイベントバスへイベントを発行します。発行が業務処理をブロックすることはありません。
  2. 通知センターはイベントを受け取ると、ルールを 1 件ずつ照合します。条件は、ルールが有効であること、イベントのレベルがルールの最低レベル以上であること、イベントの種類がルールのイベント一覧に一致することです。
  3. 一致したルールは、抑制による重複排除を経て、ルールで選択した有効なチャネルにメッセージを配信します。同じイベントが複数のルールに一致した場合でも、同じチャネルへの送信は 1 回だけです。
  4. 配信ごとの結果(成功または失敗の理由)は「最近の配信」に書き込まれ、メモリ上に直近 200 件が保持されます。失敗した場合はモジュールのログにも書き込まれます。

1 回の配信のタイムアウトは 45 秒です。

チャネル ​

「チャネルを追加」を押し、種類を選んでフィールドを入力します。すべてのチャネルに、名前(必須)、メモ、有効化スイッチがあります。シークレット系のフィールドは保存後に再表示されず、編集時に空欄にすると元の値が保持されます。

種類必須フィールド任意フィールド
Webhookリクエスト URLメソッド(デフォルトは GET。GET、POST、PUT、PATCH から選択)、ヘッダー(1 行に Key: Value)、ボディ、成功判定の内容、タイムアウト(秒、デフォルトは 20)、証明書検証のスキップ
TelegramBot Token、Chat IDAPI URL(空欄で https://api.telegram.org を使用)
Barkデバイスキーサービス URL(空欄で https://api.day.app を使用)
WeComボットの URLなし
DingTalkボットの URL署名シークレット(ボットで「加签(署名)」を有効にしている場合に入力)
Feishuボットの URL署名シークレット(ボットで「签名校验(署名の検証)」を有効にしている場合に入力)
メールサーバー、宛先、および送信元またはユーザー名の少なくとも一方暗号化方式、ポート、ユーザー名、パスワード
ntfyトピックサーバー URL(空欄の場合は https://ntfy.sh)、アクセストークン
Gotifyサーバー URL、アプリケーショントークンなし
Pushoverアプリケーショントークン、ユーザーキーなし
DiscordWebhook URLなし
SlackWebhook URLなし
ServerChanSendKeyなし
PushPlusTokenなし

URL 系のフィールドには、http:// または https:// で始まる完全なアドレスが必要です。

Webhook のテンプレート変数 ​

リクエスト URL とボディでは、次の変数を使えます。波括弧で変数名を囲んで書きます(# を前置する書き方にも対応しています)。

変数内容
titleタイトル。形式は [Gately] イベントのタイトル
messageイベントの詳細な説明
text説明、送信元、レベル、日時を含む完全な本文
typeイベントの種類。例:ddns.changed
sourceイベントの送信元
levelレベル info、warn、error
timeRFC 3339 形式の日時

イベント自体が持つ追加フィールド(ip、container など)も変数として使えます。名前が上の表と重なる場合は、上の表が優先されます。URL に含まれる変数の値は URL エスケープされます。

メール ​

暗号化方式値デフォルトのポート
STARTTLSstarttls587
SSL/TLStls465
暗号化なしnone25

ポートに 0 を指定すると、暗号化方式に応じたデフォルトのポートが使われます。宛先は複数指定でき、カンマで区切ります。メールは UTF-8 エンコードのプレーンテキストで、サーバーが AUTH に対応していてユーザー名が入力されている場合は PLAIN 認証が使われます。送信元が空欄の場合はユーザー名が使われます。

署名とリターンコード ​

  • DingTalk:署名シークレットを入力すると、リクエストに timestamp と sign が自動で付加されます。
  • Feishu:署名シークレットを入力すると、リクエストボディに timestamp と sign が自動で付加されます。
  • WeCom、DingTalk、Feishu、Bark は、レスポンスの業務リターンコードを確認します。HTTP 200 でも業務として失敗した場合は、同様に配信失敗として記録されます。

ルール ​

「ルールを追加」を押します。

フィールド説明
名前必須
イベント1 件以上。具体的なイベントの種類を選べるほか、* はすべてのイベントを表し、ddns.* のようなワイルドカードも入力できます。ワイルドカードには Go の path.Match 構文を使います
最低レベルinfo(情報)、warn(警告)、error(エラー)。空欄は情報です。イベントのレベルがこの値より低い場合は通知されません
チャネル1 つ以上
抑制(秒)同じルールで、同じ送信元の同じ種類のイベントは、この時間内に 1 回だけ通知され、その間の重複イベントは破棄されます。0 は重複排除なしです
有効化スイッチ

ヒント

WAF のブロックやアップストリームの状態変化は頻繁に起こりうるため、こうしたルールには 300 秒以上の抑制時間を設定することをおすすめします。

ルールテンプレート ​

ルールを新規作成するときにテンプレートをクリックすると、イベント、レベル、抑制時間があらかじめ入力されます。あとはチャネルを選んで保存します。

テンプレートイベント
重大な障害DDNS の更新失敗、証明書の更新失敗、アップストリームの停止、子プロセスの異常終了、バックアップ失敗、コンテナの終了
証明書の期限証明書の期限が近い、更新失敗(抑制 24 時間)
アドレス変更DDNS レコードの更新、STUN アドレスの変更
サービスの状態アップストリームの停止と復旧、コンテナの終了、子プロセスの終了
セキュリティとログインログイン失敗、IP のブロック、ログイン成功、機密情報へのアクセス
設定変更管理画面で行われたすべての設定変更

イベントの種類 ​

イベントの種類名前レベル発生条件
ddns.changedダイナミック DNS:レコードを更新情報DDNS タスクがレコードの更新に成功した
ddns.failedダイナミック DNS:更新に失敗エラーDDNS タスクの更新に失敗した
stun.changedSTUN:穿孔アドレスの変化情報STUN ルールの穿孔アドレスが変化した
ssl.expiring証明書:まもなく期限切れ警告証明書の残りの有効期間が 7 日未満。同じ証明書については 24 時間に 1 回まで通知
ssl.renew_failed証明書:更新に失敗エラー証明書の発行または更新に失敗した
waf.blockedWAF:リクエストをブロック警告WAF がリクエストをブロックした。ip、host、path フィールドが付く
upstream.downリバースプロキシ:アップストリーム利用不可エラーWeb サービスのバックエンドが利用不可と判定された
upstream.upリバースプロキシ:アップストリーム復帰情報利用不可だったバックエンドが復帰した
docker.exitedDocker:コンテナが終了警告またはエラーコンテナが 0 以外の終了コードで終了した(警告)、またはメモリ不足で強制終了された(エラー)
process.exited子プロセスの異常終了エラーGately が管理する子プロセスが異常終了し、自動で再起動される。送信元はそのプロセスのログ名
backup.doneバックアップ:完了情報定期または手動のバックアップがすべての保存先で成功した。設定バックアップ を参照
backup.failedバックアップ:失敗エラーバックアップのアーカイブ作成に失敗した、またはいずれかの保存先への書き込みに失敗した
auth.failed認証:連続失敗警告管理画面のログインに失敗した。ip フィールドが付く
auth.banned認証:IP をブロック警告Web サービスの認証の連続失敗により、自動ブロックが発動した
login.success管理画面:ログイン成功情報管理画面へのログインに成功した。ip、user フィールドが付く
audit.change管理画面:設定変更情報管理画面で行われた任意の変更操作。actor、ip、method、path フィールドが付く。監査ログと設定履歴 を参照
audit.access管理画面:機密情報へのアクセス警告バックアップ、診断パッケージ、証明書の秘密鍵のダウンロードや、ターミナルの起動など。フィールドは上と同じ
notify.testテスト通知情報チャネルの「テスト」ボタンで発生する。ルールの照合には関与しない

テスト送信 ​

チャネルカードの「テスト」ボタンは、そのチャネルに「テスト通知」というタイトルのメッセージを直接送信します。ルールは経由せず、チャネルが有効であることも求められません。送信に成功すると「テスト通知を送信しました」と表示され、失敗した場合は具体的なエラーが表示されます。テストの結果も「最近の配信」に表示され、ルールの列には「テスト」と表示されます。

対応する API は POST /api/notify/channels/{key}/test で、API トークン の notify:write 権限で呼び出せます。

Apache-2.0 ライセンスで公開されています。