汎用分析環境の構築(準備編)

# 目的

___いつ、何時、だれの挑戦でも受ける。(by アントニオ猪木)___

データサイエンティストたるもの、当然このような矜持をもって業務にあたる必要があると考える。(嘘)
実際のところ、客先を含めたさまざまな環境で、いろいろな分析を実行することが多いので、楽に仕事ができるように共通基盤となるような環境を作っておきたいと思います。
今回はベースとなる下回りの環境構築を実施。

# 本記事のゴール

* Windows10上にVagrantで複数のVM(Ubuntu18.04)を立ち上げる
* Ansibleを利用してdockerをインストール
* リソース状況を調べるためにprometheus+grafanaでリソース状況を可視化する(導入はAnsible)

# 対象バージョン

* ホストOS：Windows10
* ゲストOS：Ubuntu18.04.1
* Virtualbox：5.2
* Vagrant：2.1.5
* Ansible: 2.7.0
* prometheus：2.1.0
* grafana：5.3.0

# 作業内容

## Vagrantでの複数VM立ち上げ

Vagrant with Virtualboxで以下の環境を作る。

![for_testing.png](https://qiita-image-store.s3.amazonaws.com/0/298078/869d3837-1aae-339d-b492-63b9411342fe.png)

こういう時、Vagrantのネットワーク設定は本当に楽にできるので助かる。具体的なVagrantfileの内容は以下の通り

```ruby:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"

  config.vm.provider "virtualbox" do |vb|
    # Customize the amount of memory on the VM:
    vb.memory = "1024"
  end

  config.vm.define :master do | master |
    master.vm.hostname = "master"
    master.vm.network :private_network, ip: "192.168.32.10"
    master.vm.network :private_network, ip: "192.168.33.10", virtualbox__intnet: "intnet"
  end

  config.vm.define :worker001 do | worker001 |
    worker001.vm.hostname = "worker001"
    worker001.vm.network :private_network, ip: "192.168.33.20", virtualbox__intnet: "intnet"
  end
end
```

master、workerを同時に上げたい場合は、Vagrantfileと同じディレクトリで以下を実行。

```
λ vagrant up
```

master、workerのいずれかを上げたい場合は、以下を実行。

```
λ vagrant up master
もしくは
λ vagrant up worker001
```

## Ansibleでの監視環境構築

以降の作業はmasterからAnsibleにより実施。

```
λ vagrant ssh master
# 内部通信用の鍵を作成
vagrant@master:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): /home/vagrant/.ssh/ansible-keys
略
vagrant@master:~$ cat ~/.ssh/ansible-keys.pub >> ~/.ssh/authorized_keys
```

同様にworker001側にもvagrant@master:~/.ssh/ansible-keys.pubの内容をvagrant@worker001:~/.ssh/authorized_keysに追記する。(not上書き)

パスワードなしでmaster -> worker001にSSHログインできることを確認。

```
vagrant@master:~$ ssh -i ~/.ssh/ansible-keys vagrant@192.168.33.20
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-36-generic x86_64)

vagrant@master:~$ ssh -i ~/.ssh/ansible-keys vagrant@192.168.33.10
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-36-generic x86_64)
```

リポジトリの向き先を理研に変えつつ、pipで新しめのAnsibleを導入。

```
vagrant@master:~$ sudo sed -i.bak -e "s%http://archive.ubuntu.com/ubuntu%http://ftp.riken.go.jp/Linux/ubuntu%g" /etc/apt/sources.list
vagrant@master:~$ sudo apt update
vagrant@master:~$ sudo apt install python3-pip
vagrant@master:~$ sudo pip3 install ansible
```

ansible-playbookは以下。
https://github.com/ken223/ansible-docker-analyzer

## Ansible実行

```
vagrant@master:~$ git clone https://github.com/ken223/ansible-docker-analyzer.git
vagrant@master:~$ cd ansible-docker-analyzer/
vagrant@master:~/ansible-docker-analyzer$ sh deploy.sh
```

## 動作確認

ホスト側で以下のURLにアクセス
http://192.168.32.10:3000

admin/adminでログイン後、データソースの選択画面で以下を選択

![スクリーンショット (9).png](https://qiita-image-store.s3.amazonaws.com/0/298078/966d87d0-70a2-ee49-ce14-5566a5e97bc6.png)

Dashboardは以下から適当なものを選ぶことになる。

https://grafana.com/dashboards

先ほどのansibleを実行するとworker001とmasterにprometheus-node-exporterが入っているので、"Host Stats - Prometheus Node Exporter - pre 0.16.0"を選択。

Dashboardの"+Import"ボタンを押すとインポート画面になる。
Grafana.com Dashboardに貼り付ける内容は"718"だった。

追加したダッシュボードを見ると以下のようになっているはず。

![スクリーンショット (11).png](https://qiita-image-store.s3.amazonaws.com/0/298078/af919ce3-da71-20b7-ca93-f040819b8e0b.png)