LoginSignup
6
2

More than 3 years have passed since last update.

【SRE/監視】DatadogでKubernetesを監視する ~入門編~

Last updated at Posted at 2020-02-15

なぜ監視するのか?

自分たちのサービスが動いているかどうか知りたいに尽きると思います。
今回はGKEにDatadogを入れて、どう監視すべきなのかについて書いていきたいと思います。
主に下記の記事を参考に書いています。
Monitoring Kubernetes with Datadog | Datadog

Datadogが提唱するモニタリング理論

下記3つのデータを集めるべきだと、Datadogは提唱しています。

  1. Work Metrics
  2. Resource Metrics
  3. Events

Work Metrics

自分のシステムが正常に働いている度合いを示すメトリクスのことを指します。

Resource Metrics

正常じゃない場合に何が原因かを示すメトリクスのことを指します。
具体的には、CPU, memory, I/O, Networkなどです。
How to monitor Docker resource metrics

Events

Resource Metricsで、正常でない原因がわかったとしても、現状だとどの事象でそれが生じたのかはわかりません。
その事象を明らかにするのが、Eventsです。
具体的には、デプロイとかになります。

どうやって監視するのか

では上3つを使用してどのように監視するのかというと、再帰的に上記3つを監視していくことになります。

例えば、何かアラートがSlackに送られるとします。
そのアラートは、Work Metrics、次にResource Metrics、その次にEvents見てみようといった感じです。
これを下記の図のように再帰的に行っていくことで、最終的に原因にたどり着く形となっています。

image.png
Monitoring Kubernetes with Datadog | Datadogより引用

Kubernetesの動いているとは

Kubernetes のモニタリングは、コンテナのモニタリングと、クラスタのモニタリングの2つがあります。
ここでは、クラスタのモニタリングに焦点を当てます。

クラスタのモニタリング

Kubernetesを使用するにあたって、自分のサービスが動いているとはどういうことか?
結論、PodとServiceが動いていれば、サービスが動いていると定義できそうです。
ただ、Kubernetesの場合、Podが問題があっても、トップレベルシステムが存在しないため、Kubernetes が原因なのかを簡単に切り分けられません。

そこで、Kuberentes クラスタ自体のモニタリングとして、Kubernetes を構成する各コンポーネントを監視します。

KubernetesのWork Metrics

kubelet
下記図のように、各ノードで実行されるエージェントのことを指します。

image.png
Monitoring Kubernetes with Datadog | Datadogより引用
Kubernetesのコンポーネント - Kubernetes
Kubelet

これを監視することで以下の監視ができます。

  • ping による死活監視
  • Docker daemon が動いているかどうか
  • kubelet の syncloop (current state を desired state に近づけるための処理を kubelet は繰り返し行っている)

etcd

一貫性、高可用性を持ったキーバリューストアで、Kubernetesの全てのクラスター情報の保存場所として利用されています。
Kubernetesのコンポーネント - Kubernetesより引用

kube-system
Datadogの記事には監視する必要があると書かれているんだけど、これを監視する理由がわかっていない......

主なResource Metrics[おまけ]

dockerコンテナ

sources:docker
dockerコンテナのcreate/start/stop/destroy イベントを表します。
Monitor Docker with Datadog

docker.containers.running
イメージでタグ付けされたこのホストで実行されているコンテナの数

CPU

docker.cpu.user
CPUがこのコンテナのプロセスの直接制御下にあり、正規化されていない(非正規化)時間の割合。パーセンテージで表す。

システムコール

docker.cpu.system
CPUがこのコンテナのプロセスに代わってシステムコールを実行している時間の割合、非正規化。パーセンテージで表す。
straceコマンドの使い方 - Qiita

Memory

docker.mem.rss
コンテナのプロセスに属する非キャッシュメモリの量。スタック、ヒープなどに使用されます。バイトで表す。

docker.mem.swap
コンテナが現在使用しているスワップの量。バイトで表す。

docker.mem.cache
ディスクからデータをキャッシュするために使用されているメモリの量(たとえば、ブロックデバイス上のブロックに正確に関連付けることができるメモリの内容)。バイトで表す。

Network

docker.net.bytes_rcvd
ネットワークから受信した1秒あたりのバイト数。バイト数で表す。

rcvd

受信したパケット数(秒単位)を監視します。
Network Rcvd/sec

docker.net.bytes_sent
ネットワークに毎秒送信されるバイト。 バイトとして表示

I/O

docker.io.read_bytes
コンテナのプロセスによってディスクから読み取られた1秒あたりのバイト数。バイトとして表示

docker.io.write_bytes
コンテナーのプロセスによってディスクに1秒あたりに書き込まれたバイト数。バイトとして表示

メトリクス一覧

Docker 収集データ
Datadog で Docker コンテナをモニタリングする

その他参考にした記事

Kubernetes: 構成コンポーネント一覧 - Qiita
Kubernetesで監視を行う際の注意点 - Qiita
Dockerコンテナのメトリクスを監視する
Datadog で Docker コンテナをモニタリングする - Qiita
CPU使用率は間違っている | Yakst

6
2
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
6
2