0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SadServersを使って障害復旧を体験してみた。

Posted at

はじめに

youtubeでSedServerを使ったハンズオン形式の動画を見ながら、実際に障害復旧をやってみたので、linuxコマンドを覚えるため、アウトプットの習慣化のために書いてみます。

SadServerとは

ある問題を抱えたlinuxサーバーを実際にそうさして、トラブルシューティングが行えるwebサイトです。自分でlinux環境を用意する事なく、誰でも障害復旧を体験できます。

使い方

まずはSadServersにアクセスします。

すると下の画面に行くと思います。
スクリーンショット 2024-11-10 15.29.37.png

難易度がEasy medium Hardの3つあります。

赤い枠のNo Registrationはアカウント登録せずにできるという意味

スクリーンショット 2024-11-10 15.57.31.png

それぞれタグをクリックするとどんな問題があって何を解決すべきか確認できます。
赤い枠のrunですぐに悲しみを抱えたサーバーを作ってくれます。
proは有料になっています。

スクリーンショット 2024-11-10 19.45.19.png
runを押すと仮想サーバーが作成されます

#1をやってみた

問題はログファイルを継続的に書き込み、ディスクをいっぱいにするテストプログラムが作られていてプログラムが不要になったので止めてくださいというもの

ハンズオンで見ながらなんとなくで使っているコマンドもあるので意味も理解するためにコマンドの意味を調べながら振り返ってみる。

はじめにosが何かを調べる。(この問題にはosの情報が書かれていた)

スクリーンショット 2024-11-10 19.47.41.png

なぜ先にosを調べる必要があるのか

# 環境の基本情報をしらべる コマンド
cat /etc/os-release

Linuxカーネルをベースにアプリケーションやソフトウェアをいれて一つのパッケージにしたosの総称をLinuxディストリビューションという

osの種類やバージョンを調べる事で最適なパッケージ管理システムを把握したり、トラブルシューティングに必要な情報を調べている。
osの種類やバージョンによって設定されているログfailなどが違うので、操作手順を定めるためにも環境の情報が大切になる。

次にログfileが増え続けているという事なので実際に見てみる

ls -la /var/log/bad.log

sadserversハンズオンls-laコマンド.png

lsコマンド

ls [オプション] で現在にいるディレクトリのファイルやフォルダの詳細をみる事ができる
-la で隠れディレクトリも含めて全て表示してファイルの詳細も表示する
aとlは別のオプションで大体一緒に使う

画像を見るとバイトサイズが徐々に増えていっていることがわかりこれを止めるのが目的

次に説明に書かれてあるコマンドを使ってプログラムを見にいく。

tail -f /var/log/bad.log
tailコマンド

tail [ファイル] で指定のファイルの行末を表示させれる
-f でファイルの追記を監視できる

次はdfコマンドでディスクの状態を確認する

df -h
dfコマンド

df [オプション] ディスクの空き容量を集計して表示するコマンド
-h で見やすい単位で表示されるGBなど

sadservserハンズオンdf-hコマンド.png

一番右がディレクトリを表示していて今回問題なのは/var/log/bad.logなのでルートディレクトリである/が空き容量で6GBあるのでこれが埋まる前に問題を解決しないといけない

次はlsofコマンドでPIDを特定する

lsof /var/log/bad.log
lsofコマンド

lsof [ファイルパス] プロセスが開いているファイルを表示するコマンドです
lsof [オプションなし]で全てのプロセスの表示。
ファイルを指定するとそのファイルが開かれているプロセスを特定する。

スクリーンショット 2024-11-13 17.04.01.png

画像に写っているプロセスがlogファイルに書き込み続けてサイズを増やし続けている可能性がある

次はtopコマンドで何が動いているか確認してみる

top
topコマンド

top[オプション] 実行中のプロセスをリアルタイムで表示する。オプションはいくつかある
[-p プロセスID]で監視するプロセスを指定できる 「-p 番号 番号」 など

スクリーンショット 2024-11-13 17.03.49.png

この画像から先ほど調べたPIDが表示されたり消えたりしていた、このことからPID586が動いていることがわかったのでこれが何か調べていく

次は調べたPIDからなにが動いているか特定する

ps aux |grep {PID}or{プロセス名}
ps auxコマンド

ps aux のpsはlinux上で動いているプロセスを確認するコマンド。これにauxとオプションを加える事で、端末操作のCPUとメモリ使用率を付与した現在実行中のプロセスが確認できる。基本セットで覚えることが多い。

|(パイプライン)コマンド

| とは前のコマンドの標準出力を次のコマンドの標準入力として渡す役割

grepコマンド

grep [検索表記表現] [ファイル名] で特定の文字列や行を検索するコマンド
PIDがわからなくて検索単語がわかる場合は単語で検索することも可能。
スクリーンショット 2024-11-13 17.05.18.png

画像を見るとlsofコマンドとtopコマンドでも出てきたPIDが表示されて動いているプログラムが特定できたので実際に存在するかls -laコマンドで確認しにいく。これを終了させる事で問題が解決する。

#画像の一番右のプログラムのパスを指定する
ls -la /home/admin/badlog.py

次にkillコマンドでPIDを終了させる

kill {PID}
killコマンド

実行中のプロセスを終了させることができる。本当に終了していいかプロセスかは留意が必要。

killした後にPIDがなくなったかps aux |grep {PID}で確認するとPIDは消えていたので終了させることができた。

最後にプログラムが止まったか確認

序盤に使用したSadServersで提供されるコマンドを使ってプログラムが停止しているか確認した。

tail -f /var/log/bad.log

終わり方

解決したか確認してもらいます。
仮想サーバーのターミナルからSadServerのウインドウに戻って私の解決策を確認するをクリックする
スクリーンショット 2024-11-13 21.19.28.png

その後正解すると自動的に仮想サーバーがシャットダウンされます。

スクリーンショット 2024-11-13 21.19.53.png

まとめ 

今回のトラブルシューティングをするためには仮想サーバーの基本情報を把握して、問題のあるファイルを見に行き状況を確認する。
そのファイルがどこで動いているのか実行中のプロセスを調べてPIDを特定する。
そのPIDが実際動いているかtopでリアルタイムの確認をしてそのプロセスが何を動かしているのか特定する。動いているプログラムが分かれば、終了していいものか判断し終了させる

感想

このシナリオはハンズオン形式で答えがあるためトラブルシュートすることに成功した。
なんとなくで使用していたコマンドもあったので ps auxなどこれらにつて調べて理解を深めることができたので、良い体験ができるサイトだとおもった。今後もlinuxコマンドを覚えていくためにも活用していこうと思った。
まだまだ知らないコマンドも多くあると思うが、次のシナリオはヒントを駆使しながら自分で調べて正解に辿り着きたいとおもった。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?