79
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Docker】"また死んでる!!"コンテナの死活管理とセキュリティー

Last updated at Posted at 2016-06-25

"また死んでる!!"コンテナの死活管理とセキュリティー

rancher-docker.png

経緯

  • 最近dockerが人気であるが、死活管理をしっかりしてないと ”コンテナが死んでた!!” というケースはよくある
  • "slack"とかに「死んだぜぇ!」っと通知が来ればすぐに対応できそうだし、かっこいい
  • 今のdockerサーバーの状態がカッコよくグラフで出ると、かっこいい

コンテナの死活管理

死活管理してくれるライブラリ

  • DATADOG(おすすめ)
  • Prometheus

DATADOG

community-datadog.png

  • DatadogとはITシステムのモニタリングクラウドサービスです。少し作業を行うだけでご自身のITシステムをモニタリングすることができます。
  • これを見て惚れました Datadogの本当の魅力とは

早速、導入してみる

  • 無料版と有料版があるが、今回は無料版を使う
  • 公式DATADOGでアカウントを作成
  • add hostの画面で「Docker」とあるがAPIKeyのみをコピーしておく

Screen Shot 2016-06-25 at 10.33.11.png

○Rancherの場合
  • rancherの管理画面から「CATALOG」->「DATADOG」を選択
Screen Shot 2016-06-25 at 10.25.02.png
  • 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

早速、アクセスしてみると

Screen Shot 2016-06-25 at 10.38.22.png
  • このイベントの画面では、コンテナが作られたよーとかのイベントが時系列で表示されるっぽい

dockerとslackのintegrationをインストールする

Screen Shot 2016-06-25 at 10.41.09.png

dashboardにdockerが追加されたので確認してみる

Screen Shot 2016-06-25 at 10.43.47.png

dockerのグラフを覗いてみる

Screen Shot 2016-06-25 at 10.44.51.png

  • すんげぇきれい!!!!

「本題」コンテナが死んだらslackに通知を送るように設定する

slack側での設定
  • 左上の設定できそうなメニューから「Apps&integrations」を選択
  • 「DATADOG」を検索して「Add Configrations」
  • 「Webhook URL」をコピーしておく
datadog側での設定
  • 先ほどのURLと通知したいチャンネルを入力
Screen Shot 2016-06-25 at 10.49.33.png
  • とりあえずOK
アラートの基準値の設定
  • 「Monitors」->「new Monitor」->「Metric」を選択

Screen Shot 2016-06-25 at 10.55.56.png

  • runコンテナーが1より下がるとslackに通知がなるように設定してみた
Screen Shot 2016-06-25 at 10.58.58.png
  • 通知がくるとこんな感じ
Screen Shot 2016-06-25 at 11.00.44.png
  • これでひとまず、 「死んでるやん!!」 が早めにわかるようになった

Prometheus

community-Prometheus.svg.png

  • Prometheus とは 一般的な監視ツールのように、データの収集、数値の表示、グラフの表示、アラートを出す機能があります。それだけでなく、Prometheus は独自のデータモデルを持ち、クエリ言語を使って時系列データの評価やグラフ化を行えます。

早速、導入してみる

○Rancherの場合
  • rancherの管理画面から「CATALOG」->「Prometheus」を選択
Screen Shot 2016-06-25 at 09.55.22.png
  • 「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はこんな感じ

Screen Shot 2016-06-25 at 10.03.46.png
  • Host Statusはなんかかっこいい!
Screen Shot 2016-06-25 at 10.07.16.png

特定のコンテナが死んだ時に通知を送る

コンテナのセキュリティー

community-rancher-bench-security.png

コンテナのセキュリティーを警告してくれる

  • rancher-bench-security
  • docker-bench-security

導入してみる

○rancherの人

  • rancher-bench-security
  • 「CATALOG」->「rancher-bench-security」
Screen Shot 2016-06-25 at 11.11.02.png
  • 「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からアクセスする

benchmark_log.png

  • こんな感じで出る(githubのサンプル)
  • このwarmを修正しとかんといかんみたいやね

まとめ

  • こんなわけで、なんとなく死活管理とセキュリティーについては大丈夫かなぁと

  • 前々から気になってた”Vuls”は、RancherOSが対応してないらしくて諦めましたが、対応したら使いたい

  • その他にもRancherで使えるライブラリはたくさんあるし、今も増えているのでたくさん使っていきたい

79
75
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
79
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?