1K Views
December 10, 23
スライド概要
【LT会&勉強会】エンジニアの輪 at 東京 渋谷(第13回)でお話した資料です。
ただのサメです。
トラブルシューティングの基本を学ぼう 2023/12/10 エンジニアの輪 at 東京 渋谷 (第13回) Kazuki Yamabe
アジェンダ ▪ 自己紹介 ▪ トラブルシューティングとは ▪ トラブルシューティングのやり方 ▪ トラブルシューティングのTips ▪ まとめ 2
自己紹介 名前:Kazuki Yamabe 所属企業:株式会社エーピーコミュニケーションズ 業務内容:企業向けサービスの運用業務全般と開発など ■ブログ・SNS ▪ ブログ:https://www.kdkwakaba.com/ ▪ X:@kdk_wakaba ▪ Linkedin:kdk-wakaba 3
はじめに ◼前提条件 - 今回のLT ではIT 関連のトラブルシューティングについてのお話となります - 個人的な経験を基にお話する内容のため、分野や領域によって手法が異なる場合もあるためご了承ください ◼今回の対象者 - これからエンジニアを目指している人 - 開発業務やインフラ構築・運用などで発生するのトラブルシューティングが苦手な人 ◼本日のゴール ▪ エラー発生時のトラブルシューティングの対応方法を理解している ▪ 基本的なエラーケースについて理解している 4
エラー発生時のトラブルシューティングに対するよくあるお話 • エラーが出たとき、どういう流れで対処すれば 良いかわからない…。 • ネットで検索したけど解決法が出てこない…。 • トラブルシューティングが苦手。 5
トラブルシューティングとは – 概要 トラブルシューティング (troubleshooting) とは、問題を解決するための過程や手段を指す英語の単語であ る。具体的には、技術的な問題や障害が発生した際に、その原因を特定し、適切な解決策を見つけ出す行 為を指す。例えば、コンピューターシステムでエラーが発生した場合、その原因を追求し解決する作業全般を 「troubleshooting」と表現する。 • weblio 辞書 - https://www.weblio.jp /content/troubleshooting 6
トラブルシューティングとは – トラブルシューティングの重要性 トラブルシューティングを適切に行えると、以下の点においてメリットがある。 ▪ プログラミング、インフラ構築などでエラー発生時、適切な対処を行いエラー解消までの時間を短縮できる ▪ 障害時の原因特定・調査の時間を短縮できるため、システム (サービス) の影響を最小限に抑えられる ▪ 問題解決の手法を理解することでテクニカルな部分以外にビジネス面でのスキル向上にも繋がる 7
トラブルシューティングのやり方 – 対応フロー トラブルシューティングを行う時は以下の流れで対応していく 1. 状況把握 2. 状況に基づいた仮説を立てる 3. 仮説に基づき調査・検証を行う 4. 原因を特定し解決策を実施する 8
トラブルシューティングのやり方 – 状況把握 ▪ 現在発生している事象、状況を把握する。一例として以下のような確認方法がある。 - どのような内容のエラーメッセージが出力されているか? - アプリケーションやシステムのログでどのようなログが出力されているか? - どのシステムやサーバー、ハードウェア機器でエラーが発生しているか? - システム (サービス) で利用できない機能、サービスは何か? ▪ 状況を把握したら、どこに問題があるか切り分けを行う - 特定のシステム (サービス) 、ハードウェア機器だけで発生していることか? - 特定のユーザーのみ発生しているか?全ユーザーで発生しているか? - 特定のサービス、リージョンで発生している事象か? (パブリッククラウドなど利用している場合) - エラー発生前は正常に動作していたか?エラー直前に行っていた作業 (変更) は何か?、など 9
トラブルシューティングのやり方 – 状況に基づいた仮説を立てる ▪ 状況把握でどの部分に問題があるかを特定後、問題の原因について仮説を立てる ▪ 仮説は複数のパターンを考え、あきらかに分かるもの以外は決め打ちを避ける - 複数のパターンを考えるにはそれなりの知識や経験も必要となるため、日頃からの学習・実践が大事 ▪ 原因に対する仮説がズレていると、後述する原因調査・検証が非効率になるのでしっかり考える - 問題が明らかなケースもあるため、すぐ特定可能ならそのまま特定しても良い (例:構文エラーやタイポなど) 10
トラブルシューティングのやり方 – 仮説に基づき調査・検証を行う ▪ ある程度仮説が出たら、そこに関連のある事象や原因について調べてみる - ネット検索、技術書など様々なものを調べてみる。調査する場合は正しい情報かどうかも注意が必要 ▪ エラーメッセージを検索すると、既に同じエラーを踏んでる人が見つかったりするため一つの手段 ▪ 世の中には調べても出てこないケースはよくあるため、出てこないことに対してどれだけ考えられるかが重要 ▪ 以下の流れで要点を押さえられると効率よく理解できる - どのようなエラーが発生しているか? - エラーが発生している原因・箇所はどこか? - なぜそのエラーが発生しているか? - エラーを解消するための対処法は何か? 11
トラブルシューティングのやり方 – 原因を特定し解決策を実施する ▪ 原因が特定できたらエラー対処として解決策を実施する ▪ 問題を解決できたらトラブルシューティングは一旦終了となる - 個人の学習などであればアウトプットとしてブログなどに残しておくと同じエラーを見た人に喜ばれることも - 業務であれば問題の共有やドキュメント化・ナレッジの蓄積を行うとチーム内で喜ばれる ▪ 解消しない場合は解決策実施後の状況を把握し再度トライアンドエラーを繰り返していく - 業務や学習で開発や構築などを行っていると、1度で解消しないことがむしろ多い - トライアンドエラーが増えた分だけ自身の経験にもなるので積極的に対応していく 12
トラブルシューティングのTips – どうしたら素早くできるか? ▪ トラブルシューティングに関しては数をこなした分だけ知見も貯まるし対応も早くなる - 手を動かしたりあれこれ試行錯誤している人とそうでない人とで大きく差が出る - 逆に教えられたことだけ、ドキュメント化されているものだけ覚えるみたいな受け身だと中々身につかない ▪ 様々なケースに対応するには、それ相応の知識や経験が必要。以下のようなもので学習していく - 技術書を読んで手を動かしてみる - セミナー (ウェビナー) やハンズオン、ハッカソンなどに参加して知見を広げる - カンファレンス、コミュニティイベントに参加して他のエンジニアからTips を聞いてみる、など 13
トラブルシューティングのTips – 自身で解決できない時 ▪ 調査・検証をしても解決できない場合は上司や知見のある人に質問する - 業務の場合、どうしても時間が限られるため、一人で抱え込みすぎるのも良くない - 質問時は「やりたいことは何か?」「何をしたらどんなエラーが出たか?」など要点をまとめて質問する - 10分考えてわからない時は質問する、などルールを決めておくのも良い ▪ 特に障害が発生しているなど緊急性が高い時には知見のある人にすぐエスカレーションするのも一つ - 時間がかかればかかるほどサービス影響などが大きくなるため - この場合、丸投げ質問も許容してあげる ▪ 業務でサポート周りの契約をしているなら、そちらに聞いてみるのもあり - AWS やMicrosoft のサポートに問い合わせを行うのも一つの手段 - アプライアンス製品などは知見がなければベンダーのサポートを頼るのも一つの手段 14
トラブルシューティングのTips – こちら側に否がないケース ▪ トラブルシューティングを行っていると、稀にこちら側の問題ではないこともたまにある - ソフトウェアなどツールのバグ - サービス側の障害など (パブリッククラウド側のサービスやリージョン障害) ▪ こちら側でできることはあまりないため、素直に待つのも一つ ▪ OSSなどであれば、ソースコードを読んで不具合箇所に対する修正のPull Request を出すのも一つ - approve されればそのソフトウェアのContributor にもなれたりする 15
まとめ ▪ トラブルシューティングは一連の流れを理解し、要点を押さえて効率的に対応する ▪ トラブルシューティングを効率的に行うにはそれ相応の知識や経験が必要なため日々の学習も大事 ▪ 自身で解決できない場合は周囲に質問するなど、助けを求めることも時には重要 16
ご清聴ありがとうございました。 17