Edited at

【連載01】213.nmonのインストール・配置

More than 3 years have passed since last update.

当記事はケーススタディの連載となっています。目次は【こちら】です。

最新のソースコードは【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環境をインストール・配置する」について。

連載の目次は【こちら】です。