Containerの監視について
CA Base 公式勉強会
Datadog 勉強会 Part 2 (2018/12/14)
青山 真也
アドテク本部 Central Infrastructure Agency
青山 真也 (Masaya Aoyama)
@amsy810
普段の主な仕事↓
世界で 138 番目
https://adtech.cyberagent.io/techblog/
archives/3086
みなさん コンテナの監視 ってどうしていますか?
まだコンテナ監視で疲弊してるの?
CNCF の Cloud Native Landscape
をご存知ですか?
本日お話すること
Datadog によるコンテナの監視の基礎
ライブコンテナモニタリング
Kubernetes クラスタレベルの監視
auto_conf によるサービスディスカバリ
プロセス監視や死活監視
百聞は一見にしかず
一度画像を見てテンションを上げましょう。
ライブコンテナモニタリング
コンテナ毎に 2 sec 周期でメトリクスが更新
柔軟な絞り込みを行なうことが可能
● Deployment に紐づくコンテナ
● Service に紐づくコンテナ
● Pod に紐づくコンテナ
● Namespace 毎
● その他
コンテナ監視 on Docker
コンテナの監視を行なう方法は2種類
1. コンテナホスト上で datadog-agent プロセスを起動する
○ /etc/dd-agent/conf.d/docker*.yaml を設定する必要がある
2. コンテナホスト上に datadog/docker-dd-agent コンテナを起動する
○ docker コンテナに特定のディレクトリ以下を ReadOnly で渡す必要がある
コンテナ監視 on Docker
コンテナの監視を行なう方法は2種類
1. コンテナホスト上で datadog-agent プロセスを起動する
○ /etc/dd-agent/conf.d/docker*.yaml を設定する必要がある
2. コンテナホスト上に datadog/docker-dd-agent コンテナを起動する
○ docker コンテナに特定のディレクトリ以下を ReadOnly で渡す必要がある
コンテナ監視 on Docker
コンテナからホスト上の proc, cgroupsや docker からメトリクスを収集
● /proc/*
● /sys/fs/cgroup/*
● /var/run/docker.sock
環境変数として ServiceDiscovery の設定・タグ・API Key の設定を埋め込む
コンテナ監視 on Docker
各コンテナ毎に基本的なメトリクス(docker.*)
  CPU、Memory、Disk I/O、Network I/O
各メトリクスにはデフォルトで様々なタグが付与される
  #container_name:sample-container
  #container_id:57786a376934
  #host:dockerhost01
  #docker_version:17.06.0.ce
Swarm mode だと更に追加タグ
  #docker_swarm:active(active ノードのみモニタリング等も可能)
  #swarm_service:sample-service
コンテナ監視 on Kubernetes
Kubernetes の監視を行なう場合、上記の Docker 監視に + αで設定が必要…
実はたったの 1 コマンドで展開
+α の設定例
● Kubernetes 用 Service Discovery の有効化
● 必要に応じて RBAC の設定
● Kubernetes add-on の kube-state-metrics の有効化
● auto_conf の設定
コンテナ監視 on Kubernetes
$ helm init (クラスタ構築以降 1 度だけ実行すれば OK)
$ helm install --name dd-aoyama stable/datadog
Kubernetes のメトリクス
kubernetes.* または kubernetes_state.* で登録される
                豊富なタグも付与される
Deployment名、Service名、etc
#kube_service:service-sample
#kube_deployment:dep-sample
#kube_replica_set:dep-sample-2627731247
#kube_namespace:default
#kube_pod:dep-sample-2627731247-79414
#kube_pod_ip:10.100.76.12
#kube_master_version:1.7.8
#kubelet_version:1.7.8
kube-state-metrics による Cluster Level メトリクス
kubernetes_state.* のメトリクスは Cluster Level のメトリクス
例えば
Deployment の現在の Pod 数、要求 Pod 数、停止 Pod 数など
Job の成功数、失敗数
Cluster Level のメトリクスは kubernetes add-on の kube-state-metrics が必要
Helm だと datadog と合わせて一発でインストール可能
kube-state-metrics による Cluster Level メトリクス
A/B テストの監視例
ここまでの話はブログにも載っています
「Datadog のライブコンテナモニタリングとアラートを使って
 賢く監視問題を解決する」
 https://adtech.cyberagent.io/techblog/archives/3353
auto_conf を使った Service Discovery
Datadog Pod から Nginx Pod の監視をしたいとき
いちいち Pod の IP を設定するの…?
                コンテナのライフサイクルは短いけど…
/etc/dd-agent/conf.d/nginx.conf
init_config:
instances:
- nginx_status_url: http://10.0.0.1:80/nginx_status
- nginx_status_url: http://10.0.0.2:80/nginx_status
- nginx_status_url: http://10.0.0.3:80/nginx_status
auto_conf を使った Service Discovery
/etc/dd-agent/conf.d/auto_conf/nginx.conf
docker_images:
- nginx
init_config:
instances:
- nginx_status_url: http://%%host%%:%%port%%/nginx_status
Datadog Pod から Nginx Pod の監視をしたいとき
サービスディスカバリによる自動判別!
コンテナの世界に限って言えば、
プロセス監視しなきゃ!
は必要ないと思います。
プロセス監視については
readiness / liveness prove を
使いましょう
ちなみに
将来的には Service Mesh のグラフ化も欲しいなと思ったり
auto_conf が Docker イメージ名以外で出来たら嬉しい
弊社のオンプレコンテナ基盤でも利用中!
「GKE 互換のオンプレコンテナ基盤 AKE (Adtech Container Engine)」
https://developers.cyberagent.co.jp/blog/archives/12058/
「Kubernetes をいじって Hardware LoadBalancer で “type LoadBalancer” を実装」
https://adtech.cyberagent.io/techblog/archives/3127
「オンプレでも GKE Like な Ingress を使うために 自作 Ingress Controller を実装」
https://adtech.cyberagent.io/techblog/archives/3758

Datadog による Container の監視について