share facebook facebook twitter menu hatena pocket slack

2017.10.03 TUE

Datadog EC2インスタンスIDの取得

WRITTEN BY 大住 孝之

Datadog Agent でのホスト名はルールに従って決定されます。

host名を固定化している場合、datadog.conf 内で明示的に hostname: を指定している場合等には、 指定値が優先されます。
監視対象 AWS EC2インスタンスの instance-id を取得したいと思ったのですが、上記設定が入っていたため tag では保持していませんでした。
ドキュメントの Host Aliases にある通り、 Host としては hostname: の設定値となり、 Alias として instance-id を持っている状態です。

Alias

Datadog Agent の info 情報で取得できる Hostnames を保持しているようです。
Infrastructure List 画面で確認できます。

  Hostnames
  =========

    ec2-hostname: ip-XXX-XX-XX-XXX.ap-northeast-1.compute.internal
    local-ipv4: XXX-XX-XX-XXX
    hostname: XX01
    socket-hostname: XX01
    local-hostname: ip-XXX-XX-XX-XXX.ap-northeast-1.compute.internal
    instance-id: i-XXXXX77e
    public-ipv4: XX.XX.XXX.XX
    socket-fqdn: localhost.localdomain

JSON API permalink

Infrastructure 画面以外で Alias を取得する方法として JSON API permalink が用意されています。 画面下部からリンクURLを取得できます。
内容は Infrastructure 画面で参照できる値をJSON形式で取得できます。

尚、現時点で公式ドキュメントの記載は見つけられませんでしたので、仕様変更が入るかもしれません。 Knowledge Base に少しだけ記載があります。

インスタンスIDの取得

他のAPI同様に利用できるようなので curl コマンドでの取得を試します。 API Key、Application Key が必要になります。
EC2インスタンスの値としては以下のようになっていました。 aws_id で目的のインスタンスIDを取得できます。

  • host_name : Datadog上のHostname
  • aws_name : AWS上のEC2タグ
  • aws_id : AWS EC2 Instance ID
$ apikey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$ appkey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$ hostname=XX01
$ curl -s -S "https://app.datadoghq.com/reports/v2/overview?api_key=${apikey}&application_key=${appkey}" \
  | jq '.rows[] | select(.host_name == "'${hostname}'") | { host_name:.host_name, aws_name:.aws_name, aws_id:.aws_id }'
{
  "host_name": "XX01",
  "aws_name": "XXXXXXXXX-XX01",
  "aws_id": "i-XXXXX77e"
}

因みに取得できる基本項目は以下です。オプション付与で他にも色々取得できるようです。 infrastructure で表示している項目は全て保持していると思われます。

{
  "rows": [
    {
      "display_name": "i-XXXXXXXXXXXXXXXXX",
      "name": "i-XXXXXXXXXXXXXXXXX",
      "tags_by_source": {
        "Amazon Web Services": [
          "availability-zone:ap-northeast-1a",
          "iam_profile:xxxxx",
          "image:ami-XXXXX2f5",
          "instance-type:t2.micro",
          "kernel:none",
          "name:XXXXX",
          "region:ap-northeast-1",
          "security-group:sg-XXXXXXXX"
        ]
      },
      "up": true,
      "aws_name": "XXXXX",
      "host_name": "i-XXXXXXXXXXXXXXXXX",
      "has_metrics": false,
      "aws_id": "i-XXXXXXXXXXXXXXXXX",
      "id": XXXXXXXXX,
      "last_seen": 1503457664
    },
・・・

元記事はこちら

Datadog EC2インスタンスIDの取得