APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

HCP TerraformでDatadogを操作 ~ダッシュボードやユーザ作成を試してみる

はじめに

こんにちは、ACS事業部の小原です。

監視ツールの設定をコード管理したい、あるいはコード管理したらどうなるだろうと思ったことはありませんか?
この記事では、HCP Terraformを使用してDatadogを操作する方法について取り上げます。
手始めにDatadogのダッシュボードやモニタ、ユーザを作成してみたいと思います。

構成

早速ですが、構成から記載していきます。
今回、以下のような環境で実施してみました。

この構成には以下の要素が含まれています。

  • HCP Terraform: ステートファイルをクラウド上で共有できるため、チーム全体でのコラボレーションが容易になります。事前に作業用のWorkspaceを作成しました。
  • VCS: バージョン管理システム(VCS)としてGitHubを使用し、Terraformのコードを管理します。コードの変更履歴を残すことで追跡が可能になります。また、コミットがあった際にTerraformコードを自動的に実行するようにできます。※この記事では、VCSへの接続方法は割愛します。VCSプロバイダーに接続するをご参照ください。
  • Datadog: インフラの監視とアラートを行うためのサービスです。
  • ホスト: Datadogで監視する対象です。

実践

手順の概要です。以下のように進めていきます。

  • Datadog APIキーとAPPキーの確認
  • 変数の設定
  • provider.tfの作成
  • variables.tfの作成
  • Datadogのダッシュボード、モニタを作成するためのコードを用意
    • Runの実行と確認
  • Datadogのユーザを作成するためのコードを用意
    • Runの実行と確認

Datadog APIキーとAPPキーの確認

  • Datadogへログインする
  • Organizations Settings > Access > API Keys からNew Keyを選択する
  • API Keyを作成し、Keyの値を控えておく

  • Organizations Settings > Access > Application Keys からNew Keyを選択する

  • Application Keyを作成し、Keyの値を控えておく

変数の設定

  • HCP Terraformで作業用のWorkspacesに移動する
  • Variables を選択する

  • Workspace variables > Add variable を選択する

  • 以下をそれぞれ追加する
variable category Key Value
Terraform variable datadog_api_key ※Datadog APIキーの値
Terraform variable datadog_app_key ※Datadog APPキーの値

provider.tf

provider.tfを作成し、terraformブロックとproviderブロックを記述していきます。

terraform { 
  required_providers { 
    datadog = { 
      source = "DataDog/datadog" 
    } 
  } 
} 

# Configure the Datadog provider 
provider "datadog" { 
  api_key = var.datadog_api_key 
  app_key = var.datadog_app_key 
  api_url = "https://ap1.datadoghq.com" # Japan (AP1)リージョンのURLを指定 
} 

ここでは、Japan (AP1)リージョンのURLを指定することが大切です。 私はこれを忘れて、時間を費やしてしまいました。

variables.tf

variables.tfを作成し、変数を宣言します。

variable "datadog_api_key" { 
  description = "The API key for Datadog" 
  type        = string 
} 

variable "datadog_app_key" { 
  description = "The application key for Datadog" 
  type        = string 
} 

Datadogのダッシュボード作成、モニタ作成

ダッシュボード作成

まずは、DatadogのダッシュボードをTerraformでコード化していきましょう。 main.tfを作成しコードを書いていきます。
こちらのGitHubページを参考にしました。

# Example Ordered Layout 
resource "datadog_dashboard" "ordered_dashboard" { 
  title       = "Average CPU Usage" 
  description = "Created using the Datadog provider in Terraform"
  layout_type = "ordered" 

  widget { 
    toplist_definition { 
      request { 
        q = "avg:system.cpu.user{*} by {host}"
        conditional_formats { 
          comparator = "<"
          value      = "2" 
          palette    = "white_on_green"
        } 

        conditional_formats { 
          comparator = ">"
          value      = "2.2" 
          palette    = "white_on_red"
        } 
      } 
      title = "Average CPU Usage by Host"
    } 
  } 
} 

このコードを適用することで、Datadogに新しいダッシュボードが作成されます。
この例では、ダッシュボードに各ホストごとの平均CPU使用率を表示するウィジェットが作成されます。
system.cpu.userは、CPUがユーザーアプリケーションの実行に費やした時間の割合です。
ウィジェットは多くの種類があるので、色々試してみたいですね。

メトリクスモニタ作成

続いて、メトリクスモニタの作成です。
こちらのGitHubページを参考にしました。

resource "datadog_monitor" "foo" { 
  name               = "High CPU Usage Monitor"
  type               = "metric alert"
  message            = "High CPU usage detected on host."

  query = "avg(last_1h):avg:system.cpu.user{*} by {host} > 80"

  monitor_thresholds { 
    warning  = 70
    critical = 80
  } 

  include_tags = true

  tags = ["environment:production", "team:operations"]
} 

この例では、CPU使用率を基にモニタリングを行う設定を示しています。
実際にアラート通知を受け取るためには、通知先(例えばメールアドレスやSlackチャンネル)を追加する必要があります。

プロセスモニタ作成

続いて、プロセスモニタの作成です。同様にdatadog_monitorリソースブロックを使って書いていきます。

resource "datadog_monitor" "process_alert_example" { 
  name    = "High Java Process Count Monitor"
  type    = "process alert"
  message = "Multiple Java processes running on production servers"

  query   = "processes('java').over('env:production').rollup('count').last('10m') > 1" 

  monitor_thresholds { 
    critical          = 1.0
    critical_recovery = 0.0
  } 

  notify_no_data    = false
  renotify_interval = 60
} 

この例では、モニタは、過去10分間に「env:production」で実行されているJavaプロセスの数が1を超えた場合にアラートをトリガーします。
実際にアラート通知を受け取るためには、通知先(例えばメールアドレスやSlackチャンネル)を追加する必要があります。

Runの実行と確認

  • HCP Terraformで作業用のWorkspaceに移動します。
  • New runを選択します。
  • (ここでは初回の動作確認として手動でRunを実行していますが、基本的にGitHubにコミットがあるたびに自動的にRunが実行される構成です)

Runが完了した後、Datadogのページに移動して確認してみます。

ダッシュボードが作成されていますね。

ウィジェットもできています。

メトリクスモニタとプロセスモニタも確認できました。

Datadogのユーザ作成

ユーザ作成

続いて、Datadogのユーザの作成を作ってみたいと思います。
こちらのGitHubページを参考にしました。

# Source a role 
data "datadog_role" "ro_role" { 
  filter = "Datadog Read Only Role" 
} 

# Create a new Datadog user
resource "datadog_user" "foo" { 
  email = "{作成するユーザのメールアドレス}"
  roles = [data.datadog_role.ro_role.id] 
} 

emailには実際に作成するユーザのメールアドレスを入力します。 このコードを適用することで、新しいユーザがDatadogに追加されます。

Runの実行と確認

  • HCP Terraformで作業用のWorkspaceに移動します。
  • New runを選択します。

Runが完了した後、Datadogのページに移動して確認してみます。

ユーザが作成されていることが確認できました。

まとめ

HCP Terraformを使用してDatadogのダッシュボードやモニタ、ユーザを作成する方法を紹介しました。
これを通じて、HCP TerraformでのDatadog操作が意外と簡単だと感じた方も多いのではないでしょうか?

今回は、ほんの一部だけのご紹介でしたが、
参考元として記載したGitHubページのコードを基に、色々と試すことができそうですね。

ちなみに、Datadogのロゴに描かれている可愛らしいワンちゃんは「Bits」と呼ばれているそうですよ!



ACS事業部のご紹介

私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp

本記事の投稿者: 小原 丈明
Azureをメインにインフラ系のご支援を担当しています。