PrometheusをCentOS7.3＆Docker上にインストールしてみた

# 環境
  クラウド上の仮想マシンで実行してます（意識する必要ないですね）
  DockerホストのOS： CentOS 7.3
  Prometheusをインストールするコンテナ：centos:latest(CentOS7.3)
  prometheusのインストール方法：パッケージ展開（Dockerイメージを使いません）
  firewalldは、maskして、iptables-services を別途インストールしています。

# 前提条件
仮想マシン上にDockerをインストールした状態から始めます。
引っかかりようのないところは、コマンドの羅列となります。
root実行を前提とします。
Dockerホスト上のコマンドは#、コンテナ上のコマンドは## とします。

# １．コンテナ作成
Prometheus 用のコンテナを作成します。

```
<Dockerホスト>
# docker pull centos
# docker run -d -t --privileged --name prometheus01 centos:latest /sbin/init
# docker exec -it prometheus01 /bin/bash

<コンテナ>
## yum -y update
## yum -y install wget git gcc make net-tools
## echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock    ★ 最低限は設定しましょう。
## rm -f /etc/localtime
## ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```
# ２．GO言語のインストール
こちらで最新版SourceのURLをダウンロード。(2017/2/10時点 go1.7.5)
[The Go Programming Language DownLoads](https://golang.org/dl/)

```
<コンテナ>
## cd /usr/local      ★ /usr/local/go に展開させたいので移動場所はここです。
## wget -P /usr/local/src https://storage.googleapis.com/golang/go1.7.5.linux-amd64.tar.gz ★ 大文字Pです。
## tar zxfv src/go1.7.5.linux-amd64.tar.gz    ★ てーーんかい！
## mkdir /usr/local/go/work
## echo "export GOROOT=/usr/local/go" >> ~/.bashrc      
## echo "export GOPATH=/usr/local/go/work" >> ~/.bashrc
★ GOROOTとGOPATHを分けることで、この警告をなくすことができます。
 `warning: GOPATH set to GOROOT (/usr/local/go) has no effect`

## echo "PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc
## source ~/.bashrc   ★ 早速読み込み
## go version         ★ バージョン確認
```

# ３．Prometheusインストール
PrometheusもGO言語同様、最新版SourceのURLをコピーします。
[GitHub/Prometheus](https://github.com/prometheus/prometheus/releases/)

```
<コンテナ>
## wget -P /usr/local/src https://github.com/prometheus/prometheus/releases/download/v1.5.2/prometheus-1.5.2.linux-amd64.tar.gz
## tar zxfv src/prometheus-1.5.2.linux-amd64.tar.gz
## ln -fs /usr/local/prometheus-1.5.2.linux-amd64/prometheus /usr/bin/prometheus
## ln -fs /usr/local/prometheus-1.5.2.linux-amd64/promtool /usr/bin/promtool
```

# ４．Prometheus 用データ領域の作成
これから監視設定を行っていきますが、その前に監視設定した情報や収集データは保持したいですね。（また作りたくない）
ということで、Dockerホスト上にデータを置きましょ。

```
★ 一旦現時点のコンテナイメージを作ります。
<コンテナ>
## exit

<Dockerホスト>  
# docker commit prometheus01 prometheus_img   ★ prometheus という名前でコミット
# docker images                               ★ 確認・・・まず一安心
# docker stop prometheus01                    ★ 一旦、今のコンテナは停止
# docker rm prometheus01                      ★ ポイ！
# mkdir -p /data/prometheus/etc               ★ ここに格納することにします


★ コンテナ上では、/prometheus にマウントさせます
★ 一緒にPrometheus で利用する9090ポートを繋げます
★ 甦れ!!Prometheus!!
# docker run -d -t --privileged --name prometheus01 -v /data/prometheus:/prometheus -p 9090:9090 prometheus_img /sbin/init  
# docker exec -it prometheus01 /bin/bash      ★ 突撃！

<コンテナ>
★ /etc/prometheusのデータは、Dockerホスト上に保存します
## ln -fs /prometheus/etc /etc/prometheus    

★ Consoleライブラリをリンク
## ln -fs /usr/local/prometheus-1.5.2.linux-amd64/console_libraries /etc/prometheus/console_libraries

```

# ５．Prometheus設定ファイルの配置
コンテナにログインしたら、/prometheusがDockerホストと繋がっているので、次は設定ファイルを配置していきます。

```
<コンテナ>
★ 設定ファイルの配置
## cd /etc/prometheus
## wget https://raw.githubusercontent.com/prometheus/prometheus/master/documentation/examples/prometheus.yml
## vi /etc/default/prometheus       ★ OPTIONSファイルを新規作成
OPTIONS="-config.file=/etc/prometheus/prometheus.yml -storage.local.path=/var/lib/prometheus -web.console.libraries=/etc/prometheus/console_libraries -web.console.templates=/etc/prometheus/consoles"

★ 必要なDirは作成します
## mkdir /etc/prometheus/consoles

★ storage.local.path もリンクを張りましょう
## mkdir /prometheus/var
## ln -fs /prometheus/var /var/lib/prometheus

★ 設定ファイルの構文チェック
## promtool check-config /etc/prometheus/prometheus.yml
```

# ６．自動起動・自動停止設定
毎回コンテナの起動のたびにPrometheusを起動するのも嫌なので、自動起動の設定を行います。

```
<コンテナ>
## vi /usr/lib/systemd/system/prometheus.service      ★ 新規作成
[Unit]
Description=Prometheus Service
After=syslog.target prometheus.service
 
[Service]
Type=simple
EnvironmentFile=-/etc/default/prometheus
ExecStart=/usr/bin/prometheus $OPTIONS
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

## systemctl enable prometheus           ★ 登録
## systemctl start prometheus            ★ 開始
```

# ７．穴あけ作業
確認の前に穴を空けましょう。
・クラウドのファイアウォールに穴を開けます。
・Dockerホストのiptablesに穴を空けます。

```
<コンテナ>
## exit

<Dockerホスト>
# docker commit prometheus01 prometheus_img
# docker stop prometheus01
# iptables -A INPUT -p tcp -m tcp --dport 9090 -j ACCEPT
# service iptables save
# systemctl restart iptables
# cat /etc/sysconfig/iptables  ★ 確認
# systemctl restart docker     ★ Docker部分が消えたときには、dockerを再起動します。
# cat /etc/sysconfig/iptables  ★ 再度確認
```

# ８．最終起動

```
<Dockerホスト>
# docker rm prometheus01
# docker run -d -t --privileged --name prometheus01 -v /data/prometheus:/prometheus -p 9090:9090 prometheus /sbin/init
```

# ９．ブラウザからの確認
ブラウザを立ち上げて「http://DockerホストのIPアドレス:9090」 でPrometheusの画面が表示されるか確認します。


# あとがき
Dockerに乗せることで、若干どこをマウントさせるかの設計が必要ですね。
次は、Prometheusのオートスケール監視とコンテナ監視について検証します。


# 参考
参考サイト : [かたつむりくちゃさんのブログページ](http://riku-cha.blog.jp/archives/49387551.html)