Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Datadogを使って メトリクス監視とログ監視を一元管理 @Cloud Native D...
Search
Masaya Aoyama (@amsy810)
July 27, 2018
Technology
11
3.9k
Datadogを使って メトリクス監視とログ監視を一元管理 @Cloud Native Developers JP #7
Datadogを使って メトリクス監視とログ監視を一元管理 @Cloud Native Developers JP #7
Masaya Aoyama (@amsy810)
July 27, 2018
Tweet
Share
More Decks by Masaya Aoyama (@amsy810)
See All by Masaya Aoyama (@amsy810)
Cloud Nativeを支える要素技術・プロダクト・プラクティスの歩み / infrastudy-returns-01-amsy810
masayaaoyama
4
610
KubeCon + CloudNativeCon EU 2024 Overview / k8sjp64-kubecon-overview
masayaaoyama
0
190
KubeCon + CloudNativeCon NA 2023 Sessions for Site Reliability Engineers / amsy810-srett08
masayaaoyama
2
640
KubeCon + CloudNativeCon NA 2023 Overview+Recap for Gateway API Cloud Native Community Japan Kickoff meetup / amsy810_cncj1
masayaaoyama
0
1.8k
Kubernetes as a Service の利用者を支える機能 - Platform Engineering Meetup #1 / pfem01-amsy810-k8s
masayaaoyama
1
2.3k
Kubernetes基盤を自律的に支えるController化の実装Tips / forkwell-202303-amsy810-k8s
masayaaoyama
7
3.7k
CyberAgentにおけるKubernetes as a Serviceの歩みと利用者を支える機能 / cainfra01-amsy810-kubernetes
masayaaoyama
3
1.9k
KubeClarityで始めるSBOM管理 @3-shake SRE Tech Talk / 3-shake-sre-teck-talk-202212
masayaaoyama
0
860
KubeCon + CNCon NA 2022 Overview & Towards Something Better Than CRDs In a Post-Operator World / k8sjp54-kubecon-recap
masayaaoyama
0
910
Other Decks in Technology
See All in Technology
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.1k
Taming you application's environments
salaboy
0
180
いざ、BSC討伐の旅
nikinusu
2
780
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
470
Amazon Personalizeのレコメンドシステム構築、実際何するの?〜大体10分で具体的なイメージをつかむ〜
kniino
1
100
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
250
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
7
800
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
180
Platform Engineering for Software Developers and Architects
syntasso
1
520
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
150
dev 補講: プロダクトセキュリティ / Product security overview
wa6sn
1
2.3k
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
120
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
95
5.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
BBQ
matthewcrist
85
9.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Unsuck your backbone
ammeep
668
57k
A better future with KSS
kneath
238
17k
The Pragmatic Product Professional
lauravandoore
31
6.3k
KATA
mclloyd
29
14k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Become a Pro
speakerdeck
PRO
25
5k
Code Reviewing Like a Champion
maltzj
520
39k
Transcript
Masaya Aoyama CyberAgent adtech studio Datadogを使って メトリクス監視とログ監視を一元管理 @Cloud Native Developers
JP #7 MasayaAoyama @amsy810
連載「今こそ始めよう!Kubernetes 入門」 @ThinkIT Japan Container Days v18.04 Keynote 登壇 Cloud Native
Meetup Tokyo Organizer (+ KubeCon日本人会 + JKD) CKA (CKA-1700-0138-0100)、CKAD (CKAD-1800-0002-0100) OpenStack / Kubernetes Contributor Masaya Aoyama (@amsy810) Infrastructure Engineer
None
None
Datadogとは? Software as a Service(SaaS)の監視ツール Pros: 集約側サーバの運用が不要、マシンリソースが不要 Cons: 金銭的コストが掛かる 1
Host (10 Container included) あたり $15 - $23
Datadogとは? • サーバ増強 • スケーリング • 機能追加 • アップデート •
etc. 人数が少ないチームで見ていると大変
None
None
None
Datadog meets Kubernetes
What is
01 Pluggable Architecture 02 Sophisticated Tag 03 Beautiful Dashboard 04
Intelligent Monitoring & Alerting 05 Other Features
Point 1 Pluggable Architecture
Datadog Agent のアーキテクチャ 外部のプログラムから UDP 経由で データを受けとり、集計する 15 秒間隔でメトリクスを収集。 python
のプログラムが実行される形式。 pluggable。 メモリ上にバッファしてメトリクスを送信 NWの問題で送信できなかった場合は次回送信
Point 2 Sophisticated Tag
監視対象のサーバが沢山 全 体 集 合 prd-sys2-webfront-001 stg-sys1-ctldb-001
各サーバはグループ化 prd stg webfront webkvs 全 体 集 合 ctldb
prd-sys2-webfront-001 stg-sys1-ctldb-001 sys2 sys1
Datadog では各ホストにタグを設定 • env: prd • project: sys2 • role:
webfront • host: prd-sys2-webfront-001 各ホストには複数のタグがついています • prd-app2-webfront-{001, 002, …} ◦ prd, sys2, webfront • stg-app1-ctldb-{001, 002, …} ◦ stg, sys1, ctldb Datadog のタグのおはなし prd stg webfront webkvs 全 体 集 合 ctldb sys2 sys1
各サーバはグループ化 prd stg webfront webkvs 全 体 集 合 ctldb
prd-sys2-webfront-001 stg-sys1-ctldb-001 env: stg project: sys1 role: ctldb host: stg-sys1-ctldb-001 env: prd project: sys2 role: webfront host: prd-sys2-webfront-001 sys2 sys1
例えば… あるメトリクスの 平均値や最大値を取得するとき * (Wildcard) で指定すると、 の範囲で計算される Datadog のタグのおはなし prd stg
全 体 集 合 webfront webkvs ctldb sys2 sys1
例えば… あるメトリクスの 平均値や最大値を取得するとき env: prd で指定すると、 の範囲で計算される Datadog のタグのおはなし prd stg
全 体 集 合 webfront webkvs ctldb sys2 sys1
例えば… あるメトリクスの 平均値や最大値を取得するとき env: prd, project: sys2 で指定すると、 の範囲で計算される Datadog のタグのおはなし
prd stg 全 体 集 合 webfront webkvs ctldb sys2 sys1
例えば… あるメトリクスの 平均値や最大値を取得するとき env: prd, project: sys2, role: webfront で指定すると、 の範囲で計算される
Datadog のタグのおはなし prd stg 全 体 集 合 webfront webkvs ctldb sys2 sys1
例えば… あるメトリクスの 平均値や最大値を取得するとき env: prd, project: sys2, role: webfront, host:
prd-sys2-webfront-001 で指定すると、 の範囲で計算される Datadog のタグのおはなし prd stg 全 体 集 合 webfront webkvs ctldb sys2 sys1
例えば… あるメトリクスの 平均値や最大値を取得するとき env: prd, project: sys2, role: webfront, host:
prd-sys2-webfront-001 で指定すると、 の範囲で計算される Datadog のタグのおはなし prd stg 全 体 集 合 webfront webkvs ctldb sys2 sys1
今後、role 名が被ったりしてくると project も指定してあげる必要があります。 env: prd, project: sys1, role: web-front
≠ env: prd, role: web-front Datadog のタグのおはなし prd stg 全 体 集 合 sys2 webfront webkvs sys1
その他のホストに自動的につけられるタグ • region ◦ ariake, aws • instance-type ◦ s2.medium,
t2.small, etc • availability-zone ◦ ar-diana-1c, ap-northeast-1c, etc • image ◦ ami-000002e, etc • os ◦ CentOS_release_6.6_(final), etc GCP, AWS などでは 自動でタグが付与される
ちなみにメトリクスにもタグがついてます たとえば ディスク使用量 には device tag がついています。 device タグを指定しない場合は、 合算した平均値や最大値が
表示されるので注意
Point 3 Beautiful Dashboard
ダッシュボードを作ろう ・TimeBoard 期間指定可能、タイルレイアウト ・ScreenBoard 最新のデータのみ、レイアウト自由
TimeBoard 期間、日時の指定が可能 タイルサイズの変更も可能 タイルサイズの変更も可能 ひとつのタイルに ひとつのグラフ
ScreenBoard 柔軟なサイズ指定 ある期間の最新データ ScreenBoard は public URL が生成可能
グラフの作り方 グラフの種類 グラフの表示形式 棒グラフ、線グラフ、積立グラフ 対象とする ホスト、メトリクスのタグを指定 平均値、最大値、最小値、合計 などを指定 role 毎にグラフ化
算術処理
Query Value Heatmap Change Hostmap Toplist Distribution
Kubernetes Dashboard
グラフを作ろう メトリクスさえ送っておけばいいので、 広告システム的な外れ値検知にも利用可能 外れ値検知の算術演算 アルゴリズム、パラメータを指定
グラフを作ろう 複合メトリクスの グラフ化 warn/crit のマーカー
グラフを作ろう 複数メトリクスの 計算結果をグラフ化 複数グラフ化 Template Variable の利用
Template Variable の利用 Template Variable を利用することで、絞込用の変数を外出しすることが可能です 後から変更可能。 デフォルト値も設定できるので、 積極的に使ったほうが良さそう。 後から変更可能。
デフォルト値も設定できるので、 積極的に使ったほうが良さそう。
実際にはここに role や env の指定が 入るようになります。 Template Valiable の選択 default
値の指定も可能 * マッチも可能
Point 4 Intelligent Monitor & Alerting
モニタの種類 ――― ホスト死活監視 ――― メトリクス監視 ――― Integration 系監視 ――― プロセス監視 ――― ネットワーク監視(TCP/HTTP) ――― カスタムチェック(自作プラグイン等) ――― イベント監視(ログ監視で利用) ――― 外れ値監視(グループ内の異常なホストの検知)
――― アプリケーションパフォーマンス監視 ――― 複合条件監視(ex. DBのiops が高い && 5xx count が高い) 様々な方式で監視設定を行 うことが可能
メトリクスモニタを作ろう グラフと同じで host, device タグ毎に分割 マルチアラートにすることで 1つのモニタで host * device
毎に監視 たまにデータが抜け落ちたりすることもあ るので、Do not requre に 閾値、変化量、異常値などの 監視タイプが存在 モニタの種類によっては Warning がありません
グラフを作ろう 未来を予知してアラート いつもとの違いを検知してアラート グループ中の違いを検知してアラート
メトリクスモニタを作ろう 過去の推移などから 異常値の割合でアラートを発報する 偏差やアルゴリズムなど設定
メトリクスモニタを作ろう データの欠損が 15 分続いた場合に アラートを投げる アラートメッセージを Markdown で設定 {{HOGE}} で幾つかの変数が利用可能
{{#is_alert}}... などでアラート時のメッセージを設定 @slack-datadog_rs で slack 宛 @pager-duty で pagerduty 発報 @pager-duty-resolve で pagerduty resolve
Process モニタなどでの工夫 複数台構成で一部に障害が即時対応しなくても問題ない場合 env, project, role 毎に グルーピング グループ内で障害の割合で 発報するように
2 種類の異常検知系モニタの違い Outliner モニタ 特定のグループの中で異常な対象を検知する 例: 14 台の中で 1 台だけ異常なホストがいる
Metrics モニタの anomaly alert 普段とくらべて異常な対象を検知する 例: request がいつもと比べて多い
Point 5 Other features
Downtime 機能 いわゆる zabbix のメンテナンスモードです。 対象のモニタ 対象のホスト を指定します。 繰り返しなど。 DB
のバックアップ時の iops などは除外していま す。
HostMap 視覚的に メトリクスの状態を 確認 prd 環境のサーバを project, role で分類し memory
の利用率を 可視化
Infrastructure List aws のインスタンスを role ごとにまとめて表示とか サーバの一覧を簡単に検索 それぞれのサーバにどの Middleware が入っているか等
Metrics Explorer/Summary 一時的にグラフ/メトリクスを 確認したいときなど
notebook 障害時の報告用に。 ある期間・ある日時のグラフを ペラいちにまとめる。 例えば、 パケットドロップ率が上昇して、 レスポンスが落ちていました。 とか。
What is
Kubernetes コンテナを利用する際のプラットフォーム ・コンテナを複数ノードにまたがって分散管理 ・ロードバランシングエンドポイントの提供 Pod Pod Pod Deployment Service Node
Node Node Node とにかくコンテナ使うなら Kubernetes
And now,
Datadog meets Kubernetes
Datadog の Tag ≒ Kubernetes の Label
各サーバはグループ化 prd stg webfront webkvs 全 体 集 合 ctldb
prd-ake-webfront-001 stg-izanami-ctldb-001 env: stg project: sys1 role: ctldb host: stg-sys1-ctldb-001 env: prd project: sys2 role: webfront host: prd-sys2-webfront-001 sys2 sys1
各サーバはグループ化 Cluster A Cluster B Service B Deployment B Deployment
C 全 体 集 合 Service A Deployment A Pod B Pod A cluster: B Service: A deployment: A pod_id: XXX cluster: A service: B deployment: B pod_id: YYY
01 Live Container Monitoring 02 Simplest Installation 03 Kubernetes Monitoring
& Alerting 04 Container Native Metrics 05 Log Management
Point 1 Live Container Monitoring
ライブコンテナモニタリング Containers モニタリングのページでアクティブに調査している間は コンテナ毎に 2 sec 周期でメトリクスが更新され バックグラウンドではメトリクスは 10 sec
の周期で収集され保存されます。 • 柔軟な絞り込みを行なうことが可能 ◦ Deployment に紐づくコンテナ ◦ Service に紐づくコンテナ ◦ Pod に紐づくコンテナ ◦ Namespace 毎 ◦ その他 実際に見てみましょう
ライブコンテナモニタリング
Point 2 Simplest Installation
コンテナ監視 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 Kubernetes 実はたったの 1 コマンドで展開 Helm を使わない場合は様々な設定が必要… • Docker
socket、cgroups、proc 周りをマウント • Kubernetes 用 Service Discovery の有効化 • 必要に応じて RBAC の設定 • Kubernetes add-on の kube-state-metrics の有効化 • auto_conf の設定 $ helm init (クラスタ構築以降 1 度だけ実行すれば OK) $ helm install --name dd-aoyama stable/datadog
Datadog Agent 設定 helm initする際に設定のyamlファイルを指定する事が可能 設定例(公式より) image: repository: datadog/docker-dd-agent tag:
latest daemonset: enabled: true deployment: enabled: false replicas: 1 kubeStateMetrics.enabled: true datadog: apiKey: xxxxxxxxxxxxxxx name: dd-agent logLevel: WARNING tags: env:xxxxx $ helm install -f values.yml --name dd-aoyama stable/datadog # confd: # redisdb.yaml: |- # init_config: # instances: # - host: "name" # port: "6379" resources: requests: cpu: 100m memory: 128Mi limits: cpu: 256m memory: 512Mi autoconf: kubernetes_state.yaml: |- docker_images: - kube-state-metrics init_config: instances: - kube_state_url: http://%%host%%:%%port%%/metrics
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 Datadog Pod から Nginx Pod の監視をしたいとき
サービスディスカバリによる自動判別! nginx.yaml: |- docker_images: - nginx init_config: instances: - nginx_status_url: http://%%host%%:%%port%%/nginx_status
Point 3 Monitoring & Alerting at Kubernetes
Kubernetesでのモニタリング コンテナが正常に起動しているかのチェック • Readiness Probe • Liveness Probe Datadog側ではコンテナのステータスだけを確認する(DD側は設定変更不要) =
個々のコンテナに対してDatadog側では細かいチェックを行わない プロセスの生存性、ポートが空いているか、etc ただし、Latencyのモニタリングなどは必要
Point 4 Container Native Metrics
Kubernetes のメトリクス kubernetes.* または kubernetes_state.* で登録される #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 豊富なタグも付与される Deployment名、Service名、etc
kube-state-metrics による Cluster Level メトリクス kubernetes_state.* のメトリクスは Cluster Level のメトリクス
例えば • Deployment の現在の Pod 数 • 要求 Pod 数 • 停止 Pod 数 • Job の成功数、失敗数 Cluster Level のメトリクスは kubernetes add-on の kube-state-metrics を利用 Helm だと datadog と合わせて自動でインストール
Deployment の Pod 数を監視する例 Pod Pod Pod Deployment: dep-sample Pod
Pod Pod Pod Pod Pod Pod Deployment: dep-sample Pod Pod Pod Pod Unavailable: 0 Desired: 7 Available: 7 Unavailable: 2 Desired: 7 Available: 5
Deployment の Pod 数を監視する例
A/B テストでの Pod 数を監視する例 Pod Pod Pod Deployment: dp1 Service
ab-endpoint
A/B テストでの Pod 数を監視する例 Pod Pod Pod Pod Pod Deployment:
dp1 Deployment: dp2 Service ab-endpoint
A/B テストでの Pod 数を監視する例
Point 5 Log Management
Log Monitoring Datadog v6以降、Agentにログモニタリングの機能が内包 Datadog Agentの機能を有効化することで利用可能 100万行あたり 7 days retention:
$1.27 = 140円 15 days retention: $1.70 = 190円 30 days retention: $2.50 = 280円 データ量で考えるのではなく、行数でカウント =ログデータを有意義に使ってもらいたいとのこと
None
None
まとめ Datadog • Pluggable Architecture • Sophisticated Tag • Beautiful
Dashboard • Intelligent Monitor & Alerting • Other features Container with Datadog • Live Container Monitoring • Simplest Installation • Container Native Metrics • Monitring & Alerting at Kubernetes • Log Management
ご静聴ありがとうございました。