ある日お客様から最近EC2のCPUのアラートが多いから調べてほしいと依頼があった。
いったい誰がCPUをそんな使ってるんや。
とにかく見てみよう。
まずドキュメントを確認してみると
インターネット -> CloudFront -> ELB -> EC2(Linux)
こういう構成の模様。
EC2のLinuxのCPUでアラートが出て気になる。
AWSにはCloudWatchという雲を見るかのような監視システムがある。
CPUのリソースグラフを確認した。
CPUUtilizationをクリック。
確かにオーストラリアの山ウルルみたいにグイっとそびえ立つ山のようなグラフの形状している。
topコマンドで楽したい
調査系のタスクは時間がかかるし精神力が削がれる。
楽して結果を残したい。
どのプロセスがCPUのリソースを使っているかサーバでコマンドをポチポチ叩きたくない。
そこで
以下のシェルを作成した。
#!/bin/bash
# 実行ディレクトリ
DIR=$(cd $(dirname $0); pwd)
# toplog
TOP_RESULT=$DIR/top_result.csv
trap ‘exit’ 2
#「-b」オプションで、バッチモードを指定
#「-d」オプションで、更新間隔を指定(単位:秒)
#「-n」オプションで、回数を指定
top -b -d 60 -n 1000000000 | awk ‘{print strftime(“%y/%m/%d %H:%M:%S”), $0} {fflush() }’ >> $TOP_RESULT
ポイントはawkコマンドで時間を出力されているところ。
これでアラートの発報時間でgrepできる。
数日後、同様のCPUのアラートが上がった
アラートが上がった時刻を見てログファイルの時刻と照らし合わせみる。
httpdのCPU使用率が高く上位を占めていた。
同時刻のApacheのアクセスログを確認。
wp-login.phpへのアクセスがめっちゃ多くなっていた。
あと、stealも高い。
stealってなんなん。。
調べてみるとEC2のm3.mediumはCPUの負荷が上がると制限をかける模様。
まとめ
- リソースグラフを確認しCPUの使用率が上昇している時間帯を確認する。
- なぜCPU使用率が上昇しているかTopコマンドで確認する。
- プロセスが起因の場合プロセスのログを見る。
お客様に状況を伝えて一旦完了。
CloudFrontで制限かけれそう。
EC2のリソースタイプをより良いものに変える方法でも良さそう。
実験したら共有しようと思う。
コメントを残す