環境
PrometheusはDockerコンテナ上で動かしています。
Dockerホスト:CentOS7.3
Dockerコンテナ:(prometheusサーバ)CentOS7.3
<監視対象(node_exporter)>
Dockerホスト:CentOS7.3
Dockerコンテナ:CentOS7.3 (Webサーバを想定してApacheを起動)
前提条件
root実行を前提とします。
Dockerホスト上のコマンドは#、コンテナ上のコマンドは## とします。
Prometheus はDockerコンテナ上にインストールが完了した状態で、ブラウザでlocalhost:9090 にて自ホストのグラフが見える状態から始めます。こちらの環境構築が終わった状態です。
PrometheusをCentOS7.3&Docker上にインストールしてみた
ソースを落としてmake する方法もありますが、環境に依存してコンパイルできない・・・となると面倒なので、パッケージを落としてきます。
node_exporterのインストール
1.監視対象のサーバに配置するnode_exporter の最新版を確認してください。
https://prometheus.io/download/
今回の環境では、次のものを選択します。
Operating system: linux
Architecture: amd64
★ いろいろなexporter があって、試したくなりますね。
node_export を探して、リンクのアドレスをコピーしてください。
2. まずはPrometheusサーバ自身にインストール
この手順は、監視したいDockerコンテナ上でも同じように実行してください。
<Prometheusコンテナ>
## cd /usr/local/src
## wget <リンクアドレスのコピー>
例)
## wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0-rc.1/node_exporter-0.14.0-rc.1.linux-amd64.tar.gz
## tar zxfv node_exporter-0.14.0-rc.1.linux-amd64.tar.gz
## mv node_exporter-0.14.0-rc.1.linux-amd64 node_exporter
## cd node_exporter
## ./node_exporter &
[1] 151
[root@b1fa06bf6961 node_exporter]# INFO[0000] Starting node_exporter (version=0.14.0-rc.1, branch=master, revision=5a07f4173d97fa0dd307db5bd3c2e6da26a4b16e) source="node_exporter.go:136"
INFO[0000] Build context (go=go1.7.4, user=root@ed143c8f2fcd, date=20170116-16:00:03) source="node_exporter.go:137"
INFO[0000] No directory specified, see --collector.textfile.directory source="textfile.go:57"
INFO[0000] Enabled collectors: source="node_exporter.go:156"
INFO[0000] - entropy source="node_exporter.go:158"
INFO[0000] - netdev source="node_exporter.go:158"
INFO[0000] - stat source="node_exporter.go:158"
INFO[0000] - textfile source="node_exporter.go:158"
INFO[0000] - edac source="node_exporter.go:158"
INFO[0000] - filesystem source="node_exporter.go:158"
INFO[0000] - loadavg source="node_exporter.go:158"
INFO[0000] - netstat source="node_exporter.go:158"
INFO[0000] - sockstat source="node_exporter.go:158"
INFO[0000] - uname source="node_exporter.go:158"
INFO[0000] - zfs source="node_exporter.go:158"
INFO[0000] - conntrack source="node_exporter.go:158"
INFO[0000] - mdadm source="node_exporter.go:158"
INFO[0000] - meminfo source="node_exporter.go:158"
INFO[0000] - vmstat source="node_exporter.go:158"
INFO[0000] - diskstats source="node_exporter.go:158"
INFO[0000] - filefd source="node_exporter.go:158"
INFO[0000] - hwmon source="node_exporter.go:158"
INFO[0000] - time source="node_exporter.go:158"
INFO[0000] Listening on :9100 source="node_exporter.go:176"
なんかいっぱい出てきました。
ビビりながらリターンを押すと、普通にプロンプト戻ってきてます。
※ 同じ手順を監視したいサーバ上で実行してください。
3. 自動起動設定
このままだと、監視対象のサーバを再起動するたびに./node_exporter を実行する羽目になります。
自動起動の設定をしましょう。
<Prometheusコンテナ>
## vi /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
[Service]
Type=simple
ExecStart=/usr/local/src/node_exporter/node_exporter
PrivateTmp=false
[Install]
WantedBy=multi-user.target
## systemctl enable node_exporter.service
Created symlink from /etc/systemd/system/multi-user.target.wants/node_exporter.service to /usr/lib/systemd/system/node_exporter.service.
<Dockerホスト上>
# iptables -A INPUT -p tcp -m tcp --dport 59100 -j ACCEPT
★ なんと!port 9100/tcp がjetdirect、port 9100/udp hp-pdl-datastr と被ってました。
そのためprometheus で利用する port を変更(被らない場合は、以降59100を9100に置き換えてください)
★ docker run する際に-p 59100:9100 を忘れずに実行してください。
※ 同じ手順を監視したいサーバ上でも実行してください。
PrometheusServerの設定
4.prometheus.yml の編集(末尾に追記)
<Prometheusコンテナ>
## vi /etc/prometheus/prometheus.yml
- job_name: 'node_exporter'
- targets: ['localhost:9100', '****.com:59100']
labels:
group: 'node_exporter'
## systemctl restart prometheus.service
あとがき
今回は、node_exporter in Container でしたが、別投稿でnode_exporter in DockerHost 版を記載します。
コンテナの拡張を考えるとDockerホストにnode_exporterを置くほうがいいですね。