地図の依存サービスの応答を毎日確認し、異常時に Slack へ通知する - #41
Merged
Merged
Conversation
過去2回、サイト自体は HTTP 200 を返しているのに地図が表示されない状態が 発生し、気づくのが遅れた。自サイトの死活監視では検知できないため、 地図の表示に必要な依存先の応答を毎日確認する。 2026/06: スプライト サーバが 502 → マーカーが1件も描画されなかった 2026/07: 埋め込み v1 が参照する旧インフラの不具合 → 世界地図が描画されなかった ## 設計 依存先の HTTP 応答を確認する。過去2件はどちらも HTTP 層で検知できる。 ヘッドレス Chrome での描画検証は採用しない。世界地図 (zoom 0) はヘッドレスでは 描画が完了せず(実験で確認)、検知したい状態をそもそも検知できないうえ、 偽陽性がアラートの信頼を損なうため。 独立ワークフローは作らず scheduler_daily.yml に相乗りする(YAGNI)。 1日1回でも現状からは大きな改善。分離は必要になってから。 ## 2つのガードレール 1. デプロイの「後」に置き、continue-on-error でジョブを失敗させない。 依存先に異常がある時こそ marker: default への切替をデプロイしたいので、 外部要因でデプロイを止めてはならない。 2. 監視専用の Slack 通知を用意し、本文に復旧手順を書く。既存の通知は 「Failed to build DojoMap」だけで、自分のビルド失敗と区別できないため。 ## sprite_status_test.rb の修正(誤報を出す状態だった) - リダイレクトを追うようにした。api.geolonia.com は cdn.geolonia.com へ 302 を返す。 追わないと 302 を異常と誤検知し、毎日誤報が飛ぶ状態だった。 - 検査対象を basic-v1 から basic-v2 に変更(埋め込み v5 が使うスタイル)。 - 「スプライトに coderdojo シンボルが含まれるか」の検査を削除した。 実測したところ basic-v1 / basic-v2 のいずれにも(API キーの有無にかかわらず) coderdojo は存在しないが、マーカーは正常に描画されている(スクショで確認)。 前提が現実と食い違っており、残すと毎日誤報が飛ぶ。ロゴの読み込み経路は未解明。 ## 文言について Slack 通知やコード コメントは第三者の目にも触れうる。提供元への敬意を欠く 表現は使わず、自分たちの地図の状態を主語にした中立な言い回しに統一した (❌「Geolonia の障害を検知」→ ✅「依存サービスから正常な応答が得られていません」)。 障害を模擬して実際にテストが失敗すること (RED → GREEN) を確認済み。
yasulab
force-pushed
the
monitor-geolonia-deps
branch
from
July 13, 2026 06:52
81d2179 to
e815b65
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
課題
過去 2 回、サイト自体は HTTP 200 を返しているのに地図が表示されない状態が発生し、気づくのが遅れた。自サイトの死活監視では検知できないため、地図の表示に必要な依存先の応答を毎日確認する。
設計:依存先の HTTP 応答を確認する
ヘッドレス Chrome での描画検証は採用しない。 一見理想的だが、実験の結果世界地図(zoom 0)はヘッドレスでは描画が完了しない(v1 / v5 とも同じ)。つまり 2026/07 型の状態をそもそも検知できない。検知したい対象を検知できない手段に投資する意味はない。加えて SwiftShader 描画は遅く不安定で、偽陽性がアラートの信頼を損なう。
過去 2 件はどちらも HTTP 層で検知できるので、依存先の応答を直接確認する。
_config.ymlのgeolonia_embed_urlから読む)→ 200 かつ中身が空でないことtests/sprite_status_test.rb。標準ライブラリのみなのでbundle install不要)独立ワークフローは作らず
scheduler_daily.ymlに相乗りする(YAGNI)。1 日 1 回でも現状からは大きな改善で、分離は実際に必要になってからでよい。2 つのガードレール
① 外部要因でデプロイを止めない。 デプロイの後に置き、
continue-on-errorでジョブを失敗させない。依存先に異常がある時こそmarker: defaultへの切替をデプロイしたいので、外部要因でデプロイが止まったら本末転倒。② アラートで原因の切り分けができるようにする。 既存の通知は「Failed to build DojoMap」だけで、自分のビルド失敗と依存先の異常を区別できない。監視専用の通知を用意し、本文に復旧手順を明記した。
sprite_status_test.rbの修正(誤報を出す状態だった)このテストは「作ったが CI に入っていない」状態で放置されており、実行してみたら失敗した。そのまま監視に載せていたら毎日誤報が飛んでいた。
api.geolonia.comはcdn.geolonia.comへ 302 を返すが、テストはそれを異常と判定していたbasic-v2だが、テストはbasic-v1を見ていたcoderdojoシンボルが含まれるか」の検査を削除した。実測したところbasic-v1/basic-v2のいずれにも(API キーの有無にかかわらず)coderdojoは存在しないが、マーカーは正常に CoderDojo ロゴで描画されている(スクリーンショットで確認済み)。前提が現実と食い違っており、残すと毎日誤報が飛ぶ未解明: ロゴがどの経路で読み込まれているかは特定できなかった。推測で埋めず、コード内に NOTE として残した。判明したら適切な監視を足す。
検証