Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

DatadogでKubernetes(EKS)のMetricsを取得する備忘録

こんにちは!技術本部 研究開発部 Architectグループの宮地です。1年ぶりのブログ投稿になります。私は23卒として入社し、気づけば 2年目も終わりに近づいています。月日の流れは本当に早いですね。

さて、最近のトピックスとして、年明けから中部支店に異動となりました!大学時代を愛知で過ごしていたこともあり、地元に戻れるのはとても嬉しいです。 中部支店については、先日のアドベントカレンダーで新井が詳しく紹介していますので、そちらをご覧ください。

buildersbox.corp-sansan.com

今回はDatadogを使ってKubernetes(EKS)のMetricsを取得する際の備忘録をまとめます。Datadogは公式ドキュメントが非常に充実していますが、あちこちに情報が散らばっているため、自分たちの実践例も交えながら一元的に整理しました。

本記事はSansan Advent Calendar 2024の17日目です。


環境

  • Kubernetesクラスタ: Amazon EKS (v1.29)
  • Datadogの導入方法: Helm Chart (Chart versions 3.81.1)

DatadogとEKSの連携方法

EKSとDatadogを連携させるには、次の公式ドキュメントを参考にします。

これらのドキュメントに従えば、EKS環境でのDatadog Agentのセットアップはスムーズに進められます。


Metricsの種類

Datadogで収集可能なKubernetes Metricsは取得方法毎に、次の3種類に分類しました。

  1. Datadog Kubernetes Metrics KubernetesのCPU使用率、メモリ使用率、Podの状態などを含む基本Metrics。

  2. Datadog Integration Metrics Integration対応のKubernetesエコシステム内のソフトウェアのMetrics。

  3. Kubernetes Prometheus & OpenMetrics Metrics Integration非対応のソフトウェアからMetricsを収集する方法。


1. Datadog Kubernetes Metrics

Datadog AgentをEKSに導入するだけで、次を含むMetricsを自動的に取得できます。 次節で取り上げるIntegration Metricsの一種であり、設定不要で取得可能な点が異なります。

  • CPU使用率などのリソース情報
  • Kubernetes State Metrics

Datadog Kubernetes Metricsの一覧はこちらを確認してください。


2. Datadog Integration Metrics

Datadogは、Kubernetesに限らずさまざまなIntegrationを提供しています。全対応ソフトウェア一覧はこちらを参照してください。Integrationとして対応しているソフトウェアは、Datadogドキュメントに導入方法が記載されています。しかし、我々はほとんどのIntegrationを次の方法で統一し取得しています。

実践例:Argo CDのMetricsを取得する場合

次の手順で設定します。

  1. Datadog/integrations-coreリポジトリでargocdを検索。 Argo CDのIntegrationがあることを確認します。

  2. 提供されているconf.yaml.exampleを参考に、設定を記述します。

  3. Datadog Helm Chartのvalues.yamlに次のYAMLコードを設定します。

  4. Helm Chartを適用すれば、Argo CDのMetricsが収集されます。

datadog:
  confd:
    argocd.yaml: |
      instances:
      # Service リソースより取得しているため、Namespace を設定してください。我々の環境では argocd です。
      - app_controller_endpoint: http://argocd-metrics.argocd:8082/metrics
      - appset_controller_endpoint: http://argocd-applicationset-controller.argocd:8080/metrics
      - api_server_endpoint: http://argocd-server-metrics.argocd:8083/metrics
      - repo_server_endpoint: http://argocd-repo-server.argocd:8084/metrics
      - notifications_controller_endpoint: http://argocd-notifications-controller.argocd:9001/metrics

注意点として、Integrationによっては追加の設定が必要になる場合があります。 例えば、 Karpenterは標準でMetrics用のServiceリソースが存在しないため、作成する必要があります。

そのほか、Integrationを扱う場合の参考文献を次に記載します。


3. Kubernetes Prometheus & OpenMetrics Metrics

Integrationに対応していないソフトウェアのMetricsは、PrometheusまたはOpenMetricsのエンドポイントを通じて取得します。 公式ドキュメントの詳細はこちらを参照してください。

実践例:Knative ServingのMetrics取得

次のYAMLコードのようにHelm Chartのvalues.yamlを設定します。(一部省略)

prometheusScrape:
    additionalConfigs:
    # Service Metrics (ref: https://knative.dev/docs/serving/services/service-metrics/)
    - autodiscovery:
        kubernetes_container_names: # 対象のContainerを指定
            - queue-proxy
        configurations:
        - collect_histogram_buckets: false # HistogramのBucketを取得しない。
            metrics: # 取得するMetricsを正規表現で指定
            - revision_.*
            exclude_metrics: # 取得しないMetricsを正規表現で指定
            - .*_go_.*
            openmetrics_endpoint: http://%%host%%:%%port_http-usermetric%%/metrics # Metricsを取得するEndpointを指定
    # Knative Serving Metrics (ref: https://knative.dev/docs/serving/observability/metrics/serving-metrics/)
    - autodiscovery:
        kubernetes_container_names:
            - activator
            - autoscaler
            - autoscaler-hpa
        configurations:
        - collect_histogram_buckets: false
            metrics:
            - activator_.*
            - autoscaler_.*
            exclude_metrics:
            - .*_go_.*
            openmetrics_endpoint: http://%%host%%:%%port_metrics%%/metrics

注意点として、この方法は、DatadogにおけるCustom Metricsに該当します。詳細はこちらを参照してください。 Custom Metricsを大量に取得した場合、かなりの費用となる可能性があります。Custom Metricsの課金はこちらを参照してください。

そのほか、Kubernetes Prometheus and OpenMetrics metrics collectionを扱う場合の参考文献を次に記載します。

まとめ

今回はDatadogを使ったEKSのMetrics収集方法について、実際の設定例を交えながら解説しました。公式ドキュメントをベースにしていますが、現場での工夫も盛り込んでいます。これが皆さんの参考になれば幸いです。

最後に、研究開発部では、プラットフォームエンジニアを募集しています。

open.talentio.com

© Sansan, Inc.