本文へ移動
松葉 / Matsuba ・ 開発過程資料

アラートの運用/ Operations

気づく・判断する・記録するを、1 つの画面で終える

検知したアラートは、誰かが読んで判断し、対応の記録を残して初めて役に立ちます。アラートの運用画面は、その 3 つの動作を 1 画面で終えるために作られています。ここでは画面の作り、状態の動かし方、詳細から直接手を打てる範囲、そしてアプリの中で終わることと、クラウド側の対処が要ることの境目を扱います。

01

画面の作りScreen Layout

アラートの運用画面(/admin/alerts)は、システム管理者だけが開けます。上から計器 4 枚 → 絞り込み 3 種 → カードの一覧の順で、上ほど「全体の量」、下ほど「個別の中身」になります。

計器 4 枚

画面を開いて最初に目に入るのは、いま抱えている量です。4 枚のうち3 枚は押すと、その計器が数えている集合そのものへ一覧を絞り込みます。

Summary Cards
計器数えているもの押せるか押したときの絞り込み
重大の未対応重大 × 未対応押せる状態=未対応/重大度=重大/種別=すべて。0 件より多いときは赤系の面になります
警告の未対応警告 × 未対応押せる状態=未対応/重大度=警告/種別=すべて
対応中対応中の全件押せる状態=対応中/重大度=すべて
過去 7 日の解決解決済み + 無視の 7 日ぶん押せない—(下記)
4 枚目を押せなくしている理由: この計器は「過去 7 日」という時間の窓と「解決済み+無視」という 2 つの状態をまたいで数えています。ところが一覧の絞り込みには、その組み合わせに一致する条件がありません。押せてしまうと、計器の数字と、着地した一覧の件数が合いません。計器は「数えている集合を同じ画面で見られるときだけ押せる」ことにしてあり、この 1 枚だけが例外的に表示専用です。数字の内訳は計器の下に「解決済み + 無視」と書き添えています。

押せる 3 枚も、0 件のときは押せません。押した先が確実に空だと分かっている遷移を用意しないためです。

まだ数えていない状態を、正常に見せない: 計器の値をまだ取得できていない間、値を 0 で埋めません。値は「—」にし、色も中立に戻します。0 件のときの落ち着いた面と、まだ何も分かっていない状態は見た目が同じになってはいけません。取得に失敗したときは、計器の並びの中に取得できなかったことを示す面と再試行のボタンが出ます。監視の画面で最も避けたい壊れ方は、取得の失敗が「異常なし」に見えることです。
(画面の画像は掲載していません)
上から計器 4 枚、状態と重大度のチップ、種別の選択、そしてカードの一覧です。見出しの右には並び順が常時書かれています。

絞り込み 3 種

Filters
絞り込み形既定補足
状態チップ 5 択未対応未対応 / 対応中 / 解決済み / 無視 / すべて。件数のバッジが付きます
重大度チップ 3 択すべてすべて / 重大 / 警告
種別選択 1 つすべて29 種を 7 つの系統の見出しでまとめて表示。複数選択は持ちません

状態・重大度・種別・ページ・表示件数はすべて URL に載ります。「この条件の一覧を見てほしい」を URL のまま渡せます。表示件数は 10 / 20 / 50 から選べ、既定は 20 件です。絞り込みを変えたときはページを 1 に戻します。

状態チップの件数バッジは、条件つきで出します: 件数の元になっている集計は全体の数しか持ちません。重大度や種別で絞り込んでいる最中にその数字を出すと、「チップには 40、一覧には 5 件」という食い違いが常態になります。そこでバッジは、重大度と種別がともに「すべて」のときだけ描きます。絞り込み中はバッジを消し、枠だけ残すので、行の高さは動きません。
(画面の画像は掲載していません)
29 種が系統ごとにまとまって並びます。ウイルススキャン、イベント・通知配送、Drive 同期、共有リンク、保持期間・アーカイブ、管理・運用、アカウントの 7 つです。

並び順を固定する理由

並び順は最終発生が新しい順で固定し、並べ替えの操作を持ちません。この画面は 30 秒ごとに自動で更新されます。並び順まで変えられるようにすると、行が動いたときに「更新で動いた」のか「並べ替えで動いた」のかが判別できなくなります。代わりに、一覧の見出しの右へ「最終発生が新しい順」を常時表示して、順序の根拠を画面上に出しています。

ページ番号も URL に載るため、他の管理者が対応して行が減ると、開き直したときに範囲外のページに着地することがあります。総件数が確定した時点で範囲外なら、最後のページへ静かに寄せます。

空のときの 3 通り

Empty States
状況表示
既定の条件で 0 件「未対応のアラートはありません」。アプリ層の監視で異常は検知されていない、と主語を限定して書きます
絞り込んで 0 件「条件に一致するアラートはありません」+「絞り込みを解除する」。解除するのは重大度と種別だけで、状態はそのまま残します(見ていた器を勝手に変えないため)
別の状態で 0 件「解決済みのアラートはありません」のように、選んでいる状態の名前を差し込みます
「システムは正常です」とは名乗りません: この画面が見ているのはアプリ自身の判定だけで、サーバの死活や外部サービスの障害はクラウド側の監視が別に見ています。0 件のときに「システムは正常に稼働しています」と書くと、守備範囲の外まで保証したことになります。空状態の文の主語は「アプリ層の監視で」に固定しています。

なお、既定の条件(未対応)で 0 件と N 件の間を 30 秒ごとに行き来する面では、読み上げソフトがその都度しゃべると邪魔になります。自動更新で揺れる空状態は読み上げの対象から外し、利用者の操作の結果である「絞り込んで 0 件」だけを読み上げます。

(画面の画像は掲載していません)
「未対応のアラートはありません」と、アプリ層の監視で異常が検知されていない旨が並びます。
02

見た目で状態を分けるReading a Card

1 件のアラートは 1 枚のカードです。4 行で構成し、上ほど「何が起きたか」、下ほど「どうするか」になります。

Card Anatomy
行入るもの
左の罫重大度を表す 4px の縦罫。重大は赤系、警告は黄系
1 行目重大度のバッジ(アイコン+和文)/種別の名前/状態のチップ/最終発生の相対時刻(カーソルを載せると日本時間の絶対時刻)
2 行目種別ごとの決まった説明文。画面側では一切加工しません
3 行目対象の Box 名/対象の種類と識別子/発生回数(2 回以上のときだけ)/種別ごとの代表値 1 つ
4 行目いまの状態から実行できる操作のボタン

3 行目の「代表値 1 つ」は、自由項目の中から規模が一目で分かる 1 値だけを取り出したものです。滞留や積み残しなら件数、バウンス率なら 24 時間の率、クォータなら使用率、所要時間なら時間、バッチの失敗ならワーカーの名前、といった具合です。取り出せる値が無い種別では何も出しません。ここで失敗して画面ごと落ちることが無いように、値が取れないときは黙って空になります。

状態は「面の色」ではなく、要素で分ける

未対応と対応中は通常の面、終端(解決済み・無視)は無彩色の落ち着いた面にします。加えて、無視のカードだけ種別の名前に取り消し線が入ります。

カード全体を薄くする表現は使いません: 当初は終端のカードを半透明にして「終わったもの」を表していました。実測すると文字と背景のコントラストが 2.21〜2.94 対 1 まで落ち、読みやすさの基準(4.5 対 1)に届きませんでした。終わった情報も読める必要があるため、この表現はやめています。状態の識別は状態チップ・取り消し線・左罫に集約し、文字はすべて基準を満たす濃さを保っています。

重大度の左罫は状態によらず常に維持します。重大度は「そのとき何が起きたか」という記録の事実であって、対応が進んだから軽くなるものではないためです。重大度は色だけに頼らず、色・アイコンの形・和文の 3 つで同時に表しています。

カード 1 枚 = タブ 1 回

カードは全体が 1 つのボタンとして働き、クリックでも Enter / Space でも詳細が開きます。4 行目のボタンはマウス用の近道という位置づけで、キーボードのタブ移動の対象から外してあります。20 件表示のとき、外さなければ一覧の中に最大 80 回のタブ停止が生まれ、ページ送りまで到達するのが困難になります。キーボードでの操作は「カードで Enter → 詳細の下部のボタン」の 1 本に集約しています。

(画面の画像は掲載していません)
状態を「すべて」にした一覧です。終端のカードは無彩色の面になり、無視のカードだけ種別名に取り消し線が入ります。左の重大度の罫は状態が変わっても残ります。
03

状態遷移State Transitions

状態は 4 つ、操作は 3 つです。解決済みと無視は終端で、そこから戻す操作は用意していません。再発は検知器が新しい行として起票するのが正しい形だからです。

図 12 · アラートの状態遷移 — 4 つの状態と 3 つの操作
4 つの状態 × 3 つの操作未対応から直接 解決できる(対応中を経由しない)未対応から直接 無視もできる(理由の入力は必須)対応中にする理由は任意解決理由は任意無視理由は必須未対応起票された直後対応中担当が調べている解決済み対処が終わった無視対処しないと決めたどちらも終端戻す遷移は持たない弾かれる操作 / 記録しない操作終端からの操作は 409 で弾く解決済み・無視の行を動かす操作は拒否されます。現在の状態を差し込んだ文を返し、一覧を取り直します。手動で解決できない 2 種は 422Workspace の停止ユーザと身元不一致。条件が消えれば翌日の同期で自動的に解決するため、画面も解決を出しません。失敗した遷移は記録しない409 / 404 / 422 のときは監査ログを1 行も書きません。起きなかった変更が履歴に混ざらないようにするためです。

条件が消えたときにシステム側から自動的に解決済みへ動く種別もあります(イベント配信の滞留・通知配送の滞留・削除当日通知の欠落・Workspace 系 2 種)。図に描いた 3 つの操作は、あくまで管理者が手で動かす経路です。

理由の必須と任意

3 つの操作はいずれも確認のダイアログを挟み、そこで理由を書きます。理由が必須なのは「無視」だけです(10〜256 文字)。対応中にする・解決するは任意で、空のまま確定できます。

Confirm Dialogs
操作理由トーンダイアログの見出し
対応中にする任意通常アラートを対応中にします
解決する任意通常アラートを解決済みにします
無視する必須警告色アラートを無視します

理由の入力欄には「監査ログに記録されます」と添えてあり、文字数の下限・上限とカウンタは入力欄自身が出します。取り消せない操作なので、確定ボタンには最初からフォーカスを当てません。ダイアログが開いた勢いで Enter を押しても確定しないようにするためです。送信中は確定と取消の両方が押せなくなり、二重送信を防ぎます。

弾かれたときに、ダイアログを閉じない

他の管理者が先に動かしていた場合、後から押した操作は拒否されます。このとき確認のダイアログは閉じません。閉じてしまうと、直後の自動更新で一覧が並び替わり、「どの行の話だったのか」を見失います。サーバから返った文(現在の状態が差し込まれています)をそのまま出し、一覧と詳細を取り直したうえで、利用者が自分のタイミングで閉じて判断し直せる形にしています。成功したときだけ、ダイアログが閉じます。

(画面の画像は掲載していません)
対象のアラートの種別を本文で示し、理由の入力欄には監査ログに残る旨と文字数のカウンタが出ます。
04

詳細の 4 区画Detail Modal

カードを押すと詳細が開きます。中身は 概要 / 対象 / 推奨アクション / 対応状況 の 4 区画で、この中だけで判断が終わることを設計の目標にしています。

Four Sections
区画入るもの
概要種別/重大度/状態/説明文/初回発生と最終発生(日本時間の絶対時刻)/発生回数/アラートの識別子(コピー可)
対象Box 名/対象の種類と識別子/自由項目の生の中身をそのまま(整形した表にせず、原文のまま折り返して表示)
推奨アクション種別ごとのガイダンス文/関連画面へのリンク(別タブ)/「詳細をコピー」/開発者へ引き継ぐブロック
対応状況最新の遷移(いつ・誰が・理由)/対応履歴(監査ログから新しい順に最大 50 件)
自由項目を和訳しない: 自由項目には、件数・比率・対象の識別子・エラーの原文など、種別ごとにばらばらの中身が入ります。これを人が読みやすい表に整形すると、整形の対応表に載っていない項目が画面から消えます。異常の調査で本当に要るのは、たいてい想定していなかった項目のほうです。ここは原文のまま出し、読みやすさは「カードの代表値 1 つ」と「推奨アクションの文」が担当します。

関連画面のリンクは、実装済みのものだけ描く

推奨アクションには、次に開くべき管理画面へのリンクが付きます。29 種のうち21 種にリンクがあり、残る 8 種にはリンクを描きません。8 種のうち 3 種は行き先の画面が今後実装されるもので、リンクの名前だけを持たせてあります(実装時にパスを差せばそのまま活性化します)。残り 5 種は、対処がクラウド側の操作や手順書の中で完結するため、恒久的に行き先を持ちません。

押せないリンクを本番に置かない: まだ無い画面へのリンクを「準備中」として置くと、押した人は毎回そこで詰まります。名前だけを保持してリンクを描かない形にすれば、画面が増えた時点でリンクが現れ、それまでは何も約束しません。

対応履歴は監査ログから引く

アラートの行そのものが持つのは最新の遷移 1 つだけ(いつ・誰が・理由)です。状態ごとに列を増やすことはしていません。時系列は、遷移のたびに書かれた監査ログから引き直します。1 つの記録に 2 つの真実を持たせない形です。履歴がまだ無いときは「まだ対応履歴はありません」と出します。

開いている間は、足元を動かさない

詳細や確認ダイアログを開いている間、一覧の自動更新は止まります。理由を書いている最中に背後の一覧が入れ替わらないようにするためです。閉じた瞬間に取り直すので、戻ったときには最新になっています。

詳細の取得に失敗したときは、ウィンドウを閉じずに中身だけを「取得できませんでした」と再試行のボタンに差し替えます。閉じてしまうと、フォーカスの戻り先だったカードが自動更新で入れ替わっている可能性があり、何が起きたのかも伝わりません。遷移に成功したときも詳細は開いたままで、更新後の状態と履歴がその場に反映されます。

(画面の画像は掲載していません)
4 つの区画が上から順に並びます。対象の区画には自由項目が原文のまま入り、推奨アクションには次の一手の文と関連画面へのリンクが出ます。
05

その場で手を打つIn-App Remediation

配送に関わる 3 種のアラートでは、詳細の中にいまのシステムの状態そのものが並び、そこから直接手を打てます。読んで理解しても、別の画面に移らないと何もできないなら、気づきは行動になりません。

Live Views inside the Detail
アラート中に出るもの性質できる操作
イベント配信の滞留失敗イベントの一覧現在の状態行ごとの再投入 / 破棄、一括の再投入 / 破棄
通知配送の滞留滞留中の宛先の一覧現在の状態行ごとの再キュー、一括の再キュー
配信不能メッセージの超過購読ごとの内訳起票時点の記録—(操作は同期・DLQ 管理の画面が持ちます)

上 2 つは 30 秒ごとに取り直すライブの一覧です。見出しには「現在 N 件」と書き、その下に「現在の状態を表示しています(起票時点の内訳は上の詳細データを参照)」と添えます。起票したときのスナップショットと、いま見ている数が違うのは正常で、その差をここで説明し切っています。3 つ目だけは起票時点の記録で、こちらは 30 秒更新をしません。ライブの一覧が 2 つあるのに 1 つだけ止まっている理由は、内訳の元になる数値が外部の監視から取った値で、都度引き直す種類の情報ではないためです。

一覧は 50 件ずつ読み込みます。アラートが解決済みや無視になっていても、一覧は常に表示します。これはアラートの付属物ではなく、いまのシステムの状態を映す窓だからです。

失敗イベントの 1 行に入るもの

外部へ配信できずに再試行の上限へ達したイベントは、4 行で表示します。中身は識別子の羅列ではなく、業務の言葉に直してあります。

Dead-Letter Row
行入るもの
1 行目イベントの日本語の名前(「コメント投稿」「メンバー招待」のように、起きた操作そのものを言う)+ 相対時刻
2 行目Box 名 / 対象の名前(ファイル名・フォルダ名など)/ 操作した人の名前。取れた要素だけ並べます
3 行目エラーの原文(切り詰めません)+ 「N 回失敗」
4 行目「再投入」「破棄」のボタン

2 行目の名前は、イベントの中身から取り出しています。中身に操作した時点の名前が凍結されて入っていればそれをそのまま使い、識別子しか無ければデータベースを引き直します。削除済みで引けないものは空欄になります。名前を後から引き直す方式だけにすると、「削除されたファイルの配信失敗」が名無しになって調べようがなくなるためです。

再投入と破棄

Disposition
操作理由起きること
再投入任意送信待ちに戻し、失敗の回数を 0 に戻します。1〜2 分で配信が再試行されます。直前のエラーの記録は消しません(次の失敗で上書きされるまで証跡として残します)
破棄必須そのイベントの配信をあきらめます。取り消せません。この通知は送られません
すべて再投入 / すべて破棄同上古い順に最大 100 件ずつ処理します。100 件を超える場合は、確認のダイアログでその旨を明示します
一括でも、1 件 1 行で記録します: 破棄は取り消せず、破棄したものを後から見る画面もありません。監査ログに「100 件破棄した」の 1 行だけを残すと、どの 100 件を捨てたのかを永久に復元できなくなります。そのため一括の操作でも、対象ごとに 1 行ずつ(最大 100 行)記録します。理由と、一括の操作であった旨も各行に入ります。

処分した行はその場で一覧から消えます。すべて処分し終えると一覧は空になり、「現在、配信に失敗したイベントはありません(すべて処分済みです)。このアラートは 5 分以内に自動で解決済みになります」と出ます。5 分ごとの検知器が 0 件を確認して、アラート自体を閉じるためです。

滞留した通知の再キュー

送信待ちのまま 30 分を超えた宛先も、同じ形で並びます。テンプレートの日本語名・通知の件名・伏せ字にした宛先・滞留が始まった時刻の 4 つで、行ごとの再キューと、古い順に最大 100 件の一括再キューができます。見出しには「送信前の状態のまま 30 分以上経過した宛先を表示しています」と書き、検知の条件と表示している母集団が同じであることを言葉でも保証しています。

再キューの前に、配送の有無を確かめる: 滞留している宛先の中には、送信を試みたが結果を確認できなかったものが混じります。証拠が取れなかったときは「送っていないかもしれない」ではなく「送ったかもしれない」側に倒して止めているためです。ここで無条件に全件を再キューすると二重送信になります。そのため推奨アクションの文・検知器の説明文・再キューの確認ダイアログの3 か所すべてに、メール配信サービスの管理画面で配送の有無を確認してから実行する旨を書いています。

なお、再キューで作る配送の指示は必ず新しい名前で作ります。同じ名前で作り直そうとすると、完了済みの名前は一定時間その名前を受け付けず、再キューが黙って失敗します。二重送信を防いでいるのは名前ではなく、配送する側が「送信待ち以外なら送らずに終わる」ことを毎回確かめている仕組みのほうです。

06

気づける状態を保つStaying Aware

アラートは、席を外している間にも起票されます。見ていない時間のほうが長いという前提で、気づき方を 4 つ用意しています。

Ways to Notice
手段間隔ふるまい
一覧の自動更新30 秒既定は ON。詳細やダイアログを開いている間は止まり、閉じた瞬間に取り直します
「最終更新」の表示常設「n 秒前」と手動更新のボタン。自動更新は無言で行うため、更新が生きていることの唯一の常設の合図です
新規の重大アラートの通知30 秒ごとに判定前回の観測からの増分を、自動で消えない通知で知らせます。押すと重大の未対応だけに絞り込みます
上部の件数バッジ60 秒すべての管理画面の上部に常設。未対応が 0 件のときは出しません
「最終更新」を常設している理由: 回線が切れているとき、この画面の取得はエラーになりません。「後で再開する」状態で待機に入るため、エラーの表示も出ないまま、古いデータが正常な顔で残り続けます。この劣化に気づける手がかりは、「最終更新: n 秒前」の数字が伸びていくことだけです。この表示は取得に成功したときにしか進みません。

重大アラートの通知は時間で自動的に消えません。閉じるのは明示的に押したときだけです。監視の画面では席を外している時間が長く、数秒で消える通知は「気づく」役に立たないためです。初回の観測では鳴らしません(画面を開いた瞬間に既存の件数で鳴ってしまうため)。同数のときも、減ったときも鳴りません。

この通知が取りこぼす場合: 同じ 30 秒の間に 1 件起票され 1 件解決されると、増分は 0 になり通知は鳴りません。監視している値が集計値であることによる構造的な取りこぼしです。重大なアラートはメールが独立して飛ぶため、運用上はこれを許容しています。

音は使いません

管理画面は複数のタブで開かれ、席を外している間に鳴った音は何の情報も残しません。加えて、ブラウザは操作を伴わない自動再生を制限するため、鳴る保証もありません。代わりに、消えない通知・件数バッジ・個別のメールの 3 つで受け止めています。

件数バッジは上部の 1 か所だけに置き、左のメニュー項目には件数を持たせていません。同じ数値を 2 か所に出すと、更新の間隔の違いで食い違って見えるためです。

(画面の画像は掲載していません)
すべての管理画面に常設され、押すとアラートの運用画面へ移ります。0 件のときは表示されません。
07

開発者へ引き継ぐ線Escalation

アラートには、管理画面の中で対処が終わるものと、クラウド側の操作が要るものがあります。29 種のうち 13 種には、詳細の中に「開発者への連絡」のブロックが出ます。残る 16 種には出ません。

Where the Fix Lives
対処の場所種数代表例
アプリの中で終わる16ウイルス検出(隔離ファイルの画面で取り出しか恒久削除を判断)/共有リンクの総当たり(対象リンクの強制無効化)/管轄外ファイルの大量検知/保持期間削除の積み残し/Workspace 停止ユーザ(Owner の付け替えと無効化の判断)
クラウド側の対処が要る13ウイルス定義の更新失敗/検出テストの失敗/API クォータの上昇/定期補修の所要時間/バッチ処理の失敗/鍵のローテーション期限/Cloud Billing の予算/ストレージ費用/バケット送出量の異常

この線は固定ではありません。イベント配信の滞留・配信不能メッセージの超過・通知配送の滞留の 3 種は両方に足がかかります。まずアプリの中で再投入や再キューを試し、それでも戻らない場合にクラウド側の権限や設定を疑う、という条件つきの文になっています。次の一手の文(アプリ内でできること)と、連絡へ切り替える条件の文を、役割で分けてあります。

「詳細をコピー」

引き継ぎの手段として、すべての種別の詳細に「詳細をコピー」のボタンが常設されています。押すと、種別・重大度・状態・説明文・発生(初回 / 最終 / 回数)・アラートの識別子・自由項目の中身が、整形されたテキストとしてクリップボードに入ります。イベント配信の滞留と通知配送の滞留では、そのとき読み込んでいた一覧の行(最大 50 件と「他 N 件」)も一緒に入ります。宛先のメールは伏せ字のままで、開発者は識別子から引ける形にしてあります。

連絡の手段そのもの(メールの下書きを開くなど)は用意していません。連絡経路は運用側で変わるため、資料を作る側の仕事に留めています。

08

誰が何をできるかPermissions

アラートに関わる操作は、すべてシステム管理者だけです。Box のロール(Owner / Editor / Uploader / Viewer)はここには関係しません。

Who Can Do What
操作システム管理者それ以外の利用者記録
一覧・集計・詳細を見るできる404—
対応中にする / 解決する / 無視するできる404成功時に監査ログ 1 行(誰が・どのアラートを・なぜ)
Workspace 系 2 種を手動で解決するできない(422)404記録しない
失敗イベントの再投入 / 破棄できる4041 対象 1 行(一括でも対象ごとに)
滞留した通知の再キューできる4041 対象 1 行(一括でも対象ごとに)
権限が無いときに 403 ではなく 404 を返す: 「権限がありません」と返すと、その画面や機能が存在すること自体を教えることになります。管理者向けの窓口は、権限の無い人からはそもそも無いように見せます。本文にも「システム管理者権限が必要です」といった文言は載せません。状態番号だけ 404 にして本文で存在を漏らすと、秘匿の意味が消えます。未ログインの場合はサインインの画面へ送ります。

確認は 2 段階です。まずログインしていること、次にシステム管理者であること。加えて、データベース側でも「システム管理者以外は 1 行も見えない」設定が別にかかっています。アプリ側の確認を通り抜けても、データベースが返しません。

操作の記録は 6 種類

アラートまわりで監査ログに残る操作は 6 種類です。状態遷移の 3 つ(対応中にする・解決する・無視する)と、配送運用の 3 つ(イベントの再投入・イベントの破棄・通知の再キュー)です。理由は専用の欄と自由項目の両方に入れてあり、1 行だけで「誰が・どのアラートを・なぜ動かしたか」が読み切れます。

アラートの起票そのものは、監査ログに書きません: 監査ログは「誰が何をしたか」の記録で、アラートの起票はシステムが観測した事実です。起票の記録はアラートの行自体(初回発生・最終発生・発生回数)が持ちます。同じ事実を 2 か所に持つと、必ず片方だけが更新される日が来ます。