LoginSignup
2
2

はじめに

こんにちは、Datadog Japan で Sales Engineer をしている AoTo です。

この投稿は AoTo Advent Calendar 2023 22日目の記事です。

Datadog の中で Datadog Agent に触れていく中で知った豆知識を、ここでいくつか紹介していきます🐶

Agent のプロセス

Datadog Agent を起動すると複数のプロセスが起動します。これは Datadog Agent で利用する機能やインテグレーションに依存しますが、以下の種類のプロセスが起動します。

  • Agent
  • Trace Agent
  • Process Agent
  • Security Agent
  • System Probe

基本的に Datadog Agent に関連するプロセスは、Linux, Windows の場合dd-agentddagentuser のような非特権ユーザーとして実行されます。この他に、これらのプロセスは例外としてrootLOCAL_SYSTEMで実行されます。

細かい挙動までは触れられませんが、それぞれ以下のような役割があります。

Agent

いわゆる Datadog Agent の主要な機能です。
主な役割はシステム情報の収集とインフラストラクチャーメトリクスの記録、それらのデータの Datadog バックエンドへの送信です。

システム情報の収集はgohaiと呼ばれるツールを利用しており、facterohaiの機能の一部を実装するverityからフォーク(分岐)したものです。

Trace Agent

トレースの監視情報を扱うエージェントです。
主な役割は、アプリケーションの計装によって生成されたトレースデータの収集・処理・送信です。トレース情報の収集とサンプリング、トレースの難読化やタグに応じた処理を行い、Datadog バックエンドへの送信を行います。

image.png

Process Agent

プロセスやコンテナの監視情報を扱うエージェントです。
主な役割は、ライブプロセスコンテナモニタリングで確認できる監視データの収集・処理・送信です。プロセスとコンテナの監視情報の記録と収集に加えて、system-probeによる eBPF を利用した監視情報の取り込みを行い、Datadog バックエンドへの送信を行います。

Security Agent

セキュリティに関連する脅威を扱うエージェントです。
主な役割は、CSM Threats ので確認できる脅威データの収集・処理・送信です。CSM Workload Security による記録と収集に加え、system-probeによる eBPF を利用した脅威情報の取り込みと Datadog バックエンドへの送信です。

System Probe

eBPF を利用した監視・脅威情報を扱うエージェントです。
主な役割は、Network Performance Monitoring(NPM), Universal Service Monitoring(USM), Cloud Security Management(CSM) Workload Security で確認できる監視・脅威データの収集・処理・送信です。

詳しい解説は先日の『eBPF で SRE を始めよう!』でも解説しています!

Agent の通信

Datadog Agent に関わる通信の規則は、公式のネットワークトラフィックページで説明されています。ここで記載されている注意書きを見ていきましょう。

Traffic is always initiated by the Agent to Datadog. No sessions are ever initiated from Datadog back to the Agent.

Datadog Agent と Datadog バックエンドの通信は全て Datadog Agent から開始されます。
現在では Datadog Fleet Automataion の主要機能である Remote Configuration のように、Datadog バックエンドで Datadog Agent の構成変更を行える機能がありますが、この場合でも Datadog Agent がアウトバウンドで構成情報をポーリングして反映をするアーキテクチャとなります。

image.png

All outbound traffic is sent over SSL through TCP or UDP.

Datadog Agent のアウトバウンド通信は TCP/UDP over SSL/TLS を利用して行われます。つまりデフォルトでは Agent による通信は暗号化された状態で行われます。また、直接アウトバウンド通信ができない場合でも、プロキシを設定することで Datadog Agent による監視を実装することが可能です。

Agentの種類

Datadog Agent には監視する対象に対応した専用のエージェントが存在します。

基本的に Datadog Agent の機能が中心となりますが、各監視対象に応じて一部の機能のみを実装したり軽量化を行った結果として、様々な種類のエージェントが用意されています。

Datadog Agent

Datadog の基本的なエージェントです。Linux, Windows, MacOS様々なディストリビューションに対応しており、1行のコマンドだけでインストールできます。

この1行のコマンドによるインストールを行うために、Amazon S3 上で OS に応じたスクリプトやインストーラーが公開されています。

  • Linux: https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh
  • Windows: https://s3.amazonaws.com/ddagent-windows-stable/datadog-agent-7-latest.amd64.msi
  • MacOS: https://s3.amazonaws.com/dd-agent/scripts/install_mac_os.sh

さらに、Datadog Agent はソースコードを指定して直接インストールを行うことが可能です。Datadog Agent のためのパッケージのビルド方法は GitHub に公開されています。

Datadog Docker Agent

Python3 インタプリタと Python チェックと共に Datadog Agent が含まれる Docker イメージです。厳密には一般的に Datadog Agent と同様の機能が含まれますが、軽量なコンテナとして動作するために Datadog の公式でイメージが AWS Elactic Container Registry(ECR), Google Container Registry(GCR), Docker Hub に公開されています。

ちなみに、これらのイメージの元となる DockerflieDataDog/datadog-agent リポジトリで公開されています。

Datadog Cluster Agent

Kubernetes のクラスターを監視するための機能を備えた専用のエージェントです。API サーバーとノードベースの Datadog Agent のプロキシとして機能し、Kubbernetes クラスター内での負荷を軽減します。

image.png

Datadog Lambda Extension

AWS Lambda 関数に用意されている拡張機能を利用して Datadog Agent をデプロイする特別なビルド方式です。Datadog は AWS Lambda 拡張機能パートナーに含まれており、これにより AWS から直接 Datadog Lambda Extension を指定して拡張機能を利用できます。

コールドスタートに多少のオーバーヘッドが発生しますが、継続的にパフォーマンスを最適化しているため、常に最新のリリースを使用することが推奨されています。

Datadog IoT Agent

IoT デバイスや埋め込みアプリケーション用に最適化された軽量なエージェントです。Python インタープリターや標準 Agent のインテグレーションは含まれていません。様々なアーキテクチャに対応しており、x64, arm64(ARMv8), ARMv7 で実行中の Linux デバイスに DEB および RPM パッケージとして実装できます。

Datadog Advent Calendar 2023 でも IoT Agent について解説された素晴らしい記事があるので、こちらもご覧ください🐶

Datadog serverless-init Agent

マネージドコンテナに同梱するための専用の軽量エージェントです。現在は Azure Container AppsGoogle Cloud Run での実装が公式にサポートされています。エージェントが持つ機能はserverless-initで確認できます。

Datadog の公式でイメージは AWS Elactic Container Registry(ECR), Google Container Registry(GCR), Docker Hub に公開されています。

serverless-initをコンテナに同梱すると、アプリケーションのメインプロセスをラップしてサブプロセスとして実行されます。そのため、serverless-initをエントリポイント(ENTRYPOINT)として設定するか、最初の引数(CMD)として設定する必要があります。

Azure Container Apps, Google Cloud Run は Dockerfile への記載の他に、Cloud Native Buildpacks を利用することで既存の Dockerfile に手を加えることなく、さらには Dockerfile を作成せずに Datadog Agent をマネージドコンテナに実装することができます。

Agent のバージョン

現在の Datadog Agent の最新のメジャーバージョンは v7 となっています。利用できる一番古いメジャーバージョンは v5 となっており、v6 になる際に Python から Golang による書き直しがされ Forwarder, Collector, DogstatsD が単一の Agent プロセスに統合されました。

メジャーバージョンの v6 から v7 への変更により、インテグレーションおよびカスタムチェック用の Python 3 のサポートのみが追加されています。

Datadog としては Datadog Agent をマイナーリリースとパッチリリース毎、または少なくとも毎月更新することを推奨しています。Datadog Agent の最新リリースは GitHub のリリースで最新の情報を確認できます。

バージョンアップの方法も公式にサポートされており、v7 へのアップグレードv6 へのアップグレードマイナーバージョン間でのアップグレードのガイドがあります。基本的に環境変数を利用でき、DD_UPGRADEDD_AGENT_MINOR_VERSIONを指定することで前述のインストールスクリプトを利用してアップグレードが可能です。

Agent のライセンス

Datadog Agent が GiHub のパブリックリポジトリで公開されている通り、ユーザー空間で実行されるコンポーネントは Apache License 2.0 に、BPF コードは GNU General Public License 2.0 に基づいてライセンスされています。このように Datadog Agent はオープンソースとして公開されており、ライセンスに基づいた自由な利用が可能です。

Datadog に含まれる様々な機能やプラットフォームへの互換性はもちろん完璧ではないため、バグや問題・仕様について提案・意見があれば Contributing to Datadog Agent に基づいてコントリビュートをしていただくことが可能です。特に特定の issue で Datadog エンジニアリングチームとコンタクトを取ることで、問題が直接共有され Datadog としても問題解決に取り組みやすくなります。

ご興味があれば是非 issue を上げるところから貢献されてみてはいかがでしょうか🐶

Agent のインテグレーション

Datadog は様々なデータソースから情報を収集する手段として、現在は750以上のインテグレーションを提供しています。こうしたインテグレーションのうち、エージェントベースのインテグレーションは Datadog Agent とともにインストールされ、Python の Check メソッドにより収集するメトリクスが定義されます。

エージェントベースのインテグレーションは、基本的に<INTEGRATIONS_NAME.d>/conf.yamlファイルによって設定可能で、インストール時のデフォルトで<INTEGRATIONS_NAME.d>/conf.yaml.exampleファイルが用意されているため、設定できる項目やオプションをその中でも確認できます。

さらに、Live Process 機能を有効化することで インテグレーションの自動検出を行い、何かしらの監視情報が取得できるインテグレーションを表示することができます。

おわりに

Datadog Agent の技術的な裏側に興味のある方々向けに、公式で公開されている豆知識をまとめてみました。

Datadog Agent は多くの機能を備えており、その全体像を把握するのは難しいです。Observability によって実現したいこと、監視したい対象や情報や、現在の監視方法を再確認することで、Datadog Agent のどの機能を利用するべきかを考えて使いこなしていただければと思います🐶

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2