[New Relic] NerdGraphとNewRelic CLIを活用して効率的に運用する方法
この記事はNew Relic Advent Calendar 2024の 5 日目の記事です!
はじめに
複数のダッシュボードやアラート設定を管理する場合、GUIでの操作でも可能ですが、
NerdGraph、NewRelic CLI、NRQL(NewRelic Query Language)を活用することで、
効率的な運用が実現できる場面もあります!
- NerdGraphを使ったことがない
- New Relic CLIを使ったことがない
- 作業を効率化したい
これらの内容に少しでも興味を持っていただけた方は、
ぜひ最後まで読んでみてください!🙏
1. NerdGraphとNew Relic CLI
NerdGraph
NerdGraphは、New Relicの機能設定の管理や、NRQL(New Relic Query Language)を用いてクエリを実行して情報を取得できるAPIです。
機能設定の管理と紹介しましたが、
ユーザー管理やAPMエージェント設定、アラート設定など様々な設定をすることができます。
NerdGraph API エクスプローラー
NerdGraphは、curlコマンドやNew Relic CLIを使用してリクエストを送信できますが、
初めに触ってみる時にはNerdGraph API エクスプローラーを使用するのがオススメです。
NerdGraph API エクスプローラーにはQuery Builderが用意されているため、
GraphQLの記述方法がわからなくても取り扱うことができます。
また、簡単なチュートリアル記事があります。
New Relic CLI
ターミナルやコマンドからエンティティのタグ管理や、デプロイメントマーカーの記録などを実行できるCLIです。
以下のコマンドでインストールが可能です。
インストール後にはプロファイルを設定しておきましょう。
brew install newrelic-cli
newrelic profiles add --profile dev --apiKey <API Key> -r <region(us or eu)>
New Relic CLIを利用し、
先ほど紹介したNerdGraphやNRQL(New Relic Query Language)も実行することができます。
New Relic CLIでNerdGraphを使う
以下のNerdGraphで、ダッシュボードの作成とウィジェットの追加ができます。
mutation {
dashboardCreate(
accountId: <accountId>
dashboard: {
name: "test", description: "test", pages: {
name: "page1", widgets:{
title: "Sample Chart", layout: {
row: 1, column: 1, width: 4, height: 4
}, rawConfiguration: {
nrqlQueries: [{
accountId: <accountId>, query: "SELECT count(*) FROM Transaction SINCE 1 day ago"
}]
}, visualization: {
id: "viz.area"}
}
}, permissions: PRIVATE
}
) {
entityResult {
guid
name
}
errors {
description
}
}
}
これをNerdGraph API エクスプローラーで実行することも可能ですが、
New Relic CLIを利用して以下のコマンドで実行できます。
newrelic nerdgraph query '
mutation {
dashboardCreate(
accountId: <accountId>
dashboard: {name: "test", description: "test", pages: {name: "page1", widgets: {title: "Sample Chart", layout: {row: 1, column: 1, width: 4, height: 4}, rawConfiguration: {nrqlQueries: [{accountId: <accountId>, query: "SELECT count(*) FROM Transaction SINCE 1 day ago"}]}, visualization: {id: "viz.area"}}}, permissions: PRIVATE}
) {
entityResult {
guid
name
}
errors {
description
}
}
}
'
実行後にダッシュボードの一覧を確認すると、新たにダッシュボードが追加されています。
モニターダウンタイム設定
ダウンタイムがあるサービスのメンテナンス作業中などで、
モニターダウンタイム設定をしておらず、アラートを飛ばしまくった方も(きっと)多くいるはずです。
そこで以下のNerdGraphを生成し、
メンテナンス作業の手順に組み込みました👷
mutation {
syntheticsCreateOnceMonitorDowntime(
accountId: <アカウントID>
name: "Service Maintenance DownTime"
monitorGuids: ["<モニタリング対象外のMonitor Guid>"]
timezone: "Asia/Tokyo"
startTime: "2024-12-27T22:00:00"
endTime: "2024-12-28T00:00:00"
) {
guid
accountId
name
monitorGuids
timezone
startTime
endTime
}
}
monitorGuidsについては、以下のNerdGraphで取得ができます。
{
actor {
entitySearch(queryBuilder: {alertable: true, type: MONITOR}) {
results {
entities {
guid
name
type
}
}
}
}
}
作業の半自動化
NerdGraphやNew Relic CLIについてご紹介しましたが、
正直なところ、初めて触れたときには「GUIで操作できるなら、これをわざわざ使う必要ってあるの?」と思っていました。
ところが実際に運用してみると、設定変更があるたびにマニュアルの更新が必要になったり、
手作業によるミスが意外と多く発生してしまうことに気づきました。
これでは効率的とは言えません。
そこで、Shell ScriptやPowerShell Scriptを活用して、
繰り返し行うGUI操作をスクリプト化してみたところ、
作業時間を大幅に短縮できただけでなく、ヒューマンエラーのリスクも大きく減らすことができました。
以下は、実際に利用していたスクリプトファイルの一部です。
次のステップ
まだ、スクリプトを手動実行しているので、まだ完全な自動化とは言えません。
- CI/CDパイプラインへに組み込み
- GraphQL Codegenを利用したツールの作成(GraphQLの型チェック)
まとめ
オブザーバビリティプラットフォームにおいて、
ダッシュボードやアラートの設定は一度行えば終わりではないです。
日々のモニタリングやシステムの変化に合わせたチューニングが欠かせません。
システムが進化し、監視対象のプロダクトが増えたり、サービスの利用者が増加して負荷が高まる中では、この作業量は自然と増えていきます。
今回の記事では、NerdGraphとNew Relic CLIを中心に、
その効率化を図る方法についてご紹介しました。
これらのツールを活用することで、手作業に伴うヒューマンエラーを減らし、
自動化や標準化を進めることが可能です。
とはいえ、New Relicにはまだまだ多くの便利な機能が備わっており、
これらを適切に活用することで、運用管理の負担をさらに軽減できる余地があります!
New Relicをフル活用し、次のステップに進んでいきましょう!💪
Discussion