Data Dog

パフォーマンス監視

何かを改善しようとした場合、パフォーマンスを数値化し、その内容をもとに改善案を考えて行動することが、基本的な取り組み方になります。 そして、いかに現状を測定可能な状態にし数値化可能な指標を設定するか、という事が取り組みの第一歩になります。

Datadogについて

f:id:vasilyjp:20180511175551p:plain

ご存知の方も多いと思いますが、DatadogはNewYorkを拠点にサービスを展開しているいわゆるMonitoring SaaSです。日本においてはMackerelがMonitoring SaaSとしては有名ですが、Datadogはグローバルで使用ユーザーが多いサービスの1つとして知られています。

以下のグラフは、SRECon というイベントでのアンケート結果です。NewRelic などと拮抗して来場者の多くが使用しているツールであることが見て取れます。

f:id:vasilyjp:20180511175615p:plain

豊富なグラフ表現とカスタマイズ性

Datadogの他のMonitoring Toolと比べたアドバンテージは、非常にリッチなグラフ表現をドラッグ&ドロップで簡単に実現できるところにあるかなと思います。 たとえば以下のようなDashboardを手軽に作成できます。

f:id:vasilyjp:20180511175633p:plain

Slackとの連携が容易

現代的な開発エンジニアの間ではSlackなどのチャットツールがコミュニケーションのハブになっており、そこに情報を集約することが開発効率の向上や情報共有の円滑化につながります。

Mackerelなどでも同様の機能がありますが、DatadogではSlackなどに対してグラフ付きでメッセージやアラートを通知する機能をもっており、チーム内でのコラボレーションに非常に有益です。

f:id:vasilyjp:20180511175650p:plain

豊富なAPI

DashboardやAlertingの設定は画面からでも行なえますが、Datadogは豊富なAPIを提供しているためそれらの操作をAPIを介して半自動化することも可能です。

よく使われている事例としては、Barkdog などのツールを用いたAlertingの設定のDSL化かなと思います。 Barkdogを用いると設定をGitHubなどで管理でき、差分管理やCIツールと連携した適用の自動化などを実現することが可能です。

Service Integration

豊富なService Integrationの機能もDatadogの魅力です。

f:id:vasilyjp:20180511175708p:plain

AWS CloudWatchの情報や、NewRelicなどの他のMonitoring Toolの情報などを簡単な設定でDatadogに取り込む事ができます。この機能を用いることでDashboardの情報をDatadogに一元化することが可能になります。

また、Datadogの情報を入力ソースとして他のシステムと連携することもできます。代表的な事例は Pagerduty などのOn-Callツールとの連携です。Datadogのメトリクス内容を使用して特定の閾値に達したらPagerdutyのEscalation Flowに基いて障害通知を行う、といった事が実現できます。

Docker Integration

そして、最近は Kubernetes の流行などもあり、Docker/Docker Orchestration環境とMonitoring Toolの連携も必要になってきています。この辺については後段で詳しく触れます。

Kubernetes環境との連携

ということで、DatadogとKubernetesの連携について、AutoDiscovery機能を軸に少しだけ深掘りします。

たとえばKubernetes上にPodを展開すると、設定によってはAuto Scaling/Self HealingにてPod数がダイナミックに増減します。どのHost Computer上にどのPodが置かれるかは基本的にはKubernetesが管理することになり、人間が介在し事前に把握することが難しいです。

またDocker imageの中に必ず監視ツールを同梱する、もしくはSide-Car的に1対1で設置するというのも効率が悪いです。

ですのでMonitoring Toolは、何かしらの方法で現在動作しているPodの存在を自動的に把握し、監視対象とする仕組みが必要になります。

その仕組をサポートするものとして、PrometheusではService Discovery機能があります。これによりKubernetesクラスタ上に存在するServiceやPod、Ingressといったものの追跡が可能になっています。 https://prometheus.io/docs/prometheus/latest/configuration/configuration/#%3CKubernetes_sd_config%3E

同様に、Datadogには AutoDiscovery 機能があり、これによりPrometheusのService Discoveryと同様の機能を実現できます。

設定内容など詳しくは以下のQiitaに記事を書きましたので、こちらも参照ください。

Datadog の AutoDiscovery 機能を用いて自動的に Kubernetes pod の監視をする

現場では、以下のようなメトリクスについてAutoDiscoveryの機能を用いて取得しています。

Docker時代/Kubernetes時代のMonitoring Toolには、このようなDiscovery機能が必須になってきていると思います。そして、Prometheus同様、Datadogはそういう時代の変化に追随しているサービスですね。