こんにちは!技術本部 研究開発部 Architectグループの宮地です。1年ぶりのブログ投稿になります。私は23卒として入社し、気づけば 2年目も終わりに近づいています。月日の流れは本当に早いですね。
さて、最近のトピックスとして、年明けから中部支店に異動となりました!大学時代を愛知で過ごしていたこともあり、地元に戻れるのはとても嬉しいです。 中部支店については、先日のアドベントカレンダーで新井が詳しく紹介していますので、そちらをご覧ください。
今回は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種類に分類しました。
Datadog Kubernetes Metrics KubernetesのCPU使用率、メモリ使用率、Podの状態などを含む基本Metrics。
Datadog Integration Metrics Integration対応のKubernetesエコシステム内のソフトウェアのMetrics。
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を取得する場合
次の手順で設定します。
Datadog/integrations-coreリポジトリで
argocd
を検索。 Argo CDのIntegrationがあることを確認します。提供されている
conf.yaml.example
を参考に、設定を記述します。Datadog Helm Chartの
values.yaml
に次のYAMLコードを設定します。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収集方法について、実際の設定例を交えながら解説しました。公式ドキュメントをベースにしていますが、現場での工夫も盛り込んでいます。これが皆さんの参考になれば幸いです。
最後に、研究開発部では、プラットフォームエンジニアを募集しています。