MiracleJobLogo
エンジニアのエンジニアによるエンジニアのためのサイト
News 07/25 おすすめ情報に 『 【案件】Azure AD関連の認証設計/azureの基本設計 』 を追加しました。
会員登録するとキャリア診断やサイトに参加することができます。
あなたにおすすめな技術情報、資格、仕事などをお知らせします。

無料会員登録


パスワードを忘れた場合
LINEで送る
MiracleJobBanaLeft1
MiracleJobBanaLeft2


【業務紹介】サーバのプロセス情報を定期的に取得する
profile-img
投稿者: ktamoiさん
投稿日:2023/02/27 19:41
更新日:
like-img
分類
技術
テクノロジー
Unix系サーバ
キャリア
テクニカルサポート
投稿内容


五回目の投稿です。今回の内容は、参画中の運用保守案件にて経験した業務の紹介です。

参画から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



以上です。

コメント


MiracleJobBanaRight1
MiracleJobBanaRight2
MiracleJobBanaRight3