トラブル対応基礎①|障害対応の基本手順と切り分けの考え方

トラブル対応基礎①|障害対応の基本手順と切り分けの考え方 トラブルシューティング

切り分けができると、障害対応は、一気に楽になります。「サーバーに、つながらないんですけど!」

この一報が来た瞬間、いきなりコマンドを叩き始める人と、まず一呼吸おいて、状況を聞く人。どちらが早く直すかというと、たいてい後者です(前者だった僕が言うので、間違いありません)。

今回から、シリーズ「情シスのためのトラブル対応基礎」(全5回)が始まります。ネットワーク基礎と Windows 基礎で身につけた道具を、障害対応という実戦の流れに組み直していくシリーズです。第1回は、手を動かす前の考え方と、切り分けの型です。

結論:障害対応は、切り分けまで含めて「5つの順番」で進める

順番 やること ひと言でいうと
① 把握 何が、いつから、誰に起きているかを聞く 症状を、言葉にする
② 影響範囲 自分だけか、全員か、特定のサービスだけか 広さを、見る
③ 変更確認 直前に、何か変えなかったか 「昨日と違うところ」を探す
④ 切り分け 近いところから、外へ、1か所ずつ確かめる 原因の候補を、減らす
⑤ 対処と記録 戻せる手から試し、結果を残す 次の人が、困らないようにする

④の切り分けに入る前の、①〜③が、一番、効きます。ここを飛ばして④から始めると、広い範囲を、闇雲に疑うことになります。

① 把握:「つながらない」を、分解する

「つながらない」は、症状ではなく、感想です。次のように、聞き返すと、原因の候補が、一気に絞れます。

聞くこと 絞れること
何が、つながらない?(社内システム、Web、特定のアプリ) どの経路か
いつから?(今朝から、さっきから、昨日は動いた) 変更や時刻との関係
エラーメッセージは?(画面の文言を、そのまま) 原因の種類
自分だけ? 隣の人は? 個人か、全体か
どこで?(社内、自宅、VPN 経由) 経路の違い

エラーメッセージは、画面を撮ってもらうのが一番です。言葉だけだと、「なんか赤い字が出た」になりがちです。

② 影響範囲:「広さ」で、疑う場所が変わる

範囲 疑う場所
その人の PC だけ PC の設定、アカウント、アプリ
同じ部署・同じフロアだけ スイッチ、Wi-Fi、VLAN、ネットワークの設定
全員、同じサービスだけ そのサービス側(サーバー、アプリ、証明書、ライセンス)
全員、全部のサービス 回線、ルーター、DNS、認証基盤

「広いほど、共通部分が、原因」と覚えておくと、迷子になりません。

③ 変更確認:「昨日と違うところ」を探す

動いていたものが、急に動かなくなったのなら、間に、何か変わったはずです。

  • 更新:Windows Update、ソフトの更新、ファームウェアの更新
  • 設定変更:ファイアウォール、DNS、ルーター、グループポリシー
  • 期限切れ:証明書、パスワード、ライセンス
  • 環境の変化:席替え、機器の入れ替え、回線の工事

変更履歴や、作業の記録があるかで、調査の速さは、まるで違います。これが、第5回の「記録」につながります。

④ 切り分け:「近いところから、外へ」

ネットワーク基礎の最終回でやった、リンク → IP 設定 → ゲートウェイ → 外の IP → 名前解決 → ポートの順番が、そのまま使えます(ネットワーク基礎⑤:通信障害の基本的な切り分け)。

大事なのは、次の3つです。

  1. 1回に、1か所だけ、変える・確かめる(同時にいじると、何が効いたか分からなくなる)
  2. 分かったことを、そのつど、メモする(「たぶん」と「確認した」を、混ぜない)
  3. 戻せる手から、試す(再起動、再接続、設定の読み取りなど)

実機で確認:切り分けのために状況を集める「ひな型」

切り分けの前に、基本情報を、一度に集めるスクリプトを用意しておくと、かなり楽になります。僕が使っているものは、こうです。

# 一次切り分けの基本情報を集める(調査メモのひな型)
$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
切り分けの確認画面。基本情報を集めるスクリプトの実行結果。取得日時、OS、最終起動、IPv4、ゲートウェイ、ゲートウェイ疎通、名前解決、HTTPS接続、C ドライブの空き容量が、一覧で表示された画面

結果の読み方は、こうです。

  • ゲートウェイ疎通 / 名前解決 / 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 からサーバーまで、通信経路を追う回です。「どこまで届いていて、どこから届かないのか」を、道のりに沿って、確かめていきます。

→ 第2回:PCからサーバーまで、通信経路を追う

参考

ITもごはんも、腹八分目が長続きのコツ!

コメント