みなさんこんにちは。マネージドサービス課の塩野です。
今回はNew Relicのクエリ言語であるNew Relic Query Language(NRQL)についての話題です。
インフラ監視を行っていると、メトリクスの値が「198374829056 Bytes」のように膨大な桁数で表示され、瞬時に状況を把握できないことがあります。また、標準で取得できるメトリクスをそのまま使うだけでは、実務で本当に見たい指標が得られないケースも少なくありません。
New Relicのクエリ言語であるNRQL(New Relic Query Language)を使えば、ダッシュボード上で簡単に単位変換や演算を行い、「見やすい数値」に変換できます。本記事では、インフラ担当者が実務ですぐに使えるNRQLの演算・単位変換テクニックを解説します。バイト単位をGB単位に変換する方法や、複数メトリクスを組み合わせた計算方法など、実践的な内容をお届けします。
1. NRQLの基本的な演算機能
NRQLは、四則演算(加算+、減算-、乗算*、除算/)をサポートしており、SELECT句内で数値属性や集約関数の結果に対して計算を実行できます。これらの演算子を使うことで、取得したメトリクスをその場で加工し、より意味のあるデータポイントを作成できます。
基本的な構文は次のとおりです。
SELECT (属性やメトリクス名) 演算子 (値や別の属性) AS 'ラベル名' FROM データタイプ
たとえば、トランザクションの全体応答時間からデータベース処理時間を引いて、アプリケーション処理時間を算出する場合は、次のようなクエリになります。
SELECT average(duration - databaseDuration) AS 'App Processing Time' FROM Transaction
ここで重要なのがAS句です。AS句を使うことで、計算結果に分かりやすいラベルを付けられます。ダッシュボードを見る他のメンバーにとっても、「この数値が何を意味するのか」が一目でわかるため、チーム全体の認知負荷を下げることにつながります。
参考ドキュメント
docs.newrelic.com docs.newrelic.com
2. バイト単位の変換実例
インフラ監視で最も頻繁に必要となるのが、バイト単位の変換です。New Relicのインフラストラクチャエージェントは、ディスク容量やネットワーク転送量を「Bytes」単位で記録しますが、実際の運用では「GB」や「Mbps」といった単位で確認したいケースがほとんどです。
ディスク空き容量をGBで表示する
ディスクの空き容量はhost.disk.freeBytesというメトリクスで取得できます。これをGBに変換するには、1024を3回除算します。
SELECT latest(host.disk.freeBytes) / 1024 / 1024 / 1024 AS 'Free Disk (GB)' FROM Metric
このクエリでは、latest()関数を使って最新の値を取得し、1024で3回割ることでBytesからGB(GiB)に変換しています。結果として、「185.4 GB」のような見やすい形式で表示されます。
ネットワーク転送量をMbpsで表示する
ネットワークの送信速度はhost.net.transmitBytesPerSecondとして記録されています。これをMbps(メガビット毎秒)に変換するには、まずバイトをビットに変換(8倍)し、その後1024を2回除算してメガビットにします。
SELECT average(host.net.transmitBytesPerSecond) * 8 / 1024 / 1024 AS 'Transmit (Mbps)' FROM Metric
ここではaverage()関数を使って平均値を算出しています。ネットワーク転送量は変動が大きいため、瞬間値よりも平均値のほうが傾向を把握しやすいためです。
なお、単位変換で注意したいのが「1024で割るか、1000で割るか」という点です。一般的に、ストレージ容量は2進数ベースの1024(GiB)、ネットワーク速度は10進数ベースの1000(GB)を使う慣習がありますが、この記事では統一性を重視して1024を使用しています。
3. 複数メトリクスを組み合わせた演算
New Relicはhost.memoryUsedPercentのように、一部の使用率メトリクスを標準で提供していますが、すべての指標がパーセント形式で用意されているわけではありません。そのため、複数のメトリクスを組み合わせて、独自の計算を行うケースもあります。
たとえば、ディスク使用率を自分で計算したい場合、次のような式になります。
使用率 (%) = (総容量 - 空き容量) / 総容量 × 100
これをNRQLで実装すると、次のようになります。
SELECT (latest(host.disk.totalBytes) - latest(host.disk.freeBytes)) / latest(host.disk.totalBytes) * 100 AS 'Disk Usage (%)' FROM Metric
このクエリでは、latest()関数でディスクの総容量と空き容量を取得し、差分を計算してから総容量で割り、100を掛けることでパーセント表示にしています。結果として「78.3%」のような分かりやすい形式で表示されます。
同様の考え方で、ネットワーク帯域の使用率やCPU時間の比率なども計算できます。インフラエンジニアとしての知識を活かして、「標準にない指標」を自作することで、より実務に即したダッシュボードを構築できます。複数の属性を組み合わせた計算により、より意味のあるデータポイントを作成できるのがNRQLの強みです。
4. 集約関数の使い分け
NRQLで演算を行う際、どの集約関数を使うかによって、得られる結果の意味が大きく変わります。インフラ監視において特に重要なのが、latest()、average()、max()の3つです。
latest():最新値の取得
latest()関数は、指定した時間範囲内で最も新しい値を返します。現在のシステム状態を確認したいときに使います。たとえば、「今、ディスクの空き容量はどれくらいか」を知りたい場合はlatest()が適しています。
SELECT latest(host.disk.freeBytes) / 1024 / 1024 / 1024 AS 'Current Free Disk (GB)' FROM Metric
latest()関数はデータが疎な場合や、何かがレポートを開始または停止したタイミングを調査する際に特に有用です。
average():平均値の取得
average()関数は、指定した時間範囲内の平均値を計算します。長期的なトレンドを把握したい場合や、変動が大きいメトリクスを滑らかに表示したい場合に適しています。
SELECT average(host.cpuPercent) AS 'Average CPU (%)' FROM Metric SINCE 1 hour ago
ただし、平均値には注意点があります。瞬間的なスパイク(急激な負荷上昇)が発生した場合、平均値では埋もれてしまい、重要な異常を見逃す可能性があります。
max():最大値の取得
max()関数は、指定した時間範囲内の最大値を返します。瞬間的なリソース枯渇を検知したい場合に必須です。
SELECT max(host.cpuPercent) AS 'Peak CPU (%)' FROM Metric SINCE 1 hour ago
たとえば、過去1時間のCPU使用率の最大値を確認することで、「一瞬でも100%に達していないか」をチェックできます。インフラ監視では、平均値だけでなく最大値も併せて確認することで、より正確な状況把握が可能になります。
参考ドキュメント
docs.newrelic.com docs.newrelic.com
まとめ
本記事では、New RelicのNRQLを使った演算・単位変換の実践テクニックを解説しました。四則演算を活用すれば、バイト単位をGBに変換したり、複数のメトリクスを組み合わせて独自の指標を作ったりと、インフラ監視で本当に必要な「見やすい数値」を作り出せます。また、latest()、average()、max()といった集約関数を適切に使い分けることで、より正確な状況把握が可能になります。
インフラ担当者として、監視ダッシュボードの「見やすさ」は極めて重要です。数値が直感的に理解できる形で表示されていれば、異常への気づきが早くなり、迅速な対応につながります。今回紹介したテクニックを実務で活用し、より効果的なインフラ監視を実現してください。
この記事がどなたかのお役に立てれば幸いです。
関連記事
◆ 塩野 正人
◆ マネージドサービス部 所属
◆ X(Twitter):@shioccii
◆ 過去記事はこちら
前職ではオンプレミスで仮想化基盤の構築や運用に従事。現在は運用部隊でNew Relicを使ってサービス改善に奮闘中。New Relic User Group運営。