Slide 1

Slide 1 text

Containerの監視について CA Base 公式勉強会 Datadog 勉強会 Part 2 (2018/12/14) 青山 真也 アドテク本部 Central Infrastructure Agency

Slide 2

Slide 2 text

青山 真也 (Masaya Aoyama) @amsy810 普段の主な仕事↓ 世界で 138 番目 https://adtech.cyberagent.io/techblog/ archives/3086

Slide 3

Slide 3 text

みなさん コンテナの監視 ってどうしていますか?

Slide 4

Slide 4 text

まだコンテナ監視で疲弊してるの?

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

CNCF の Cloud Native Landscape をご存知ですか?

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

本日お話すること Datadog によるコンテナの監視の基礎 ライブコンテナモニタリング Kubernetes クラスタレベルの監視 auto_conf によるサービスディスカバリ プロセス監視や死活監視

Slide 11

Slide 11 text

百聞は一見にしかず 一度画像を見てテンションを上げましょう。

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

ライブコンテナモニタリング コンテナ毎に 2 sec 周期でメトリクスが更新 柔軟な絞り込みを行なうことが可能 ● Deployment に紐づくコンテナ ● Service に紐づくコンテナ ● Pod に紐づくコンテナ ● Namespace 毎 ● その他

Slide 14

Slide 14 text

コンテナ監視 on Docker コンテナの監視を行なう方法は2種類 1. コンテナホスト上で datadog-agent プロセスを起動する ○ /etc/dd-agent/conf.d/docker*.yaml を設定する必要がある 2. コンテナホスト上に datadog/docker-dd-agent コンテナを起動する ○ docker コンテナに特定のディレクトリ以下を ReadOnly で渡す必要がある

Slide 15

Slide 15 text

コンテナ監視 on Docker コンテナの監視を行なう方法は2種類 1. コンテナホスト上で datadog-agent プロセスを起動する ○ /etc/dd-agent/conf.d/docker*.yaml を設定する必要がある 2. コンテナホスト上に datadog/docker-dd-agent コンテナを起動する ○ docker コンテナに特定のディレクトリ以下を ReadOnly で渡す必要がある

Slide 16

Slide 16 text

コンテナ監視 on Docker コンテナからホスト上の proc, cgroupsや docker からメトリクスを収集 ● /proc/* ● /sys/fs/cgroup/* ● /var/run/docker.sock 環境変数として ServiceDiscovery の設定・タグ・API Key の設定を埋め込む

Slide 17

Slide 17 text

コンテナ監視 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

Slide 18

Slide 18 text

コンテナ監視 on Kubernetes Kubernetes の監視を行なう場合、上記の Docker 監視に + αで設定が必要…

Slide 19

Slide 19 text

実はたったの 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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

kube-state-metrics による Cluster Level メトリクス kubernetes_state.* のメトリクスは Cluster Level のメトリクス 例えば Deployment の現在の Pod 数、要求 Pod 数、停止 Pod 数など Job の成功数、失敗数 Cluster Level のメトリクスは kubernetes add-on の kube-state-metrics が必要 Helm だと datadog と合わせて一発でインストール可能

Slide 22

Slide 22 text

kube-state-metrics による Cluster Level メトリクス

Slide 23

Slide 23 text

A/B テストの監視例

Slide 24

Slide 24 text

ここまでの話はブログにも載っています 「Datadog のライブコンテナモニタリングとアラートを使って  賢く監視問題を解決する」  https://adtech.cyberagent.io/techblog/archives/3353

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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 の監視をしたいとき サービスディスカバリによる自動判別!

Slide 27

Slide 27 text

コンテナの世界に限って言えば、 プロセス監視しなきゃ! は必要ないと思います。

Slide 28

Slide 28 text

プロセス監視については readiness / liveness prove を 使いましょう

Slide 29

Slide 29 text

ちなみに 将来的には Service Mesh のグラフ化も欲しいなと思ったり auto_conf が Docker イメージ名以外で出来たら嬉しい

Slide 30

Slide 30 text

弊社のオンプレコンテナ基盤でも利用中! 「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