Datadog Agent にコミュニティインテグレーションをカスタムイメージで導入する
前提条件
本記事では、Puma コミュニティインテグレーションを例に、カスタムイメージを利用したコミュニティインテグレーションのインストール方法について解説します。
全てのコミュニティインテグレーションに対応した汎用的な内容になっていると思いますが、参考にする場合は必要に応じて適宜読み替えてください。
また、以下のバージョンを前提としています。
- EKS(EC2) 1.28
- Cluster Autoscaler 1.28.2
- Horizontal Pod Autoscaler
- Datadog
- Helm マニフェスト 3.59.6
- Datadog Agent 7.52.1
コミュニティインテグレーションを使うことになった経緯
弊社では、Rails のアプリケーションサーバーとして Puma を利用しており、 Puma Pod の CPU使用率を指標として Horizontal Pod Autoscaler でオートスケール行っています。
しかし、 Puma の CPU 使用率はそこまで高くないのに応答が返ってこないケースが時々発生することから、Puma の残スレッド数を基にオートスケールさせた方が良いのではないかと考えました。そこで、スレッド数なども取得できるDatadog の Puma コミュニティインテグレーションの導入をすることになりました。
インテグレーションとは
Datadog をさまざまなツールやサービスと連携させて、モニタリングやアラートを一元管理する仕組みのことです。
具体的にはデータ収集(メトリクス、ログ、トレースなど)を機能として提供します。
Datadog公式によると、現在750以上の組み込みインテグレーションが提供されているようです。
すべてのシステム、アプリケーション、サービスの横断的な監視を実現します。Datadog が提供する 750 以上の組み込みインテグレーションをご活用ください。
コミュニティインテグレーションとは
Datadog Agent のコミュニティ開発のインテグレーションのことで、Datadog Agent にはパッケージ化されていませんが、アドオンとしてインストール可能です。
コミュニティインテグレーションは Datadog の Integrations-extra GitHub リポジトリに格納されています。
導入方法
Datadog の Puma インテグレーションのドキュメントを見ると、
Agent v7.21 / v6.21 以降の場合は、下記の手順に従い Puma チェックをホストにインストールします。Docker Agent または 上記バージョン以前の Agent でインストールする場合は、コミュニティインテグレーションの使用をご参照ください。
以下のコマンドを実行して、Agent インテグレーションをインストールします。
datadog-agent integration install -t datadog-puma==<INTEGRATION_VERSION>
のように記載されていますが、弊社では Datadog Agent を Helm でインストールしていることと、Argo CD で GitOps を実現していることから上記の方法はマッチしませんでした。
また、Datadog Agent の Helm Value にもコミュニティインテグレーションをインストールするための値は用意されていません。
charts/datadog/values.yaml
コミュニティインテグレーションを value からインストール出来るようにして欲しいという内容の Issue が上がっているので、需要はありそうですが現時点では実装はされていないようです。
Allow for installation of extra integrations at startup
そこで、タイトル通り Datadog Agent のカスタムイメージを作成し対応することにしました。
カスタムイメージの作成方法は、コミュニティインテグレーションを使用するの Docker での手順を参考にします。
カスタムイメージ作成
まず、コミュニティインテグレーション入りのカスタムイメージを作成します。
今回は ECR にある Datadog Agent の Image をベースにします。
他にも Docker Hub と GCR に対応しているようです
今回は ECR のプライベートレジストリに datadog-agent-extension という名前でリポジトリを作成し、そこに 7.52.1 というタグをつけてカスタムイメージを設置する想定で進めます。
カスタムイメージのタグは中身が分かりやすいように Datadog Agent の Version(7.52.1
) に揃えています。
カスタムイメージのための Dockerfile を作成し
# Base となる Datadog Agent の Image
FROM public.ecr.aws/datadog/agent:7.52.1
# インストールしたいコミュニティインテグレーションのインストールコマンドを記載する
RUN agent integration install -r -t datadog-puma==1.2.1
build します
# パブリック ECR にログイン
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
# イメージの build (--platform の後に指定する値は Datadog Agent が動作するサーバーの CPUアーキテクチャに合わせて変更してください)
$ docker build -t datadog-agent-extension:7.52.1 . --platform amd64
次の手順に進む前に ECR のプライベートレジストリに datadog-agent-extension リポジトリを作成しておいてください(操作手順のスクリーンショットなどは省く)。
カスタムイメージへのタグ付けからから ECR への Push までは以下のような手順で行います(AWSのアカウントIDは各自の環境に応じてよしなに対応してください)。
# イメージのタグ付け
$ docker tag datadog-agent-extension:7.52.1 ${aws_account_id}.dkr.ecr.ap-northeast-1.amazonaws.com/datadog-agent-extension:7.52.1
# プライベート ECR にログイン
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin ${aws_account_id}.dkr.ecr.ap-northeast-1.amazonaws.com
# プライベート ECR に Push
$ docker push ${aws_account_id}.dkr.ecr.ap-northeast-1.amazonaws.com/datadog-agent-extension:7.52.1
カスタムイメージをHelmで利用する
Datadog Agent の values.yaml に下記設定を加えることで、Datadog Agent のカスタムイメージを起動させることができます。
agents:
image:
repository: ${aws_account_id}.dkr.ecr.ap-northeast-1.amazonaws.com/datadog-agent-extension
tag: 7.52.1
コミュニティインテグレーションがインストールされたかどうかは以下コマンドで確認できます。
# Datadog Agent コンテナに接続
$ kubectl -n monitoring exec -it datadog-4bzm6 -c agent -- bash
root@datadog-4bzm6:/# agent integration show datadog-puma
Package datadog-puma:
Installed version: 1.2.1
agents.image.tag
を Datadog Agent の Version 以外にしたい場合
実は agents.image.tag
にどんな値を入れても良いというわけではありません。
Datadog Agent の Varsion 番号以外の値を入れた場合、charts/datadog/templates/_helpers.tpl での Version Check 処理で弾かれます。
この Version Check 処理は Datadog Helm マニフェストの Version に対して、Datadog Agent の Version が適切か判断しています。
回避策としては agents.image.doNotCheckTag: true
にすれば OK です。
とはいえ、Datadog Agent の Version 以外にすると混乱しそうなので、 個人的には Datadog Agent の Version にすることをお勧めします。
まとめ
- 現状、コミュニティインテグレーションの導入は Datadog Agent の Helm value で対応していない
- CLI でのインストールのみ対応
- Datadog Agent の Helm Value から Datadog Agent として利用するイメージを変更することが可能
- コミュニティインテグレーション入りのカスタムイメージを Helm Value に指定することで、コミュニティインテグレーションを導入することができる
Discussion