当記事はケーススタディの連載となっています。目次は【こちら】です。
最新のソースコードは【GitHub】で公開中です。
サーバの責務はこちらで確認ください。
##1.nmon設定概要
サーバの状態監視をおこなうnmonをインストールする。
nmonはCPU利用率やメモリ使用率を監視できる便利なツール。
##2.playbookファイルの相関
##3.playbook(site.yml)
${ANSIBLE_HOME}/site.yml
メインとなるplaybook(site.yml)参照
##4.nmon設定のplaybook(/operations/1001_nmon.yml)
${ANSIBLE_HOME}/operations/1001_nmon.yml
playbook中のコメントの補足に関しては「5.補足説明」を参照。
# ===================
# nmon設定(nmon.yml)
# ===================
- hosts: all
sudo: no
vars_files:
- ../vars/filedir.yml
remote_user: root
tasks:
# ===================
# nmonコマンドはyumを使わず解凍して使用する。
# 冪等性を保つため既に/bin/nmonがある場合は何もしない。
# ===================
- name: nmonの存在確認(以下すべて存在してない場合のみ実行)
stat: path=/bin/nmon #【4.A:statモジュールでファイルの状態を取得する】
register: nmonext #【4.B:registerモジュールではnmonextという名前の変数にstatで取得したファイル状態を設定する】
# ===================
# nmonコマンドのtar.gzはダウンロード済であることとする。
# 既にダウンロードしたnmonはNFSサーバをマウントした
# /var/opt/data/nfs/配下に配置済。
# tarコマンドにて解凍して /bin/配下にコピー。
# ===================
- name: 展開
command: tar zxvf /var/opt/data/nfs/os/installer/centos7.tar.gz -C /bin #【4.C:commandはshellモジュール同様にOSコマンドを実行できる】
when: not nmonext.stat.exists #【4.D:not XXXXXX.stat.existsは(4.B)で設定した状態でファイルが存在しない場合にTUREとなる当該タスクが実行】
# ===================
# nmonコマンドの名前が展開しただけではnmon_x86_64_centos7
# となる為nmonに変更。
# ===================
- name: 名前を変更
command: mv /bin/nmon_x86_64_centos7 /bin/nmon
when: not nmonext.stat.exists
# ===================
# パーミッションとオーナをroot:root 755に変更する。
# ===================
- name: パーミッションを変更
file:
group=root mode=0755 owner=root path=/bin/nmon state=file
when: not nmonext.stat.exists
##5.補足説明
nmonはリアルタイムにサーバを監視できるが、nmon結果をログ出力し、NMONVisualizerにて取り込む事により、後から容易に分析が可能。
長時間動作したときにのみサーバに問題が発生する場合など非常に役に立つ。
今まで導入したことがない方は是非利用をおすすめする。
「4.nmon設定のplaybook(/operations/1001_nmon.yml)」内のコメント4.A~4.Dについて。
【4.A】ファイルやディレクトリ等の情報を取得するのはstatモジュールが便利。
またstatモジュールではファイルの存在確認以外でも使用できる。(今回はファイルの存在確認で利用する。)
- statモジュール
名前 | 内容 | 補足 |
---|---|---|
path | statsモジュールで確認をする為のパス |
statモジュールではregisterモジュールに指定したファイル名経由で操作する。
statで登録した変数のプロパティは以下の通り。その他にも多数あり。
http://docs.ansible.com/ansible/stat_module.html
プロパティ名 | 内容 | 例 |
---|---|---|
exists | 存在すればtrue | register varsだった場合 vars.stat.exists |
mode | 0777等のパーミッションが返る | register varsだった場合 vars.stat.mode |
pw_name | ユーザー名が返る | register varsだった場合 vars.stat.pw_name |
islnk | シンボリックリンクだとtrue | register varsだった場合 vars.stat.islnk |
isdir | ディレクトリだとtrue | register varsだった場合 vars.stat.isdir |
【4.B】regsiterモジュールを使用してstatの結果を保存する。
register: nmonext
nmonextに【4.A】で取得したstat結果を保存する。
【4.C】commandモジュールはshellモジュールと同様にshellを実行する。
command: tar zxvf /var/opt/data/nfs/os/installer/centos7.tar.gz -C /bin
-Cを指定した場合はcdをした後に実行する。
【4.D】whenモジュールはタスクを実行する判定式を記述する。
whenの結果がtrueであればタスクを実行する。
when: not nmonext.stat.exists
nmonext.stat.existsは【4.A]で指定したパスにファイルが存在した場合、当該タスクが実行される。
##6.補足の補足
ここまで書いてなんだが、nmonはepelリポジトリよりyumにて取得できる。
今回はnmonをmanagetermにてhttps://osdn.jp/projects/sfnet_nmon/releases/よりダウンロードした物をサーバに転送し、解凍して利用したが、yumモジュールの方が冪等性保証してくれて楽かと思う。
次回は「214.Rbenvを使用してRuby環境をインストール・配置する」について。
連載の目次は【こちら】です。