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

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

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

# 使い方
まずは[SadServers](https://sadservers.com/scenarios)にアクセスします。

すると下の画面に行くと思います。
![スクリーンショット 2024-11-10 15.29.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/a79b0ab3-4c23-8a6f-4240-fe15f9604f66.png)

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

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

![スクリーンショット 2024-11-10 15.57.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/53e157fd-726a-ab27-6f41-b43ddd51b33f.png)

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

![スクリーンショット 2024-11-10 19.45.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/92805bb3-4212-61cc-49ba-5cd49834aa5d.png)
runを押すと仮想サーバーが作成されます
# ＃１をやってみた
#### 問題はログファイルを継続的に書き込み、ディスクをいっぱいにするテストプログラムが作られていてプログラムが不要になったので止めてくださいというもの

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



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

![スクリーンショット 2024-11-10 19.47.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/a0145bd8-005e-03f2-4a54-461a973c8969.png)

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

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

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

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

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

```bash
ls -la /var/log/bad.log

```
![sadserversハンズオンls-laコマンド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/88370682-5f64-13dc-91a1-034fd3b226be.png)

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

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


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

```bash
tail -f /var/log/bad.log
```
##### tailコマンド
tail [ファイル] で指定のファイルの行末を表示させれる
-f でファイルの追記を監視できる


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

![sadservserハンズオンdf-hコマンド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/6f378eb3-3dd8-8e73-1e0e-5f76258c3c8a.png)

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

### 次はlsofコマンドでPIDを特定する
```bash
lsof /var/log/bad.log
```


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

![スクリーンショット 2024-11-13 17.04.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/dd0244a1-9c5a-a179-a23c-6826e8f4c456.png)


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

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

```bash
top
```

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

![スクリーンショット 2024-11-13 17.03.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/6680fb07-efa5-ff89-0d6b-fd7b485bd29c.png)

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

### 次は調べたPIDからなにが動いているか特定する
```bash
ps aux |grep {PID}or{プロセス名}
```
##### ps auxコマンド
ps aux　のpsはlinux上で動いているプロセスを確認するコマンド。これにauxとオプションを加える事で、端末操作のCPUとメモリ使用率を付与した現在実行中のプロセスが確認できる。基本セットで覚えることが多い。

##### |(パイプライン)コマンド
| とは前のコマンドの標準出力を次のコマンドの標準入力として渡す役割

##### grepコマンド
grep [検索表記表現] [ファイル名] で特定の文字列や行を検索するコマンド
PIDがわからなくて検索単語がわかる場合は単語で検索することも可能。
![スクリーンショット 2024-11-13 17.05.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/71a3c12b-abb8-5f04-a271-9192f12c0542.png)

画像を見るとlsofコマンドとtopコマンドでも出てきたPIDが表示されて動いているプログラムが特定できたので実際に存在するかls -laコマンドで確認しにいく。これを終了させる事で問題が解決する。
```bash
#画像の一番右のプログラムのパスを指定する
ls -la /home/admin/badlog.py
```
### 次にkillコマンドでPIDを終了させる
```bash
kill {PID}
```

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

killした後にPIDがなくなったか`ps aux |grep {PID}`で確認するとPIDは消えていたので終了させることができた。
### 最後にプログラムが止まったか確認
序盤に使用したSadServersで提供されるコマンドを使ってプログラムが停止しているか確認した。
```bash
tail -f /var/log/bad.log
```
# 終わり方

解決したか確認してもらいます。
仮想サーバーのターミナルからSadServerのウインドウに戻って私の解決策を確認するをクリックする
![スクリーンショット 2024-11-13 21.19.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/f856a64e-4775-493f-e928-7ac108245925.png)

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

![スクリーンショット 2024-11-13 21.19.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535626/0b64b360-d17e-8bd3-eb47-50c202e99420.png)

# まとめ　

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

# 感想

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