はじめに

Syntheticを使ってWebサイトの監視を行っていただくことができますが、監視先のページが多い場合、UIからすべて設定するのは大変です。また、設定を一律に変えたくなったときなど、全てを修正し直すのは、また大仕事です。
TerraformなどのIaCツールを使えば、簡単に実現ができるので、その設定方法を紹介します。

Terraformの準備

本ブログ記載の方法を実施するにあたり、Terraformをインストールする必要があります。まだ、インストールされてない方は、こちらから、ご利用の環境に対応したパッケージをインストール実施してください。

なお、本ブログ執筆にあたり、利用したTerraformのバージョンは、v1.3.7となります。今後のバージョンアップ等により、掲載の設定等が動作しなくなった場合はご了承ください。

Provider情報の設定

Terraform上で、NewRelicのProviderを利用するための設定を行います。まず、自身の作業ディレクトリにprovider.tfを以下の内容で作成します。<Your Account ID>の部分には、自身のNewRelicのアカウントID、<Your User API Key>の部分には、自身のNewRelicのユーザキーを設定してください。

terraform {
  required_providers {
    newrelic = {
      source  = "newrelic/newrelic"
    }
  }
}

provider "newrelic" {
  account_id = <Your Account ID>
  api_key = "<Your User API Key>"
  region = "US"
}

続いて以下のコマンドを同じフォルダで実行して初期化を行ってください。

terraform init

初期化が行われ、NewRelicのProviderが自身の環境にDLされ、利用できるようになります。

監視先リストの作成

続いて、同じフォルダで、synthetics.tfというファイルを作成し、以下の内容をペーストしてください。

variable "monitor_params" {
  description = "Map of synthetic test configurations"
  type = map(any)

  default = {
    "newrelic-top" = {
      url = "https://newrelic.com/"
      name = "newrelic top page"
    },
    "newrelic-docs" = {
      url  = "https://docs.newrelic.com/"
      name = "newrelic docs page"
    },
    "newrelic-jp-top" = {
      url = "https://newrelic.com/jp"
      name = "newrelic jp top page"
    },
  }
}

こちらの設定はnewrelic.com上の3つのページに対して、Syntheticのテストを設定するためのものとなります。自身のチェックしたいサイトのURLや任意の名前に置き換えたり、アイテムを増やしたりしてみてください。なお、リスト内のnewrelic-top等に関しては、各アイテムのキー名となります。任意の名前で問題ありませんが、他と重複のないようユニークな名前を設定するようにしてくださいurl属性やname属性に設定されている値に関しては、他と重複していても問題はありませんが、name属性に関しては、表示名として利用するようになっているので、わかりやすい名前にしておくと良いと思います。

Syntheticの設定の追加

続いて、先程作成したsynthetics.tfファイルに以下を追加してください。

resource "newrelic_synthetics_monitor" "synthetic-monitors" {
  for_each = var.monitor_params

  status           = "ENABLED"
  name             = each.value.name
  period           = "EVERY_5_MINUTES"
  uri              = each.value.url
  type             = "SIMPLE"
  locations_public = ["AP_NORTHEAST_1"]
}

上記の場合、すべてのSyntheticテストは以下の内容で作成されます。

設定
設定テストの名前 変数リストのnameの値
設定テスト周期 5分に1回
設定テスト先URL 変数リストのurlの値
設定テストのタイプ SIMPLE(またはPINGと呼ばれるタイプ)
設定実行ロケーション AP_NORTHEAST_1

設定の内容を変更したい場合は、こちらのページに記載の内容を参考に変更してみてください。

リソースの展開

ここまでで、Syntheticのテストの設定ができるところまで、できたので展開してみましょう。ターミナルから以下のコマンドを実行してみてください。

terraform apply

すると以下のようなリリースされる内容の計画と確認が表示されます。問題ないことを確認してyesとタイプして継続してください。

設定に問題がなければ、Syntheticのテストが展開されているはずです。one.newrelic.comにログインして、Syntheticsの画面にて確認してみてください。上記で設定したSyntheticの各テストがUI上で確認できます。

また、時間に余裕があるかたは、EVERY_5_MINUTESの値をEVERY_30_MINUTESに変更し、terraform applyを再度実行してみてください。簡単にすべてのテストの実行周期の変更ができることが確認できると思います。

Syntheticアラートコンディションを作成する

Syntheticのテストが実行できるようになりました。続いてSyntheticでエラーが発生したことを監視するためのアラートを追加します。設定としては、1つの専用のアラートポリシーを作成し、各Syntheticテスト向けのアラートコンディションをそのポリシーの中に格納する形式にします。

設定は簡単で、すでに作成済みのsynthetics.tfのファイルに以下を追加してください。

 

resource "newrelic_alert_policy" "synthetic-policy" {
  name = "Synthetic Test Alert Policy"
  incident_preference = "PER_CONDITION_AND_TARGET"
}

resource "newrelic_synthetics_alert_condition" "synthetic-condition" {
  depends_on = [newrelic_alert_policy.synthetic-policy, newrelic_synthetics_monitor.synthetic-monitors]
  for_each = newrelic_synthetics_monitor.synthetic-monitors
  monitor_id = each.value.id
  name       = each.value.name
  policy_id  = newrelic_alert_policy.synthetic-policy.id
}

そして、先程同様にterraform applyを実行してください。そして、実行完了後にone.newrelic.comAlerts & AIのページを開き、メニューからAlert conditions (Policies)を選択してみてください。先程追加した「Synthetic Test Alert Policy」という名前のポリシーが追加され、各Syntheticテスト用のアラートコンディションが追加されていることが確認できます。

通知先の作成

続いて、アラートの通知の設定です。通知を設定するためには、UI上では、WorkflowDestinationの2つを作成する必要がありますが、Terrafrom上では、更にChannelも作成する必要があることご注意ください。(UI上では、WorkflowにDestinationを登録したときにChannelが勝手に作成されています。)

ここでは、簡単にemail@email.comというメールアドレスを通知先とし、上記で作成したAlert PolicyのIssueをすべて通知する。という設定で作成しています。以下の内容をこれまで同様に、synthetics.tfに追加してterraform applyを実行してみてください。

 

 

 

resource "newrelic_notification_destination" "synthetic-alert-destination" {
  name = "Synthetic alert destination"
  type = "EMAIL"

  property {
    key = "email"
    value = "email@email.com"
  }
}

resource "newrelic_notification_channel" "synthetic-alert-channel" {
  name = "Synthetic alert channel"
  type = "EMAIL"
  destination_id = newrelic_notification_destination.synthetic-alert-destination.id
  product = "IINT"

  property {
    key = "subject"
    value = "{{ issueTitle }}"
  }
}

resource "newrelic_workflow" "synthetic-alert-workflow" {
  name = "Synthetic alert workflow"
  muting_rules_handling = "DONT_NOTIFY_FULLY_MUTED_ISSUES"

  issues_filter {
    name = "filter-name"
    type = "FILTER"

    predicate {
      attribute = "labels.policyIds"
      operator = "EXACTLY_MATCHES"
      values = [ newrelic_alert_policy.synthetic-policy.id ]
    }
  }

  destination {
    channel_id = newrelic_notification_channel.synthetic-alert-channel.id
  }
}

以上で、すべての設定が完了です。意識はしていなかったと思いますが、Terraformのfor_eachを使って、簡単に複数のSyntheitcテストと関連の設定できる方法を紹介しました。設定の内容を自分たちの環境にあった設定内容に変更し、設定を行ってみてください。なお、今回作成したNewRelic上のリソースを削除したい場合、以下のコマンドを実行してもらうことで削除できます。

 

terraform apply -destroy

Blogではその他Terraformを使った構築のサンプルがいくつか紹介されています。ぜひともこれらを使って、効率化やコード化を楽しんでください。

参照