kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

KubernetesをDatadogで監視してみる②

f:id:kun432:20200512212802p:plain

前回の続きです。

前回はkubernetesクラスタにdatadog agentを入れて、一通り監視ができることを確認しました。今回はもうちょっと突っ込んでDatadogでできることを試していきたいと思います。

  • Event Collection
  • Process Collection
  • Prometheus Check

Event Collection

kubernetesにはeventというものがあり、クラスタで起きた事象などが流れます。例えばdeploymentを変更してみます。

$ kubectl scale deployment bootcamp --replicas=4
$ kubectl describe deployments bootcamp
・・・
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  11s   deployment-controller  Scaled up replica set bootcamp-7465f56 to 4
$ kubectl get event
LAST SEEN   TYPE     REASON              OBJECT                        MESSAGE
94s         Normal   Scheduled           pod/bootcamp-7465f56-8qt26    Successfully assigned default/bootcamp-7465f56-8qt26 to worker-2
92s         Normal   Pulled              pod/bootcamp-7465f56-8qt26    Container image "gcr.io/google-samples/kubernetes-bootcamp:v1" already present on machine
92s         Normal   Created             pod/bootcamp-7465f56-8qt26    Created container bootcamp
91s         Normal   Started             pod/bootcamp-7465f56-8qt26    Started container bootcamp
94s         Normal   Scheduled           pod/bootcamp-7465f56-wwq4h    Successfully assigned default/bootcamp-7465f56-wwq4h to worker-1
92s         Normal   Pulled              pod/bootcamp-7465f56-wwq4h    Container image "gcr.io/google-samples/kubernetes-bootcamp:v1" already present on machine
92s         Normal   Created             pod/bootcamp-7465f56-wwq4h    Created container bootcamp
91s         Normal   Started             pod/bootcamp-7465f56-wwq4h    Started container bootcamp
94s         Normal   SuccessfulCreate    replicaset/bootcamp-7465f56   Created pod: bootcamp-7465f56-wwq4h
94s         Normal   SuccessfulCreate    replicaset/bootcamp-7465f56   Created pod: bootcamp-7465f56-8qt26
94s         Normal   ScalingReplicaSet   deployment/bootcamp           Scaled up replica set bootcamp-7465f56 to 4

こんな感じでeventを確認できます、これをDatadog側に送信することができます。

Event Collectionを有効にするには、datadog-values.yamlを以下のように変更します。

datadog:
  collectEvents: true
  leaderElection: true
agents:
  rbac:
    create: true

適用します。

$ helm upgrade datadog-monitoring -f datadog-values.yaml --set datadog.apiKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX stable/datadog

Datadogの管理画面から、Eventにアクセスします。

f:id:kun432:20200521235907p:plain

Eventが表示されます。なお、このEventをもとにアラートを投げたり、ということもできるようです。

f:id:kun432:20200521235324p:plain

Process Collection

kubernetesと直接関係ないですが、Process Collectionで特定のプロセスが使用しているCPU、メモリ、I/O、スレッド数などのリソース使用状況をチェックできます。

Process Collectionを有効にするには、datadog-values.yamlを以下のように変更します。

datadog:
  processAgent:
    enabled: true
    processCollection: true

適用は先ほどと同じなので割愛。

Datadogの管理画面から、Infrastructure -> Processes にアクセスします。

f:id:kun432:20200522115744p:plain

プロセスごとに表示されます。

f:id:kun432:20200521235533p:plain

上の例では分布図的な表示になっていますが、TImeseriesをクリックすると時系列で確認できます。

f:id:kun432:20200521235630p:plain

Prometheus Check

Prometheus形式で公開されているmetricsをDatadog agentが収集し、Datadogのmetricsで扱うというものです。nginx-ingressでやってみましょう。

nginx-ingressvalues.yamlをダウンロードして、以下のように修正します。

・・・
   podAnnotations:
       ad.datadoghq.com/nginx-ingress-controller.check_names: |
         ["prometheus"]
       ad.datadoghq.com/nginx-ingress-controller.init_configs: |
         [{}]
       ad.datadoghq.com/nginx-ingress-controller.instances: |
         [
           {
             "prometheus_url":"http://%%host%%:10254/metrics",
             "namespace": "nginx-ingress",
             "metrics": [ "nginx_*"]
           }
         ]
・・・
  metrics:
    port: 10254
    enabled: true

では、nginx-ingressをインストールします。

$ helm install nginx-ingress -f values.yaml stable/nginx-ingress

Datadog Agentが正しく認識しているかを確認します。nginx-ingress-controllerのpodが動いているのと同じworker node上のdatadog agentのpodに対してagent statusを実行します。

$ kubectl get node
NAME                                                     READY   STATUS    RESTARTS   AGE     IP                NODE       NOMINATED NODE   READINESS GATES
datadog-monitoring-bn546                                 2/2     Running   0          31m     192.168.226.95    worker-1   <none>           <none>
datadog-monitoring-cluster-agent-646cdfbc49-t8bjx        1/1     Running   1          2d14h   192.168.133.217   worker-2   <none>           <none>
datadog-monitoring-dtx8w                                 2/2     Running   0          31m     192.168.219.86    master     <none>           <none>
datadog-monitoring-kube-state-metrics-75bc6f498c-74wfb   1/1     Running   3          9d      192.168.226.89    worker-1   <none>           <none>
datadog-monitoring-qqtbw                                 2/2     Running   0          31m     192.168.133.222   worker-2   <none>           <none>
nginx-ingress-controller-7d897ff55b-kzhl4                1/1     Running   0          20m     192.168.133.223   worker-2   <none>           <none>
nginx-ingress-default-backend-7c868597f4-6p758           1/1     Running   0          60m     192.168.133.221   worker-2   <none>           <none>

nginx-ingress-controllerはworker-2で動いてますので、datadog-monitoring-qqtbw になります。

$ kubectl exec -ti datadog-monitoring-qqtbw -- agent status
・・・
    prometheus (3.2.1)
    ------------------
      Instance ID: prometheus:nginx-ingress:ce0abeb3d96ccee5 [OK]
      Configuration Source: kubelet:docker://9a84cbe0b3e306da0cc2affca3afd8259fec449f249a8efbd57b9194068664cb
      Total Runs: 79
      Metric Samples: Last Run: 20, Total: 1,580
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 79
      Average Execution Time : 21ms
      Last Execution Date : 2020-05-21 17:28:43.000000 UTC
      Last Successful Execution Date : 2020-05-21 17:28:43.000000 UTC

認識しているようです。Datadog管理画面のMetrics -> Explorerを開きます。

f:id:kun432:20200522024724p:plain

nginx-ingressのmetricsが取れていますね。

f:id:kun432:20200522024828p:plain

適当なmetricを見てみるとちゃんとグラフで表示されます。

f:id:kun432:20200522025006p:plain

ちなみに、prometheus checkのメトリクスはcustom metrics扱いになるようなので、コストの確認が必要になりそうです。

まとめ

他にもできることはまだまだありそうです。次回はcluster agentとかあとlogging(有料だけど)をやってみたいと思います。

参考にさせていただいたサイト

ありがとうございました!

docs.datadoghq.com

creators-note.chatwork.com

qiita.com