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

<b><font color="#ff6633">当記事はケーススタディの連載となっています。目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f
)です。</font></b>
<b><font color="#ff6633">最新のソースコードは[【GitHub】](https://github.com/csfactorygihubblog001/blogansible)で公開中です。</font></b>
サーバの責務は<b>[こちら](http://qiita.com/CsFactoryitter/items/032cc339048e52ee3586)</b>で確認ください。

##1.nmon設定概要
サーバの状態監視をおこなうnmonをインストールする。
nmonはCPU利用率やメモリ使用率を監視できる便利なツール。

![image](https://qiita-image-store.s3.amazonaws.com/0/98085/bebce88e-7101-73af-ef12-e96cd93e14ca.png)

##2.playbookファイルの相関

![image](https://qiita-image-store.s3.amazonaws.com/0/98085/a7f2e470-9e65-3ec7-b349-80aa1a359a39.png)

##3.playbook(site.yml)
${ANSIBLE_HOME}/site.yml
[メインとなるplaybook(site.yml)](http://qiita.com/CsFactoryitter/items/3112c6d504d3b5a58011#3%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A8%E3%81%AA%E3%82%8Bplaybooksiteyml)参照

##4.nmon設定のplaybook(/operations/1001_nmon.yml)

${ANSIBLE_HOME}/operations/1001_nmon.yml

playbook中のコメントの補足に関しては「[5.補足説明](#5%E8%A3%9C%E8%B6%B3%E8%AA%AC%E6%98%8E)」を参照。

```yaml:
# ===================
# 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](http://nmonvisualizer.github.io/nmonvisualizer/)にて取り込む事により、後から容易に分析が可能。
長時間動作したときにのみサーバに問題が発生する場合など非常に役に立つ。
今まで導入したことがない方は是非利用をおすすめする。

「[4.nmon設定のplaybook(/operations/1001_nmon.yml)](#4nmon%E8%A8%AD%E5%AE%9A%E3%81%AEplaybookoperations1001_nmonyml)」内のコメント4.A～4.Dについて。

【4.A】ファイルやディレクトリ等の情報を取得するのはstatモジュールが便利。
またstatモジュールではファイルの存在確認以外でも使用できる。（今回はファイルの存在確認で利用する。）

<dl>
<dt><font color="#0066ff">statモジュール</font></dt>
</dl>

|名前|内容|補足|
|:------|:------|:------|
|path|statsモジュールで確認をする為のパス||

statモジュールではregisterモジュールに指定したファイル名経由で操作する。
statで登録した変数のプロパティは以下の通り。その他にも多数あり。
http://docs.ansible.com/ansible/stat_module.html

|プロパティ名|内容|例|
|:------|:------|:------|
|exists|存在すればtrue|register varsだった場合<br>vars.stat.exists|
|mode|0777等のパーミッションが返る|register varsだった場合<br>vars.stat.mode|
|pw_name|ユーザー名が返る|register varsだった場合<br>vars.stat.pw_name|
|islnk|シンボリックリンクだとtrue|register varsだった場合<br>vars.stat.islnk|
|isdir|ディレクトリだとtrue|register varsだった場合<br>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 

<b>-C</b>を指定した場合は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/](https://osdn.jp/projects/sfnet_nmon/releases/)よりダウンロードした物をサーバに転送し、解凍して利用したが、yumモジュールの方が冪等性保証してくれて楽かと思う。
<br>
次回は「[214.Rbenvを使用してRuby環境をインストール・配置する](http://qiita.com/CsFactoryitter/items/0dbbe54aef0b787cb8f2)」について。

<b><font color="#ff6633">連載の目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f)です。</font></b>