Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

環境

クラウド上の仮想マシンで実行してます(意識する必要ないですね)
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のオートスケール監視とコンテナ監視について検証します。

参考

参考サイト : かたつむりくちゃさんのブログページ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした