メモ:Ubuntu 14.04のLXC上でPrometheusを動かしてDNATする

PrometheusはSoundCloudがスポンサーになっているモニタリングツール。これをLXC/LXDで動かしたときのメモ。

prometheus.io

u1というコンテナが10.0.3.101で動いているとする。

Prometheusのインストール

ドキュメントによれば、バイナリを持ってくるか、自分でビルドするか。今回はさくっと試したいだけなので、ビルド済みのバイナリをダウンロードして使う。

lxc execにはsshと同じ感覚で標準入力が渡せるので、アーカイブは標準入力から渡して、それをtarで展開する。(lxc fileでもいいけど)

$ wget https://github.com/prometheus/prometheus/releases/download/0.16.1/prometheus-0.16.1.linux-amd64.tar.gz
$ cat prometheus-0.16.1.linux-amd64.tar.gz | lxc exec -- u1 tar xzf -

設定ファイルのサンプルを取ってくる。

$ lxc exec -- u1 wget https://github.com/prometheus/prometheus/raw/master/documentation/examples/prometheus.yml

で、バイナリを実行する。

$ lxc exec -- u1 prometheus-0.16.1.linux-amd64/prometheus
prometheus, version 0.16.1 (branch: release-0.16.1, revision: 968ee35)
  build user:       fabianreinartz@macpro
  build date:       20151016-13:19:57
  go version:       1.5
INFO[0000] Loading configuration file prometheus.yml     source=main.go:196
INFO[0000] Loading series map and head chunks...         source=storage.go:262
INFO[0000] 0 series loaded.                              source=storage.go:267
INFO[0000] Starting target manager...                    source=targetmanager.go:114
INFO[0000] Listening on :9090                            source=web.go:223

これで10.0.3.101:9090でPrometheusが動いていることになる。

curl http://u1:9090/graphでHTMLが返ってくればたぶんOK。

UFWの設定

NAT用にiptablesを使うけど、単純にUFWを有効にしてしまうと通信がつながらなくなったりするので、必要最低限度の設定を入れておく。とりあえずsshのポートとPrometheusのポート(どうせポートフォワードするから9090じゃなくてもいいけど)が許可されてればいい。

$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing
$ sudo ufw allow ssh
$ sudo ufw allow 9090

あと、dnsmasqと通信するのに53番ポートも空けないといけないみたい。これよく分からない。

$ sudo ufw allow to 10.0.1.3 port 53 proto udp

/etc/ufw/before.rulesのいちばん上に以下のような設定を書く。

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp --dport 9090 -j DNAT --to-destination 10.0.3.101
COMMIT

おわったらUFWを有効に

$ sudo ufw enable

これでポートフォワードされるので、http://(ホストのIP):9090/でPrometheusの画面が表示されるはず。