LoginSignup
3
2

More than 5 years have passed since last update.

promethusでDocker監視(node_exporter in Container)

Last updated at Posted at 2017-02-20

環境

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を置くほうがいいですね。

参考

長生村本郷Engineers'Blog

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2