環境
クラウド上の仮想マシンで実行してます(意識する必要ないですね)
DockerホストのOS: CentOS 7.3
Prometheusをインストールするコンテナ:centos:latest(CentOS7.3)
prometheusのインストール方法:パッケージ展開(Dockerイメージを使いません)
firewalldは、maskして、iptables-services を別途インストールしています。
前提条件
仮想マシン上にDockerをインストールした状態から始めます。
引っかかりようのないところは、コマンドの羅列となります。
root実行を前提とします。
Dockerホスト上のコマンドは#、コンテナ上のコマンドは## とします。
1.コンテナ作成
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
2.GO言語のインストール
こちらで最新版SourceのURLをダウンロード。(2017/2/10時点 go1.7.5)
The Go Programming Language DownLoads
<コンテナ>
## 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 ★ バージョン確認
3.Prometheusインストール
PrometheusもGO言語同様、最新版SourceのURLをコピーします。
GitHub/Prometheus
<コンテナ>
## 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
4.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
5.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
6.自動起動・自動停止設定
毎回コンテナの起動のたびに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 ★ 開始
7.穴あけ作業
確認の前に穴を空けましょう。
・クラウドのファイアウォールに穴を開けます。
・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 ★ 再度確認
8.最終起動
<Dockerホスト>
# docker rm prometheus01
# docker run -d -t --privileged --name prometheus01 -v /data/prometheus:/prometheus -p 9090:9090 prometheus /sbin/init
9.ブラウザからの確認
ブラウザを立ち上げて「http://DockerホストのIPアドレス:9090」 でPrometheusの画面が表示されるか確認します。
あとがき
Dockerに乗せることで、若干どこをマウントさせるかの設計が必要ですね。
次は、Prometheusのオートスケール監視とコンテナ監視について検証します。
参考
参考サイト : かたつむりくちゃさんのブログページ