クラッシュしたLinuxサヌバヌを保存する5぀のステップ

倚くのLinuxサヌバヌを芋おきたしたが、1回の再起動なしで䜕幎も24時間365日動䜜しおいたした。 しかし、ハヌドりェア、゜フトりェア、およびネットワヌクの障害に぀ながる可胜性のある驚きに察しお安党なコンピュヌタヌは1぀ではありたせん。 最も信頌性の高いサヌバヌでさえ、い぀かは故障する可胜性がありたす。 どうする 今日は、問題の原因を芋぀けお車を修理に出すために、たず䜕をすべきかに぀いお孊びたす。



画像






ちなみに、障害の盎埌の最初の時点で、非垞に重芁な質問に答える䟡倀がありたす。 問題の原因がたったくない可胜性がありたす。 しかし、自分より先に進たないようにしたしょう。



トラブルシュヌティング前ず今



1980幎代に、Linus TorvaldsがLinuxの抂念に着手するずっず前にUnixシステム管理者ずしお働き始めたずき、サヌバヌに䜕か問題があれば、それは本圓の埅ち䌏せでした。 その埌、問題を芋぀けるためのツヌルが比范的少なかったため、障害が発生したサヌバヌが再び機胜するためには、倚くの時間がかかりたした。



今、すべおが以前ずは完党に異なっおいたす。 か぀お、あるシステム管理者が問題サヌバヌに぀いお非垞に真剣に話しおくれたした「私はそれを砎壊しお新しいものを手に入れたした。」



昔はこれは圓たり前のように聞こえたしたが、今日では、仮想マシンずコンテナに基づいおITむンフラストラクチャが構築されるず...結局、必芁に応じお新しいサヌバヌを展開するこずは、クラりド環境では䞀般的です。



ここで、 ChefやPuppetなどのDevOpsツヌルを远加する必芁がありたす。これを䜿甚するず 、叀いサヌバヌを蚺断および修埩するよりも新しいサヌバヌを䜜成する方が簡単です。 たた、Docker Swarm、Mesosphere、Kubernetesなどの高レベルツヌルに぀いお説明するず、管理者が問題を発芋する前に、障害のあるサヌバヌの機胜が自動的に埩元されたす。



この抂念は非垞に広たったため、 サヌバヌレスコンピュヌティングずいう名前が䞎えられたした。 このような機胜を提䟛するプラットフォヌムには、 AWS Lambda 、 Iron.io 、 Google Cloud Functionsなどがありたす。



このアプロヌチのおかげで、クラりドサヌビスはサヌバヌ管理を担圓し、スケヌリングの問題や他の倚くのタスクを解決しお、アプリケヌションを実行するために必芁なコンピュヌティングパワヌをクラむアントに提䟛したす。



サヌバヌレスコンピュヌティング、仮想マシン、コンテナ-これらの抜象化レベルはすべお、実サヌバヌをナヌザヌから、そしおある皋床はシステム管理者から隠したす。 ただし、これらはすべお物理ハヌドりェアずオペレヌティングシステムに基づいおいたす。 そしお、このレベルの䜕かが突然うたくいかない堎合、誰かがすべおを敎理する必芁がありたす。 ですから、今日私たちが話しおいるこずはその関連性を決しお倱わないのです。



あるシステムオペレヌタずの䌚話を芚えおいたす。 クラッシュ埌の察凊方法に぀いお圌が蚀ったのは、次のずおりです。「サヌバヌを再むンストヌルするこずが道です。 だから理解しおいない-車に䜕が起こったのか、そしおこれが将来起こるのを防ぐ方法。 単䞀の適切な管理者がそれを行うわけではありたせん。」 私はそれに同意したす。 問題の原因が発芋されるたで、問題を解決したず芋なすこずはできたせん。



したがっお、障害が発生したサヌバヌの前に、たたは少なくずも問題の原因がそこにあるず考えられたす。 䞀緒に5぀のステップを実行するこずを提案したす。そこから怜玢を開始し、問題を解決する䟡倀がありたす。



最初のステップ。 ハヌドりェアチェック



たず第䞀に-ハヌドりェアを確認しおください。 私はそれが些现で時代遅れに聞こえるかもしれたせんが、ずにかく-それをしおください。 怅子から出お、サヌバヌラックに移動し、サヌバヌが通垞の操䜜に必芁なものすべおに正しく接続されおいるこずを確認したす。



問題の原因を怜玢しおケヌブル接続に぀ながった回数をカりントするこずはできたせん。 LEDを芋るず、むヌサネットケヌブルが匕き抜かれおいるか、サヌバヌの電源がオフになっおいるこずが明らかになりたす。



もちろん、すべおが倚少たずもに芋える堎合は、サヌバヌにアクセスせずにこのコマンドでむヌサネット接続のステヌタスを確認できたす。



$ sudo ethtool eth0
      
      





圌女の答えが「はい」ず解釈できる堎合、これは調査䞭のむンタヌフェむスがネットワヌク䞊でデヌタを亀換できるこずを意味したす。



ただし、デバむスを個人的に怜査する機䌚を無芖しないでください。 これは、たずえば、誰かが重芁なケヌブルを抜いお、サヌバヌたたはラック党䜓の電源を切ったこずを知るのに圹立ちたす。 はい、それは途方もなく簡単ですが、システム障害の原因がたさにこれであるこずが驚くべきこずです。



もう1぀の䞀般的なハヌドりェアの問題は肉県では認識できたせん。 したがっお、䞍良メモリはあらゆる皮類の問題の原因です。



仮想マシンずコンテナはこれらの問題を隠すこずができたすが、特定の物理専甚サヌバヌに関連する障害が自然に発生する堎合は、そのメモリを確認しおください。



メモリを含むコンピュヌタヌハヌドりェアのBIOS / UEFIレポヌトを衚瀺するには、 dmidecodeコマンドを䜿甚したす 。



 $ sudo dmidecode --type memory
      
      





ここですべおが正垞に芋えおも、実際にはそうではないかもしれたせん。 実際、SMBIOSデヌタは垞に正確であるずは限りたせん。 したがっお、 dmidecode



埌でもメモリが疑わしい堎合は、 Memtest86を䜿甚したす。 これは優れたメモリチェッカヌですが、動䜜が遅いです。 サヌバヌで実行する堎合は、チェックが完了するたで、このマシンを他の目的に䜿甚できるこずを期埅しないでください。



倚くのメモリの問題に盎面しおいる堎合-電源が䞍安定な堎所でこれを芋おきたした-Linuxカヌネルモゞュヌルedac_coreをロヌドする必芁がありたす。 このモゞュヌルは、 䞍良セクションを探すためにメモリを垞にチェックしたす 。 このモゞュヌルをダりンロヌドするには、次のコマンドを䜿甚したす。



 $ sudo modprobe edac_core
      
      





しばらく埅っお、次のコマンドを実行しお䜕かが芋えるかどうかを確認したす。



 $ sudo grep "[0-9]" /sys/devices/system/edac/mc/mc*/csrow*/ch*_ce_count
      
      





このコマンドは、メモリモゞュヌル名前がcsrow



始たるむンゞケヌタヌによっお分類された゚ラヌの数の抂芁を衚瀺したす。 この情報を、メモリチャネル、スロット、コンポヌネントのシリアル番号のdmidecode



デヌタず比范するず、䞍良メモリバヌを特定するのに圹立ちたす。



ステップ2 問題の真の原因を芋぀ける



そのため、サヌバヌは奇劙な動䜜を開始したしたが、サヌバヌからの煙はただ消えおいたせん。 サヌバヌビゞネスですか 問題を解決する前に、たずその原因を正確に特定する必芁がありたす。 たずえば、ナヌザヌがサヌバヌアプリケヌションの奇劙さに぀いお苊情を蚀う堎合は、たず問題の原因がクラむアントの障害ではないこずを確認しおください。



たずえば、ある友人が、IBM Tivoli Storage Managerを䜿甚しお䜜業できないずナヌザヌが蚀ったこずを教えおくれたした。 もちろん、最初はサヌバヌがすべおの眪を犯しおいるように芋えたした。 しかし、最終的に、管理者は問題がサヌバヌ郚分にたったく関係ないこずを発芋したした。 その理由は、Windowsクラむアント3076895のパッチの倱敗です 。 しかし、このセキュリティ曎新プログラムが倱敗したため、発生したこずがサヌバヌ偎の問題のように芋えたした。



たた、サヌバヌ自䜓たたはサヌバヌアプリケヌションが問題の原因であるかどうかを理解する必芁がありたす。 たずえば、サヌバヌプログラムはそのようなものを動䜜させるこずができ、ハヌドりェアは完璧な状態にありたす。



手始めに-最も明癜。 アプリは機胜したすか これを確認するには倚くの方法がありたす。 私のお気に入りの2぀を次に瀺したす。



 $ sudo ps -ef | grep apache2 $ sudo netstat -plunt | grep apache2
      
      





たずえば、Apache Webサヌバヌが機胜しおいないこずが刀明した堎合は、次のコマンドで起動できたす。



 $ sudo service apache2 start
      
      





簡単に蚀えば、サヌバヌを蚺断しお問題の原因を探す前に、サヌバヌに問題があるのか​​、それずも䜕か他の問題があるのか​​を調べおください。 障害の原因がどこにあるかを正確に理解した堎合にのみ、適切な質問をしお、䜕が起こったのかをさらに分析するこずができたす。



これは、予期しない車の停車ず比范できたす。 車はそれ以䞊進たないこずがわかっおいたすが、サヌビスにドラッグする前に、タンク内にガスがあるかどうかを確認するこずをお勧めしたす。



ステップ3 topコマンドを䜿甚する



したがっお、すべおのパスがサヌバヌに぀ながるこずが刀明した堎合、システムをチェックするための別の重芁なツヌル-topコマンドがありたす。 サヌバヌの平均負荷の確認、ペヌゞングファむルの䜿甚、プロセスが䜿甚するシステムリ゜ヌスの確認を行うこずができたす。 このナヌティリティは、システムに関する䞀般情報を衚瀺し、Linuxサヌバヌで実行䞭のすべおのプロセスに関するデヌタを衚瀺したす。 以䞋は、このコマンドが衚瀺するデヌタの詳现な説明です。 ここでは、サヌバヌの問題を芋぀けるのに圹立぀倚くの情報を芋぀けるこずができたす。 ここでは、問題領域を芋぀けるのに圹立぀top



を操䜜する䟿利な方法をいく぀か玹介したす。



最もメモリを消費するプロセスを芋぀けるには、キヌボヌドからM



入力しお、プロセスのリストを察話的に゜ヌトする必芁がありたす。 最もCPUリ゜ヌスを消費するアプリケヌションを芋぀けるには、 P



入力しおリストを゜ヌトしたすP



アクティビティ時間でプロセスを゜ヌトするには、キヌボヌドからT



を入力したす。 ゜ヌト甚の列を芋やすくするには、 b



抌したす。



さらに、チヌムが察話圢匏で衚瀺するプロセスデヌタは、 O



たたはo



入力しおフィルタリングできたす。 次のプロンプトが衚瀺され、フィルタヌを远加するよう求められたす。



 add filter #1 (ignoring case) as: [!]FLD?VAL
      
      





次に、テンプレヌトを入力しお、たずえば、特定のプロセスでフィルタリングできたす。 たずえば、フィルタヌCOMMAND=apache



おかげで、プログラムはApacheプロセスに関する情報のみを衚瀺したす。



top



のもう1぀の䟿利な機胜は、プロセスのフルパスず起動匕数を出力するこずです。 このデヌタを衚瀺するには、 c



キヌを䜿甚したす。



V



文字を入力するず、同様のtop



機胜がアクティブになりたす。 プロセス情報の階局衚瀺に切り替えるこずができたす。



さらに、 u



キヌたたはU



キヌを䜿甚しお特定のナヌザヌのプロセスを衚瀺したり、 i



キヌを抌しおプロセッサヌリ゜ヌスを消費しないプロセスを非衚瀺にしたりできたす。



top



長い間、システムの珟圚の状況を衚瀺するための最も人気のある察話型Linuxナヌティリティですが、代替手段もありたす。 たずえば、プログラムhtopには機胜の拡匵セットがあり、よりシンプルで䟿利なグラフィカルむンタヌフェむスNcursesが異なりたす。 htop



を䜿甚する堎合、マりスを䜿甚しおプロセスのリストを垂盎および氎平にスクロヌルしお、完党なリストず完党なコマンドラむンを衚瀺できたす。



top



問題top



教えおくれるずは思わない。 むしろ、私はこのツヌルを䜿甚しお、「でもこれは面癜い」ず思うようになり、さらに研究するように促したす。 top



からのデヌタに基づいお、たずえば、どのログが最初に芋る䟡倀があるかがわかりたす。 less



、 grep



tail -f



コマンドの組み合わせを䜿甚しおログを調べたす。



4番目のステップ。 ディスク容量のチェック



今日でも、テラバむト単䜍の情報をポケットに入れお持ち運べるず、サヌバヌはたったく気付かないうちにディスク容量を䜿い果たす可胜性がありたす。 これが発生するず、非垞に奇劙なこずがわかりたす。



ディスク容量を凊理するために、叀くからあるdfコマンドが圹に立ちたす。このコマンドの名前は「disk filesystem」の略語です。 その助けを借りお、ディスク䞊の空き領域ず䜿甚枈み領域の抂芁を取埗できたす。



通垞、 df



2぀の方法で䜿甚されたす。





もう1぀の䟿利なdf — T



フラグdf — T



ファむルシステムストレヌゞのタむプに関するデヌタを衚瀺できたす。 たずえば、 $ sudo df -hT



ずいう圢匏のコマンドは、䜿甚されおいるディスク容量ずファむルシステム䞊のデヌタの䞡方を衚瀺したす。



奇劙に思われる堎合は、 Iostatコマンドを䜿甚しおさらに掘り䞋げるこずができたす。 これは、高床なシステム監芖ツヌルキットであるsysstatの䞀郚です。 プロセッサに関する情報ず、パヌティションおよびネットワヌクファむルシステムのブロックストレヌゞデバむスのI / Oサブシステムのデヌタが衚瀺されたす。



おそらく、このコマンドを呌び出す最も䟿利な方法は次のずおりです。



 $ iostat -xz 1
      
      





このコマンドは、デバむスの読み取りおよび曞き蟌みデヌタのボリュヌムに関する情報を衚瀺したす。 さらに、平均I / O時間をミリ秒単䜍で衚瀺したす。 この倀が高いほど、ドラむブが芁求で過負荷になっおいるか、ハヌドりェアの問題に盎面しおいる可胜性が高くなりたす。 いったい䜕 ここで、 top



ナヌティリティを䜿甚しお、MySQLサヌバヌたたはその䞊で実行されおいる他のDBMSがロヌドされおいるかどうかを確認できたす。 そのようなアプリケヌションが芋぀からなかった堎合、ディスクに䜕か問題がある可胜性がありたす。



もう1぀の重芁な指暙は、 %util



セクションにあり、デバむスの䜿甚状況に関する情報が衚瀺されたす。 このむンゞケヌタは、デバむスの動䜜の匷さを瀺したす。 60を超える倀は、ディスクサブシステムのパフォヌマンスが䜎いこずを瀺したす。 倀が100に近い堎合、これはドラむブがその限界で動䜜しおいるこずを意味したす。



ディスク怜蚌ナヌティリティを䜿甚するずきは、正確に分析しおいるこずに泚意しおください。



たずえば、耇数の物理ディスクで構成される論理ドラむブの100の負荷は、システムが垞に䞀郚のI / O操䜜を凊理しおいるこずを意味するだけです。 重芁なのは、物理ディスクで䜕が起こるかです。 したがっお、論理ドラむブを分析しおいる堎合、ディスクナヌティリティは有甚な情報を提䟛しないこずに泚意しおください。



ステップ5 ログを確認する



リストの最埌に、重芁床ではなく順番にのみログをチェックしおいたす。 通垞、これらは/var/log



さたざたなサヌビスの個別のフォルダヌにありたす。



Linuxの初心者にずっお、ログファむルはひどいハッシュのように芋えるかもしれたせん。 これらは、オペレヌティングシステムずアプリケヌションの動䜜に関する情報を蚘録するテキストファむルです。 ゚ントリには2皮類ありたす。 1぀のレコヌドは、システムたたはプログラムで発生するこずです。たずえば、各トランザクションたたはデヌタの移動です。 2番目ぱラヌメッセヌゞです。 ログファむルには䞡方を含めるこずができたす。 これらのファむルは単玔に巚倧になる可胜性がありたす。



通垞、ログファむル内のデヌタは非垞に䞍思議に芋えたすが、それを把握する必芁がありたす。 たずえば、 ここでは、Digital Oceanからこのトピックを玹介しおいたす。



ログを確認するのに圹立぀倚くのツヌルがありたす。 たずえば、 dmesg 。 このナヌティリティは、カヌネルメッセヌゞを衚瀺したす。 通垞、それらは倚数あるため、次の簡単なコマンドラむンスクリプトを䜿甚しお、最埌の10゚ントリを衚瀺したす。



 $ dmesg | tail
      
      





䜕が起こっおいるのかをリアルタむムで远跡したいですか 問題を探しおいるずき、私は間違いなくこれを必芁ずしたす。 これを実珟するには、 -f



しおtail



コマンドを䜿甚しtail



。 次のようになりたす。



 $ dmesg | tail -f /var/log/syslog
      
      





䞊蚘のコマンドはsyslog



ファむルを監芖し、新しいむベントに関する情報を受け取るず、それらを画面に衚瀺したす。



別の䟿利なコマンドラむンスクリプトを次に瀺したす。



 $ sudo find /var/log -type f -mtime -1 -exec tail -Fn0 {} +
      
      





ログをスキャンし、考えられる問題を瀺したす。



systemdがシステムで䜿甚されおいる堎合、雑誌を操䜜するための組み蟌みツヌルJournalctlを䜿甚する必芁がありたす。 Systemdは、 journald



デヌモンを䜿甚しおロギング管理を集䞭化したす。 他のLinuxログずは異なり、 journald



はテキスト圢匏ではなくバむナリ圢匏でデヌタを保存したす。



システムの再起動埌、ログを保持するようにjournald



を構成するず䟿利です。 これを行うには、次のコマンドを䜿甚したす。



 $ sudo mkdir -p /var/log/journal
      
      





゚ントリの氞続的な保存を有効にするには、/ /etc/systemd/journald.conf



ファむルを線集しお次を含める必芁がありたす。



 [Journal] Storage=persistent
      
      





これらのログを䜿甚する最も䞀般的な方法は、次のコマンドを䜿甚するこずです。



 journalctl -b
      
      





最埌の再起動埌、すべおのログ゚ントリが衚瀺されたす。 システムがリブヌトされた堎合、このコマンドを䜿甚する前に䜕が起こったかを芋るこずができたす



 $ journalctl -b -1
      
      





これにより、以前のサヌバヌセッションで䜜成されたログ゚ントリを衚瀺できたす。

journalctl



䜿甚方法に関する有甚な資料を以䞋に瀺したす。



ログは非垞に倧きいため、ログを扱うのは困難です。 したがっお、コマンドラむンツヌル grep



、 awk



などを䜿甚しお察凊できたすが、ログを衚瀺するための特別なプログラムを䜿甚するず䟿利です。



たずえば、私はGraylogオヌプン゜ヌスログ管理システムが奜きです。 圌女はさたざたな情報を収集、玢匕付け、分析したす。 デヌタを操䜜するためのMongoDBず 、ログファむルを怜玢するためのElasticsearchに基づいおいたす。 Graylogは、サヌバヌの状態監芖を簡玠化したす。 Graylogは、組み蟌みのLinuxツヌルず比范するず、よりシンプルで䟿利です。 さらに、その䟿利な機胜の䞭でも、Chef、Puppet、 Ansibleなどの倚くのDevOpsシステムで動䜜する機胜に泚目するこずができたす。



たずめ



サヌバヌずの関係に関係なく、最も長く機胜したサヌバヌずしおギネスブックに含たれない堎合がありたす。 しかし、サヌバヌを可胜な限り安定させ、問題の根底に到達しおそれらを修正するこずは䟡倀のある目暙です。 本日お話ししたこずが、この目暙の達成に圹立぀こずを願っおいたす。



芪愛なる読者 たた、クラッシュしたサヌバヌでは通垞䜕をしたすか



All Articles