前回の続きです。
前回は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にアクセスします。
Eventが表示されます。なお、このEventをもとにアラートを投げたり、ということもできるようです。
Process Collection
kubernetesと直接関係ないですが、Process Collectionで特定のプロセスが使用しているCPU、メモリ、I/O、スレッド数などのリソース使用状況をチェックできます。
Process Collectionを有効にするには、datadog-values.yamlを以下のように変更します。
datadog: processAgent: enabled: true processCollection: true
適用は先ほどと同じなので割愛。
Datadogの管理画面から、Infrastructure -> Processes にアクセスします。
プロセスごとに表示されます。
上の例では分布図的な表示になっていますが、TImeseriesをクリックすると時系列で確認できます。
Prometheus Check
Prometheus形式で公開されているmetricsをDatadog agentが収集し、Datadogのmetricsで扱うというものです。nginx-ingressでやってみましょう。
nginx-ingressのvalues.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を開きます。
nginx-ingressのmetricsが取れていますね。
適当なmetricを見てみるとちゃんとグラフで表示されます。
ちなみに、prometheus checkのメトリクスはcustom metrics扱いになるようなので、コストの確認が必要になりそうです。
まとめ
他にもできることはまだまだありそうです。次回はcluster agentとかあとlogging(有料だけど)をやってみたいと思います。
参考にさせていただいたサイト
ありがとうございました!