トラブル・障害事例集 その1
作成日時:2024-08-26
更新日時:2024-08-26
これまでに見かけたトラブルや障害を書き起こしてみる。(私がやらかしたわけではないよ)
1.APの管理画面へのアクセスがAWSのWAFで弾かれた
- 事象
- WEBアプリをAWS環境に載せたら、管理画面にだけアクセスできない。
- 正しいアカウントでログインしても403が返却された。
- 403の画面はアプリ側で生成されるものではなく、白背景に黒文字でエラーメッセージが書かれている簡単な表示だった。
- 原因
- AWSのWAFのルールで、URLに「admin」が含まれていると403が返却されるようになっていた。
- 対応や考えとか
- WAFから対象のルールを外す。
- URLの”admin”を別の文字列に変える。
- まずアプリ側で生成されるはずのないエラーページが返却されたら環境を疑う。
- WAFのルールは確認しとけ。
2.LBとAPサーバー間もHTTPS接続していると思うなよ
- 事象
- AWS。LB(ロードバランサ) -> APサーバー2台の構成。
- APサーバーにHTTPS接続下でのみ動作する機能がある。HTTP接続の場合は動作しない。
- ブラウザから対象機能にHTTPSでアクセスしたが動作しない。
- 原因
- クライアントとLB間はHTTPS接続だが、LBとAPサーバー間はHTTP接続だったため。
- 対応や考えとか
- AWSの設定でLBとAPサーバー間もHTTPSに変更可能。
- 設定が必要かどうかはシステムによる。基本HTTPでいい。
3.APログに出力されたクライアントのIPアドレスが同じのばかり
- 事象
- サービスを公開したけどAPサーバーのログには同じIPアドレスしか出力されない
- 原因
- LBのIPを記録してしまっている。直接の接続元はLBだもの。
- 対応や考えとか
- X-Forwarded-Forヘッダーを使って正しい接続元のIPアドレスを取得する。
- IPアドレスが「172」とかで始まってれば多分これ。(プライベートIP)
- システムテストとかでちゃんと確認しろ
4.「既存だから」で思考停止するな
- 事象
- DBアクセス全てが異常に遅い。
- 画面が表示された時にAjaxでプルダウンの中身を取得する画面があったが、そのAjaxが2分近く戻ってこないのでプルダウンはずっと操作不可など。
- 原因
- 全テーブルにインデックスが存在しない。DBアクセスは全てフルスキャン。
- 理由は「既存システムが貼ってないから、流用新規の本システムも貼らない」とのこと。
- 対応や考えとか
- 「既存だから」で思考停止するな。
- 既存システムの設計が新システムに適用するかちゃんと考える。
- あきらかにまずい設計/思想のままプロジェクトが進みそうと思ったら出向先に改善案を提案するとよろし。
5.マップに置いたピンがずれる
- 事象
- 地図アプリ(Google Mapsのようなもの)に緯度経度を指定してピンを配置したところ、想定した位置とずれた。
- 原因
- 測地系が異なっていたため、ずれて表示された。
- 緯度経度には日本測地系(旧日本測地系)と世界測地系が存在する。
- 世界測地系を使用している地図に日本測地系の緯度経度を指定しても想定の位置とずれてしまう。逆も同じ。
- 対応や考えとか
- 測地系の種別を合わせる。または測地系を変換する。日本測地系<=>世界測地系。
- 想定の位置から北西方向に450mほどピンがずれていたら測地系の種別が違う可能性あり。
- 2002-04-01から旧日本測地系は使われなくなったらしいが、私は2020年に測地系の相互変換の案件をしたことがあるので、まだこの手の問題に直面することもあるかもしれない。
- 顧客の保有している緯度経度情報が旧日本測地系の場合とか。
6.ログに個人情報を垂れ流している
- 事象
- 表題の通り
- 原因
- 特に何も考えずあらゆるものをログに出力している。
- 対応や考えとか
- 個人情報をログに出すな。誰が見るか分からん。
- 出すならマスキングしろ。
- そもそも出す内容は絞れ。ログの保存料金がかかる。
7.施設のダブルブッキング
A|-------| B|-------|
既存|-------|
C|--|
D|-----------------|
図)アルファベットは登録しようとしている新規予約、横軸は施設の使用時間帯とする。
- 事象
- 既存予約と新規予約Bでは施設の使用時間が重複しているにも関わらず、予約Bが登録できてしまった。(ダブルブッキング)
- 原因
- 予約期間重複判定ロジックのバグ。
- 上記の図で言うと、Cの予約しか重複判定ができないロジックになっていた。既存予約と予約A~Dは全て重複であると判定できなければならない。
- 対応や考えとか
- この現場ではレビューが存在しなかったため、検知が遅れた。
- 設計/製造/テストのいずれかでレビューをしていれば防げた事象だった。
- 時間帯の重複チェックは割と遭遇するので調べるとよろし。
- 境界値のテストも忘れずに。既存のToと新規のFromが同値の場合はOKとするかNGとするかとか。