はじめに
こんにちは、Fusicの鶴田です。
最近、業務でDatadogを使っていますが、仕組みをしっかり理解しないまま使っている部分もあり、一度きちんと整理しておきたいと思っていました。そこで、Datadogを実際に触りながら勉強して、学んだことをざっくりまとめていくことにしました。
手始めに、Amazon EC2(以下、EC2)にDatadog Agent(以下、Agent)を入れて、Datadogのコンソールにどう表示されるのかを見てみました。Agentをインストールしてコンソールを開くと、たしかにEC2を監視できるようになっていましたが、ホスト名に表示されていたのは i-0123456789abcdef0 のようなインスタンスIDでした。

これだと、どのホストが何のサーバーなのか分かりづらいだろうなと感じました。そこで、表示されるホスト名を変えるにはどうすればいいのかを調べてみました。
結論
AgentがDatadog上のホスト名を決めるルールは、以下のような優先順位があります。上から順に判定され、最初に当てはまったものが使われます。
| 順位 | 候補 | 条件 |
|---|---|---|
| 1 | 設定ファイルで指定したホスト名 |
ip- または domu で始まらないこと |
| 2 | OSのホスト名(hostname -f) |
EC2のデフォルト形式(ip-192-0-0-1 など)ではないこと |
| 3 | インスタンスID | Agentがインスタンスメタデータに到達できること |
| 4 | OSのホスト名 | 1〜3のいずれにも当てはまらなかった場合 |
ただし、実際に試したところ、名前を変えても既存のホストが改名されるのではなく、別のホストとして追加されました。また、ip-で始まる名前はルールどおりコンソールには反映されませんでしたが、datadog-agent hostname には設定した名前がそのまま表示されることもわかりました。
ホスト名を変えると別のホストとして扱われるので、あとから変えるのはおすすめしません。サーバーを見分けたいだけなら、ホスト名はそのままにしてenvやroleなどのタグを付ければ、ホスト一覧の列で見分けられます。
分かりやすいホスト名にしたい場合は、最初にAgentをインストールするときに決めておくのがよさそうです。
検証環境とAgentのインストール
| 項目 | 内容 |
|---|---|
| リージョン | ap-northeast-1 |
| インスタンス | t3.small / Amazon Linux 2023 |
| Agent | 7.84.6 |
| Datadogサイト | US1(datadoghq.com) |
| AWSインテグレーション | 未設定 |
AgentはAWS Systems Manager(以下、SSM)のRun Commandで、Datadogが公開しているSSMドキュメント datadog-agent-installation-linux を使ってインストールしました。

インストール時にはパラメータをいくつか指定することができます。今回は以下のようなパラメータを指定しました。
| 項目 | 値 |
|---|---|
| Action | InstallOrUpgrade |
| Apikey | 事前に発行したDatadogのAPIキー |
| Site | datadoghq.com |
| Hostname | 空欄 |
| Tags | env:learning,project:datadog-learning |
検証結果
同じインスタンスで設定を1つずつ変え、Agentを再起動してから、Agentが認識しているホスト名と、Datadogコンソールのホスト一覧(Infrastructure → Hosts)に表示されるホスト名を見比べました。
なお、設定ファイルのパスは/etc/datadog-agent/datadog.yamlで、Agentを再起動する際に実行するコマンドは sudo systemctl restart datadog-agent です。
インストール直後
コンソールにはインスタンスIDで表示されました。Agentの状態は datadog-agent status コマンドで確認できます。このときの出力から、ホスト名に関係する部分を抜き出すと次のとおりです。
$ sudo datadog-agent status
========
Hostname
========
hostname: i-0123456789abcdef0 # ①
hostname provider: aws # ②
-
① hostname:Agentが使っているホスト名です。ここではインスタンスIDになっています -
② hostname provider:ホスト名をどこから取ったかを示します。aws は、結論の表のルール3(インスタンスID)が使われたことを表しています
設定ファイルで hostname を指定してみる
設定ファイルに明示的にホスト名を指定してみました。datadog.yaml に次の1行を追加して、Agentを再起動しました。
hostname: test-instance
Agentの再起動後、Agentが使っているホスト名を表示するdatadog-agent hostnameコマンドを実行すると、設定どおり test-instance が返ってきました。
$ sudo datadog-agent hostname
test-instance
ところが、コンソールのホスト一覧では、インスタンスIDのホストが改名されたのではなく、test-instance が別のホストとして追加されていました。

同じインスタンスなのにホストが2つ表示されたので、このままで問題ないのかが気になり、調べてみました。公式ドキュメントによると、ホスト名を変えると、それ以降のメトリクスは新しいホスト名のほうへ届くようになります。また、古いホスト名には新しいメトリクスが表示されなくなり、2時間ほどコンソールに残った後、ホスト一覧から消えるそうです
ip- で始まる名前を指定してみる
ホスト名の決定ルールを読んだときから、1番目の「ip- または domu で始まらないこと」という条件が気になっていました。ip-で始まる名前を設定したらどうなるのかを確かめるため、hostname の値を次のように書き換えて、Agentを再起動しました。
hostname: ip-test-instance
datadog-agent hostname を実行すると、ip-test-instance が返ってきましたが、Datadogコンソールのホスト一覧には表示されず、test-instance のままでした。ここはルール通りです。ただし、ホスト名を決定するルールに従うと、インスタンスIDが選ばれると思っていましたが、一覧に表示されていたのはtest-instanceでした。
設定ファイルのホスト名を強制的に使わせるhostname_force_config_as_canonical: trueという設定もあるようなので試してみましたが、結果は変わりませんでした。
OSのホスト名を変えてみる
続いて、優先順位の2番目にある「OSのホスト名」を試してみました。
OSのホスト名はもともと ip-10-0-1-xxx.ap-northeast-1.compute.internal というEC2のデフォルト形式だったので、ルール2の対象外でした。デフォルト形式ではない名前に変えれば、ルール2で選ばれるはずです。
ただし、設定ファイルでホスト名を指定したままだとルール1の判定が先に行われるので、先ほど追加した hostname とhostname_force_config_as_canonicalの行を削除してから、OSのホスト名をtest-serverに変えてAgentを再起動しました。
sudo hostnamectl set-hostname test-server
sudo systemctl restart datadog-agent
sudo datadog-agent hostname # => test-server
hostname provider は aws から os に変わり、コンソールのホスト一覧には test-server が別のホストとして追加されました。
$ sudo datadog-agent status
========
Hostname
========
hostname: test-server
hostname provider: os
運用で気をつけたいこと
- ダッシュボードやモニターを
host:xxxのようにホスト名で絞り込んでいる場合、ホスト名を変えると、それ以降のデータは新しいホスト名で届くため、絞り込みの対象から外れてしまいます。そのため、ホスト名はAgentをインストールするとき(Run CommandならHostnameパラメータ)に決めておくのが無難だと思います - サーバーを見分けることが目的なら、ホスト名を変えずにタグを付けるだけで十分かと思います。今回Run Commandの
Tagsパラメータで付けたenv:learningは、コンソールのホスト一覧のENV列にそのまま表示されていました - ホスト名を変えたときは、
datadog-agent hostnameの出力だけで判断せず、コンソールのホスト一覧でも確認したほうが確実です。ip-で始まる名前のように、コマンドでは設定した名前が表示されても、コンソールには反映されないことがあります - 今回は試していませんが、
datadog.yamlにhostnameを書いたままAMIを作ると、そのAMIから起動したインスタンスがすべて同じホスト名でDatadogに表示されるはずです。
まとめ
今回は、EC2に入れたAgentのホスト名がどう決まるのかを、設定ファイルとOSのホスト名を変えながら確かめました。どの名前が選ばれるかは公式のルールどおりでしたが、名前を変えると既存のホストが改名されるのではなく、別のホストとして追加されることが分かりました。
一方で、ip-test-instance を設定したときに、ルールどおりならインスタンスIDが選ばれるはずなのに test-instance が残った理由は、まだ分かっていません。次はエイリアスやメトリクスの host タグを見て、この点を確かめてみたいと思います。
参考
How does Datadog determine the Agent hostname?
Assigning Tags
Amazon EC2

