切り分けができると、障害対応は、一気に楽になります。「サーバーに、つながらないんですけど!」
この一報が来た瞬間、いきなりコマンドを叩き始める人と、まず一呼吸おいて、状況を聞く人。どちらが早く直すかというと、たいてい後者です(前者だった僕が言うので、間違いありません)。
今回から、シリーズ「情シスのためのトラブル対応基礎」(全5回)が始まります。ネットワーク基礎と Windows 基礎で身につけた道具を、障害対応という実戦の流れに組み直していくシリーズです。第1回は、手を動かす前の考え方と、切り分けの型です。
結論:障害対応は、切り分けまで含めて「5つの順番」で進める
| 順番 | やること | ひと言でいうと |
|---|---|---|
| ① 把握 | 何が、いつから、誰に起きているかを聞く | 症状を、言葉にする |
| ② 影響範囲 | 自分だけか、全員か、特定のサービスだけか | 広さを、見る |
| ③ 変更確認 | 直前に、何か変えなかったか | 「昨日と違うところ」を探す |
| ④ 切り分け | 近いところから、外へ、1か所ずつ確かめる | 原因の候補を、減らす |
| ⑤ 対処と記録 | 戻せる手から試し、結果を残す | 次の人が、困らないようにする |
④の切り分けに入る前の、①〜③が、一番、効きます。ここを飛ばして④から始めると、広い範囲を、闇雲に疑うことになります。
① 把握:「つながらない」を、分解する
「つながらない」は、症状ではなく、感想です。次のように、聞き返すと、原因の候補が、一気に絞れます。
| 聞くこと | 絞れること |
|---|---|
| 何が、つながらない?(社内システム、Web、特定のアプリ) | どの経路か |
| いつから?(今朝から、さっきから、昨日は動いた) | 変更や時刻との関係 |
| エラーメッセージは?(画面の文言を、そのまま) | 原因の種類 |
| 自分だけ? 隣の人は? | 個人か、全体か |
| どこで?(社内、自宅、VPN 経由) | 経路の違い |
エラーメッセージは、画面を撮ってもらうのが一番です。言葉だけだと、「なんか赤い字が出た」になりがちです。
② 影響範囲:「広さ」で、疑う場所が変わる
| 範囲 | 疑う場所 |
|---|---|
| その人の PC だけ | PC の設定、アカウント、アプリ |
| 同じ部署・同じフロアだけ | スイッチ、Wi-Fi、VLAN、ネットワークの設定 |
| 全員、同じサービスだけ | そのサービス側(サーバー、アプリ、証明書、ライセンス) |
| 全員、全部のサービス | 回線、ルーター、DNS、認証基盤 |
「広いほど、共通部分が、原因」と覚えておくと、迷子になりません。
③ 変更確認:「昨日と違うところ」を探す
動いていたものが、急に動かなくなったのなら、間に、何か変わったはずです。
- 更新:Windows Update、ソフトの更新、ファームウェアの更新
- 設定変更:ファイアウォール、DNS、ルーター、グループポリシー
- 期限切れ:証明書、パスワード、ライセンス
- 環境の変化:席替え、機器の入れ替え、回線の工事
変更履歴や、作業の記録があるかで、調査の速さは、まるで違います。これが、第5回の「記録」につながります。
④ 切り分け:「近いところから、外へ」
ネットワーク基礎の最終回でやった、リンク → IP 設定 → ゲートウェイ → 外の IP → 名前解決 → ポートの順番が、そのまま使えます(ネットワーク基礎⑤:通信障害の基本的な切り分け)。
大事なのは、次の3つです。
- 1回に、1か所だけ、変える・確かめる(同時にいじると、何が効いたか分からなくなる)
- 分かったことを、そのつど、メモする(「たぶん」と「確認した」を、混ぜない)
- 戻せる手から、試す(再起動、再接続、設定の読み取りなど)
実機で確認:切り分けのために状況を集める「ひな型」
切り分けの前に、基本情報を、一度に集めるスクリプトを用意しておくと、かなり楽になります。僕が使っているものは、こうです。
# 一次切り分けの基本情報を集める(調査メモのひな型)
$os = Get-CimInstance Win32_OperatingSystem
$cfg = Get-NetIPConfiguration | Where-Object { $_.IPv4DefaultGateway } | Select-Object -First 1
$gateway = $cfg.IPv4DefaultGateway.NextHop
[pscustomobject]@{
取得日時 = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
OS = $os.Caption
最終起動 = $os.LastBootUpTime.ToString('yyyy-MM-dd HH:mm')
IPv4 = ($cfg.IPv4Address.IPAddress -join ', ')
ゲートウェイ = $gateway
ゲートウェイ疎通 = [bool](Test-Connection $gateway -Count 1 -Quiet)
名前解決 = [bool](Resolve-DnsName example.com -ErrorAction SilentlyContinue)
HTTPS接続 = (Test-NetConnection example.com -Port 443 -WarningAction SilentlyContinue).TcpTestSucceeded
C空きGB = [math]::Round((Get-Volume -DriveLetter C).SizeRemaining / 1GB, 1)
} | Format-List

結果の読み方は、こうです。
- ゲートウェイ疎通 / 名前解決 / HTTPS 接続が、すべて True:この PC から外への基本経路は、問題なし。原因は、もっと手前(アプリや権限)か、特定のサービス側を疑います。
- ゲートウェイ疎通が False:PC と、ルーターの間の問題(ケーブル、Wi-Fi、IP 設定)。
- ゲートウェイ疎通は True、名前解決が False:DNS の問題(第3回で詳しく)。
- 名前解決は True、HTTPS 接続が False:通信先のポート、ファイアウォール、相手側の問題。
たった9行の結果で、疑う場所が、半分以下に絞れるのが、ひな型の良いところです。
ひとことメモ
Test-NetConnectionは、接続の診断情報を表示するコマンドです。ping、TCP のポート確認、経路の追跡などが行えます。-Portで TCP ポートを指定し、-InformationLevel Quietなら、結果を True/False だけで返せます。
僕のやらかし:直す前に、ごはんの注文を取り忘れた
昔、「メールが送れない」という連絡を受けて、僕は、即座に、メールサーバーの再起動に向かいました。30分かけて再起動し、ログも確認し、「直ったはず」と連絡しました。
返ってきたのは、「まだ、送れません」。
話を、よく聞くと、送れないのは、その人だけでした。メールサーバーは、最初から、無事だったのです。原因は、その人の PC の、メールアプリのパスワード期限切れ。最初に「自分だけですか? 隣の人は?」と聞いていれば、30分は、要りませんでした。
お店でいえば、厨房の火を、全部落とす前に、まず「ご注文は、何でしたか?」と聞くべきだったわけです。順番の大切さを、胃袋でも、覚えました。
今回覚えたコマンド
| コマンド | 意味 |
|---|---|
Get-CimInstance Win32_OperatingSystem |
OS の情報(最終起動など) |
Get-NetIPConfiguration |
IP 設定の一覧 |
Test-Connection <宛先> -Count 1 -Quiet |
ping の結果を True/False で返す |
Resolve-DnsName <名前> |
名前解決(DNS の問い合わせ) |
Test-NetConnection <宛先> -Port <番号> |
TCP の接続確認 |
次回予告
次回は、PC からサーバーまで、通信経路を追う回です。「どこまで届いていて、どこから届かないのか」を、道のりに沿って、確かめていきます。
参考
ITもごはんも、腹八分目が長続きのコツ!


コメント