五回目の投稿です。今回の内容は、参画中の運用保守案件にて経験した業務の紹介です。
参画から4ヵ月ほど経ち、参画前と比較すると、ずいぶん運用保守業務に対するイメージが
固まってきたなと感じています。本投稿が、特に、初めて運用保守業務に携わる予定のある
方の役に立てば幸いです。
※ 実際に経験した業務内容に一部修正を加えたものを紹介します
◆業務の概要
タイトルにもあるように、今回紹介する業務は、「サーバのプロセス情報を定期的に取得する」
ためのサーバ設定変更作業です。対象サーバはRed Hat系Linuxで、psコマンドをcronで実行する
ことにより、「cronで指定した時間帯におけるリソース消費の激しいプロセスを特定する」という
目標があります。なお、本業務を行うことになった背景は以下のとおりです。
・アクティブ/スタンバイ構成のアプリケーションサーバにて、スタンバイサーバが
毎週日曜日の同時刻帯にダウンしてしまう。アクティブとスタンバイは同じ仕様、
同じ設定であるが、一方のアクティブサーバはダウンしない。スタンバイだけがダウン
してしまう原因を究明するために、両サーバに対し、該当時間帯のプロセスを調査する。
※ ダウン時にダンプされたメモリをインフラ構築サービス事業者に解析してもらったが、
原因究明には至らなかった
◆psコマンドとcronについて
設定変更作業について具体的に説明する前に、psコマンドとcronについて補足します。
・psコマンド
起動中のプロセスの一覧を表示するコマンドです。特定のプロセスをgrepし、killする
といった使い方で馴染み深い方も多いと思います。代表的なオプションを記載します。
- a:サーバ上の全ユーザのプロセスを表示する
- u:プロセスが消費しているリソース(CPUとメモリ)使用情報を表示する
- x:psコマンドを実行中の端末(ターミナル)以外の端末上のプロセスも表示する
コマンド例:$ ps aux | grep <プロセス名>
・cron
UNIX系OSにおける標準的なジョブスケジューラです。処理の手動実行が難しい深夜帯などで、
処理を自動実行させることができます。自動実行の設定方法はいくつかありますが、今は、
/etc/cron.dディレクトリ下に自動実行させたい処理を記載したファイルを作成する方法で
対応します(要root権限)。記載内容については後述しますが、記載ルールについては
参考リンク先が分かりやすいです。
◆サーバ設定変更作業
スタンバイサーバは毎週日曜日23時5分にダウンすることが多いため、この時間の前後30分の
リソース使用情報を1分単位で取得します。また、比較のため、他の曜日の同時間帯のリソース
使用情報も取得することにします。作業の流れと設定内容は以下のとおりです。
① root昇格と事前確認
対象サーバ(アクティブとスタンバイ)にログイン後、次のコマンドを実施します。
$ sudo -s
# id
# uname -n
# ifconfig
② 出力結果ファイル格納用ディレクトリの作成
次のコマンドを実施し、psコマンドの出力結果ファイルの格納先ディレクトリを作成します。
# mkdir /data
③ cronファイルの作成
テキストエディタを用いて、cronファイルを作成します。拡張子なしで、ファイル名は任意です。
# vi /etc/cron.d/resouce_server
※ 次の2行を記入し、保存する
35-59 22 * * * root ps aux | awk '{print strftime("\%Y/\%m/\%d \%H:\%M:\%S"), $0}' >> /data/resouce_$(date +\%Y\%m\%d).log
0-35 23 * * * root ps aux | awk '{print strftime("\%Y/\%m/\%d \%H:\%M:\%S"), $0}' >> /data/resouce_$(date +\%Y\%m\%d).log
▲ ps aux | awk '{print strftime("%Y/%m/%d %H:%M:%S"), $0}' の実行結果イメージ
毎日22時35分から23時35分の間にて、1分間隔でpsコマンドが実行されます。単にpsコマンドの
実行結果を出力するのではなく、各行の先頭にコマンドの実行時間を付けて表示するといった処理
としています。なお、cronで「%」を使う場合は、エスケープ処理が必要です。
④ パーミッションの確認
作成したcronファイルのパーミッションを確認します。一致しない場合は、それぞれ適切になる
ように設定します。
# ls -la /etc/cron.d/resouce_server
アクセス権:-rw-r--r--
所有者:root
所有グループ:root
以上が大まかな作業の流れです。場合によっては、作業証跡をとったり、検証環境でテストしたり
する必要もあるかと思います。これで、/dataディレクトリ下に、リソース使用情報が記載された
ログファイルが日次で作成されるようになりました。また、一定期間のリソース収集が問題なく
完了し、cronジョブが不要になれば、次のコマンドでcronファイルを削除しておきます。
# rm /etc/cron.d/resouce_server
◆感想など
運用保守らしい業務が経験できたなーといった感じです。今後の業務にも応用できそうなので、
cronによるジョブの実行について復習しておきたいと思います。
※ 参画案件においては、現在リソース収集中であり、サーバダウンの原因は特定できていません
◆参考
・https://www.server-memo.net/tips/etc-crontab.html
・https://qiita.com/edward999th/items/381805f8929da078e621
以上です。