"また死んでる!!"コンテナの死活管理とセキュリティー
- RancherOSで本格的なサーバーを構築で少し触ってみたのでメモ
経緯
- 最近dockerが人気であるが、死活管理をしっかりしてないと ”コンテナが死んでた!!” というケースはよくある
- "slack"とかに「死んだぜぇ!」っと通知が来ればすぐに対応できそうだし、かっこいい
- 今のdockerサーバーの状態がカッコよくグラフで出ると、かっこいい
コンテナの死活管理
死活管理してくれるライブラリ
- DATADOG(おすすめ)
- Prometheus
DATADOG
- DatadogとはITシステムのモニタリングクラウドサービスです。少し作業を行うだけでご自身のITシステムをモニタリングすることができます。
- これを見て惚れました Datadogの本当の魅力とは
早速、導入してみる
- 無料版と有料版があるが、今回は無料版を使う
- 公式DATADOGでアカウントを作成
- add hostの画面で「Docker」とあるがAPIKeyのみをコピーしておく
○Rancherの場合
- rancherの管理画面から「CATALOG」->「DATADOG」を選択
- APIKeyの入力
- 「Launch」すれば終了!あら、かんたん。
○普通のDockerの場合(docker-compose)
- docker-compose.yml
datadog-init:
labels:
io.rancher.scheduler.global: 'true'
io.rancher.container.pull_image: always
io.rancher.container.start_once: 'true'
command:
- /bin/true
image: janeczku/datadog-rancher-init:latest
volumes:
- /opt/rancher
net: none
datadog-agent:
environment:
API_KEY: xxxxxxxxxxxxxxxxxxxxxxxxxx
DOGSTATSD_ONLY: 'false'
labels:
io.rancher.scheduler.global: 'true'
io.rancher.sidekicks: datadog-init
command:
- supervisord
- -n
- -c
- /etc/dd-agent/supervisor.conf
entrypoint:
- /opt/rancher/entrypoint.sh
image: datadog/docker-dd-agent:11.0.570
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /proc/:/host/proc/:ro
- /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
volumes_from:
- datadog-init
$ docker-compose up
早速、アクセスしてみると
- このイベントの画面では、コンテナが作られたよーとかのイベントが時系列で表示されるっぽい
dockerとslackのintegrationをインストールする
dashboardにdockerが追加されたので確認してみる
dockerのグラフを覗いてみる
- すんげぇきれい!!!!
「本題」コンテナが死んだらslackに通知を送るように設定する
slack側での設定
- 左上の設定できそうなメニューから「Apps&integrations」を選択
- 「DATADOG」を検索して「Add Configrations」
- 「Webhook URL」をコピーしておく
datadog側での設定
- 先ほどのURLと通知したいチャンネルを入力
- とりあえずOK
アラートの基準値の設定
- 「Monitors」->「new Monitor」->「Metric」を選択
- runコンテナーが1より下がるとslackに通知がなるように設定してみた
- 通知がくるとこんな感じ
- これでひとまず、 「死んでるやん!!」 が早めにわかるようになった
Prometheus
- Prometheus とは 一般的な監視ツールのように、データの収集、数値の表示、グラフの表示、アラートを出す機能があります。それだけでなく、Prometheus は独自のデータモデルを持ち、クエリ言語を使って時系列データの評価やグラフ化を行えます。
早速、導入してみる
○Rancherの場合
- rancherの管理画面から「CATALOG」->「Prometheus」を選択
- 「Launch」すれば終了!あら、かんたん。
○普通のDockerの場合(docker-compose)
- docker-compose.yml
graf-db:
command:
- cat
tty: true
image: infinityworks/graf-db:08
links:
- prometheus:prometheus
volumes:
- /var/lib/grafana/
prometheus-rancher-exporter:
labels:
io.rancher.container.create_agent: 'true'
io.rancher.container.agent.role: environment
tty: true
image: infinityworks/prometheus-rancher-exporter:04
prometheus:
ports:
- 9090:9090/tcp
labels:
io.rancher.sidekicks: prom-conf
command:
- -alertmanager.url=http://alertmanager:9093
- -config.file=/etc/prom-conf/prometheus.yml
- -storage.local.path=/prometheus
- -web.console.libraries=/etc/prometheus/console_libraries
- -web.console.templates=/etc/prometheus/consoles
tty: true
image: prom/prometheus:0.18.0
links:
- ranch-eye:ranch-eye
- node-exporter:node-exporter
volumes_from:
- prom-conf
grafana:
ports:
- 3000:3000/tcp
labels:
io.rancher.sidekicks: graf-db
tty: true
image: grafana/grafana:3.0.1
links:
- prometheus:prometheus
volumes_from:
- graf-db
prom-conf:
tty: true
image: infinityworks/prom-conf:11
links:
- ranch-eye:ranch-eye
- node-exporter:node-exporter
volumes:
- /etc/prom-conf/
influxdb:
ports:
- 2003:2003/tcp
- 8083:8083/tcp
- 8086:8086/tcp
- 8090:8090/tcp
environment:
GRAPHITE_BINDING: :2003
GRAPHITE_DB: rancher
PRE_CREATE_DB: grafana;prometheus;rancher
image: tutum/influxdb:0.10
ranch-eye:
ports:
- 9104:9104/tcp
labels:
io.rancher.scheduler.global: 'true'
io.rancher.container.dns: 'true'
tty: true
image: infinityworks/ranch-eye:03
stdin_open: true
net: host
node-exporter:
labels:
io.rancher.scheduler.global: 'true'
tty: true
image: prom/node-exporter:latest
stdin_open: true
$ docker-compose up
アクセスしてみる(3000番ポートのほう)
-
外部には公開したくないので.ssh/configにlocalFowardして3000番を転送する
-
container statusはこんな感じ
- Host Statusはなんかかっこいい!
特定のコンテナが死んだ時に通知を送る
- なんとなくぐぐっただけだけど、通知はどうにかすればできるっぽいけど、面倒くさそう
- Docker で Sensu + Graphite + Grafana 環境構築
- http://docs.grafana.org/tutorials/hubot_howto/
- 今回は見送ります
コンテナのセキュリティー
コンテナのセキュリティーを警告してくれる
- rancher-bench-security
- docker-bench-security
導入してみる
○rancherの人
- rancher-bench-security
- 「CATALOG」->「rancher-bench-security」
- 「Launch」でおわり
○dockerの人
- docker-bench-security
docker run -it --net host --pid host --cap-add audit_control \
-v /var/lib:/var/lib \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/lib/systemd:/usr/lib/systemd \
-v /etc:/etc --label docker_bench_security \
docker/docker-bench-security
アクセスしてみる
- これも外部には公開したくないので、bench_securityコンテナの80ポートを適当に8888ポートにしてローカルフォワードしてwebからアクセスする
- こんな感じで出る(githubのサンプル)
- このwarmを修正しとかんといかんみたいやね
まとめ
-
こんなわけで、なんとなく死活管理とセキュリティーについては大丈夫かなぁと
-
前々から気になってた”Vuls”は、RancherOSが対応してないらしくて諦めましたが、対応したら使いたい
-
その他にもRancherで使えるライブラリはたくさんあるし、今も増えているのでたくさん使っていきたい