障害対応


忘れないようにメモ

## 一次対応の心構え

1. 操作ログを残す

2. 作業は落ち着いて、冷静に、感に頼らず、事実とデータを見る。

3. 自説にこだわらない、見切り、諦めを素早く、思い・期待通りじゃなくてもがっかりするのは後で。

4. 担当者を責めない。判断謝りを責めない。結果を責めない。でも手抜きは絶対許さない。

5. 水分や甘いものを摂る。

6. 大丈夫は、大丈夫じゃないサイン


`当たり前のことを、冷静にきちんとやることが大事`


1. ログ

ssh www.example.com の入出力をwww.example.com.20150920_11:10:05.logに記録する。


```
script -q -c "ssh www.example.com"  www.example.com.20150920_11:10:05.log
```

wrapper化する
ファイル名: lssh

```
#!/bin/bash
NOW=$(date +%Y%m%d_%H%M%S)
exec script -q -c "ssh $1" $1.$NOW.log
```

```
chmod a+x lssh
./lssh localhost
```


## 状況確認コマンド

障害発生時の状況を確認するためのコマンド

システムの稼働時間、ログインユーザ数、ロードアベレージ

```
w
```

入力結果

```
 17:21:04 up  9:53,  1 user,  load average: 0.06, 0.03, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
shunsuke pts/0    10.211.55.2      17:16    0.00s  0.04s  0.00s w
```

ネットワーク接続数、接続元、接続先、実行プロセスをPID
※実行プロセスとPIDを確認するためにはrootユーザーになる必要がある。

```
ssh -lnp
```

入力結果

```
State       Recv-Q Send-Q                                                          Local Address:Port                                                            Peer Address:Port 
LISTEN      0      128                                                                        :::22                                                                        :::*      users:(("sshd",1177,4))
LISTEN      0      128                                                                         *:22                                                                         *:*      users:(("sshd",1177,3))
LISTEN      0      10                                                                  127.0.0.1:25                                                                         *:*      users:(("sendmail",1830,4))
LISTEN      0      128                                                                 127.0.0.1:9050                                                                       *:*      users:(("php-fpm",1850,7),("php-fpm",1851,0),("php-fpm",1852,0),("php-fpm",1853,0),("php-fpm",1854,0),("php-fpm",1855,0))
LISTEN      0      50                                                                          *:3306                                                                       *:*      users:(("mysqld",1789,13))
LISTEN      0      128                                                                         *:6379                                                                       *:*      users:(("redis-server",1879,5))
LISTEN      0      128                                                                        :::6379                                                                      :::*      users:(("redis-server",1879,4))
LISTEN      0      128                                                                         *:80                                                                         *:*      users:(("nginx",1868,6),("nginx",1869,6),("nginx",1870,6),("nginx",1871,6),("nginx",1872,6))

```


起動しているプロセスの確認

```
ps auxf
```

ディスク容量を確認

```
df -h
```

CPU,利用率、メモリ利用量、CPU使用率が高いプロセスを確認

```
top -b -d 1 -n 1
```

メモリ利用量が大きいプロセスを確認

```
top -b -d 1 -n 1 -a
```

CPU使用率、ネットワーク利用量、ディスクI/O量、ページング量と推移

```
dstat -taf 1 10
```

入力結果

```
----system---- -------cpu0-usage--------------cpu1-usage--------------cpu2-usage--------------cpu3-usage------ --dsk/sda-----dsk/sr0-----dsk/sr1-- net/docker0---net/eth0->
  date/time   |usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq| read  writ: read  writ: read  writ| recv  send: recv  send>
23-07 17:31:56|  0   0  99   0   0   0:  0   0 100   0   0   0:  0   0 100   0   0   0:  0   0 100   0   0   0|8527B   10k:   4B    0 :   4B    0 |   0     0 :   0     0 >
23-07 17:31:57|  0   0 100   0   0   0:  0   0 100   0   0   0:  0   0 100   0   0   0:  0   0 100   0   0   0|   0     0 :   0     0 :   0     0 |   0     0 :  66B  146B>
23-07 17:31:58|  1   1  98   0   0   0:  0   0 100   0   0   0:  0   0 100   0   0   0:  0   0 100   0   0   0|   0     0 :   0     0 :   0     0 |   0     0 :  66B 1860B>
23-07 17:31:59|  0   0 100   0   0   0:  0   0 100   0   0   0:  0   0 100   0   0   0:  0   0 100   0   0   0|   0     0 :   0     0 :   0     0 |   0     0 :  66B  626B>
23-07 17:32:00|  0   0 100   0   0   0:  1   0  99   0   0   0:  0   0 100   0   0   0:  0   0 100   0   0   0|   0     0 :   0     0 :   0     0 |   0     0 :  66B  626B>
```

 SQLプロセス確認

 ```
 mysqladmin -uroot processlist --verbose
 ```

 もし原因がわからない場合は、　`strace` などで実行中のプロセスにアタッチも可能。

strace からプロセスを起動させるのではなく、デーモンのようにすでに実行されているプロセスの動作を strace で確認するには -p オプションを使用します

 ```
 strace -p [pid]
 ```
  
  
 <br>

## 参考文献

* Webエンジニアが知っておきたいインフラの基本