promethusでDocker監視(node_exporter in Container)

# 環境
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上にインストールしてみた](http://qiita.com/miwato/items/db455d8e8bd1cc3c5642)

ソースを落としてmake する方法もありますが、環境に依存してコンパイルできない・・・となると面倒なので、パッケージを落としてきます。

# node_exporterのインストール
１．監視対象のサーバに配置するnode_exporter の最新版を確認してください。
https://prometheus.io/download/

今回の環境では、次のものを選択します。
Operating system: linux
Architecture: amd64    
★ いろいろなexporter があって、試したくなりますね。

node_export を探して、リンクのアドレスをコピーしてください。

２． まずは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"
```

なんかいっぱい出てきました。
ビビりながらリターンを押すと、普通にプロンプト戻ってきてます。

※ 同じ手順を監視したいサーバ上で実行してください。


３． 自動起動設定
このままだと、監視対象のサーバを再起動するたびに./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の設定
４．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](http://kenzo0107.hatenablog.com/entry/2017/01/25/154144)