Top takeaways
本記事は 「Using Terraform to generate New Relic dashboards from NRQL queries」の抄訳記事になります。
Terraformは、クラウドやオンプレミスのリソースを定義し、管理する際に有用ですが、動的なダッシュボードを作成したい場合には、簡単ではないことがあります。このブログでは、ライブデータをもとにダッシュボードを動的に作成するためのNRQL(New Relic クエリ言語)の使用方法について学びます。
今回はシリーズの第3部になります。第1部では、TerraformでJSONテンプレートを使用し、New Relicダッシュボードを作成する方法についてご紹介しています。第2部では、シンプルな入力データから複雑な動的ダッシュボードを構築する方法をご紹介しています。
今回の例では、どのNew Relicアカウントでも無料で使用できるグローバルAPIを使用します。今回は、NRQLを使用して過去24時間で最も利用された上位5位のAPIのダッシュボードを構築します。これをTerraformの設定を一切変えずに行えるようになります。これが第2部で学んだこととの違いです。前回は、ダッシュボードを動的に作成しましたが、準備した入力をもとに作成したダッシュボードの列は静的でした。今回のケースでは、表示される列はデータそのものに基づきます。この例では、どのAPIがもっとも多くのコールを受けているかによって、列が変化します。
Terraformプロバイダーは、このようなタイプのダッシュボードを作成するのに活用できます。New RelicのGraphQL APIのクエリによって上位5位のAPIのデータを取得し、そのデータに基づいてダッシュボードを作成します。この例を適用して、パフォーマンス上位のアプリケーション、製品、過負荷サーバー、またはその他経時的に変化しうるあらゆる注目データに関するダッシュボードを自動的に作成できます。
完成したダッシュボードは、以下のように表示されます。
ダッシュボード向けのTerraform設定は、dash_nrql_composed.tfにあります。
クエリを定義する
まず、GraphQLクエリを定義する必要があります。この例では、count()
を使用して、上位5位のドメインを調べます。これは、Terraform設定とは別のファイルで定義できます。そうすることで、それ自体のクエリコードの確認と更新がしやすくなります。このケースでは、ファイル名はgetTopFiveApis.gql
です.
query ($accountId: Int!) {
actor {
account(id: $accountId) {
nrql(query: "SELECT count(*) from Public_APICall facet api as domain since 1 day ago limit 5") {
results
}
}
}
}
クエリを定義したら、その名称を指定する必要があります。これはGraphQLプロバイダーのデータ機能で行えます。なお、入力変数として定義できるAPIキーを指定する必要があります。以下のコードは、dash_nrql_composed.tf
にあります。
variable NEW_RELIC_API_KEY {
type = string
}
provider "graphql" {
url = "https://api.newrelic.com/graphql" #US data center API url
headers = {
"API-Key" = var.NEW_RELIC_API_KEY
}
}
data "graphql_query" "basic_query" {
query_variables = {
accountId = var.accountId
}
query = file("./getTopFiveApis.gql")
}
ここでは何が行われているのでしょうか?まず、New RelicのAPIキーのための新たな入力変数を定義する必要があります。GraphQLプロバイダーは、New Relicにアクセスする際にこのキーを使用します。また、プロバイダーはアカウントIDも必要としますが、これはすでにprovider.tf
で定義されています。提供されたリポジトリでruntf.sh
ファイルを使用している場合には、ここで行われます。そうでない場合、READMEで説明されているように、アカウントIDを引数としてTerraformコマンドに送る必要があります。
次に、API URLとヘッダーの「APIキー」を指定して、認証に必要なGraphQLプロバイダーを設定します。アカウントがEUのデータセンターにある場合、EUのAPI URL(api.eu.newrelic.com
)を使用しなくてはなりません。
最後に、プロバイダからのgraphql_query
データ機能を使用して、New RelicのGraphQL APIにクエリを行います。ここでは、アカウントIDをクエリ変数として指定し、先に作成したGraphQLクエリファイルを参照します。
ダッシュボードを作成する
次に、NRQLクエリの結果をtemplatefile()
機能のCONFIG値に送ります。以下のコードは、/dash_nrql_composed
にあります。
locals {
template_render = templatefile(
"${path.module}/dashboards/composed_widgets.json.tftpl",
{
ACCOUNTID = var.accountId
CONFIG = jsondecode(data.graphql_query.basic_query.query_response).data.actor.account.nrql.results
}
)
}
resource "newrelic_one_dashboard_json" "nrql_dashboard" {
json = local.composed_render
}
jsondecode()
機能が、結果から必要なデータを抽出し、それをCONFIG
変数に割り当てます。CONFIG
データの形は、クエリの結果のデータとなっているため、前述のパートと少し違って見えます。
jsondecode(data.graphql_query.basic_query.query_response).data.actor.account.nrql.results
テンプレートファイル(dashboards/nrql_composed_widgets.json.tftpl
)は、CONFIG
オブジェクトのNRQLクエリにより返されたAPIを通じて反復し、各API向けのダッシュボード列を生成します。このファイルの機能の詳細は、本シリーズ第2部のダッシュボードウィジェットの作成をご参照ください。ここでも、ダッシュボードを動的に作成するための反復を使用しています。
このTerraform設定を適用すると、合計コールによる上位5位のパブリックAPIのリストが取得できます。この変更を適用するたびに、最新データを使用してダッシュボードが生成されます。
まとめ
本ブログでは、TerraformとJSONを使用して、NRQLクエリに基づきNew Relicで動的ダッシュボードを作成する方法について学びました。この手法を、現実世界のデータを使って、動的に変化するダッシュボードの構築に活用しましょう。たとえば、人気のプロダクト、予定表のイベント、パフォーマンスの悪いサーバーなどに基づいてダッシュボードを作成できます。
このパターンを適切に使いこなすには、ダッシュボード設定の頻繁な再適用が必要です。これはイベントスによりケジューリングやトリガーが可能で、コードとしてのオブザーバビリティガイドで説明されているようなCI/CD Workflowを使用して管理するのが最適です。
まだこのシリーズのコードについて詳細を確認していない方は、nr-terraform-json-dashboard-examplesリポジトリをご覧ください。カスタムダッシュボードをすばやく立ち上げるのにご活用いただけます。
次のステップ
TerraformとJSONを使用したNew Relicダッシュボードの作成についての本シリーズの別パートも、ぜひお読みください。
まだNew Relicをお使いいただいていない場合は、無料でNew Relicの使用を開始できます。無料アカウントには、毎月100GBの無料データ取り込み、1名の無料フルアクセスユーザー、および無制限の無料ベーシックユーザーが含まれます。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。